LINUX.ORG.RU

Дрю Деволт: да что такое это ваше Gemini и почему я так в восторге от него? [перевод]

 , , ,


0

2

Оригинал: https://drewdevault.com/2020/11/01/What-is-Gemini-anyway.html

Я в своём блоге писал о некоторых специфичных вещах, связанных с Gemini, если взглянуть на последние два месяца или около того. Но так до сих пор и не написал более широкое введение в этот протокол: о том, что я делаю с помощью него и почему вы должны быть восхищены им так же, как и я. Давайте сделаем это сегодня!

Gemini - сетевой протокол для обмена гипертекстовыми документами. «Гипертекстовый» - в общем смысле этого слова, а не в отношении HTML («HyperText Markup Language»), который понимают веб-браузеры. Это простой сетевой протокол, который позволяет клиентам запрашивать гипертекстовые документы (в собственном формате, который называется gemtext). В некотором смысле, это эволюция протокола Gopher, но более модернизированная и упрощённая.

Gemini очень прост. Протокол использует TLS для установления шифрованного соединения (чаще используя самоподписанные сертификаты и Trust on first use (TOFU), чем центры сертификации). И он использует очень простой обмен: клиент отсылает URL того, что он хочет получить, завершая запрос символом новой строки. Сервер отвечает информационной строкой, которая содержит числовой код статуса и некоторую дополнительную информацию (такую как MIME-тип документа), затем пишет документ и завершает соединение. Аутентификация при желании выполняется с помощью клиентских сертификатов. Пользовательский ввод при желании выполняется с помощью кода ответа, который передаёт строку приглашения для ввода после чего выполняется второй запрос с ответом пользователя, который закодирован в query string URL-строки. Да и вот, собственно, и всё!

$ openssl s_client -quiet -crlf   \
    -servername drewdevault.com   \
    -connect drewdevault.com:1965 \
  | awk '{ print "response: " $0 }'
gemini://drewdevault.com
response: 20 text/gemini
response: ```ASCII art of a rocket next to "Drew DeVault" in a stylized font
response:   /\
response:   ||    ________                         ________       ____   ____            .__   __
response:   ||    \______ \_______   ______  _  __ \______ \   ___\   \ /   /____   __ __|  |_/  |_
response:  /||\    |    |  \_  __ \_/ __ \ \/ \/ /  |    |  \_/ __ \   Y   /\__  \ |  |  \  |\   __\
response: /:||:\   |    `   \  | \/\  ___/\     /   |    `   \  ___/\     /  / __ \|  |  /  |_|  |
response: |:||:|  /_______  /__|    \___  >\/\_/   /_______  /\___  >\___/  (____  /____/|____/__|
response: |/||\|        \/            \/                 \/     \/             \/
response:   **
response:   **
response: ```
[...]

Так почему я восхищён этим протоколом?

Моё презрение к веб-браузерам хорошо документировано (раз, два, три). Веб-браузеры чрезвычайно переусложнены и любые попытки создать новый будут являться сизифовым трудом. Удачное выполнение этой работы, если и возможно, будет неизбежно порождать лавкрафтовский беспорядок, который невозможно мэйнтейнить, полный уязвимостей, отжирающий гигабайты оперативной памяти при использовании и часы при компиляции. И учитывая, что все современные веб-браузеры, что реализуют полезную часть веб-стандартов, очень плохи и становятся только хуже, то что мы можем сделать?

Проблема неразрешимая. Мы не можем иметь «веб» без всех этих проблем. Но вот что мы можем, так это иметь нечто немного другое, что-то типа Gemini. Gemini не решает все проблемы веба, но то подмножество юзкейсов, на которое он нацелен, он решает лучше веба и это меня восхищает в нём. Я хочу отказаться от той части веба, которую Gemini выполняет лучше и найти решения для оставшихся частей веба, которые имеет смысл сохранить (подсказка: самую малую часть).

Вот некоторые аспекты этого протокола, которые я очень одобряю:

  • Он очень простой. Реализация сервера или клиента может быть написана одним человеком с нуля в промежутке одного-двух дней. Новый веб-браузер может занимать миллион часов при сотнях разработчиков для полной реализации.
  • Он не расширяемый. Gemini спроектирован так, чтобы его было трудно расширять без потери обратной совместимости и почти все запросы на расширение в рассылке в конечном итоге сносятся. Это хорошо. Ибо расширяемость как правило плохая идея. Расширения в конечном итоге ведут к большему усложнению и Gemini может страдать от той же участи, что и веб, если он не будет противиться расширениям.
  • Он однозначен в вопросах форматирования документов. В нём нет inline-ссылок (каждая ссылка идёт на новую линию), никакого форматирования и никаких inline-изображений (inline images). Gemini строго разделяет роли доставки контента и его отображения. Доставка контента - роль исключительно сервера, а его отображение - исключительно клиента. Здесь нет «стилей сайта» и роль автора очень мала в вопросах того как должен отображаться контент. Авторы всё ещё имеют возможность проявлять себя в этих рамках, ровно как и в любых других. Да и они позволяют быть клиентам проще и действовать как пользовательский инструмент, нежели вендорский.

Некоторые люди утверждают, что нам стоит сделать «веб, но в чуть урезанном виде», т.е. взяв только «нормальное» подмножество веб-стандартов. Я не согласен с этим (например, я не считаю, что существует «нормальное» их подмножество), но я оставлю это для своего другого поста. Gemini - это новая среда, и она отлична от веба. Любой, кто входит в неё должен быть готов к этому и открыт её рамкам. Ограничения порождают креативность!

Что насчёт меня. Я работал над некоторыми проектами, связанными с Gemini. Например, этот блог теперь доступен и через Gemini и я начал писать эксклюзивный контент, доступный только через этот протокол. Я также написал некоторый софт, которым вы можете воспользоваться:

  • libgmni, gmni и gmnlm - мой инструментарий для клиентского софта. Всё написанно на C11 и только лишь требует POSIX-like систему с OpenSSL. libgmni - клиенсткая библиотека общего назначения для Gemini с простым интерфейсом. gmni - CLI-утилита для выполнения Gemini-запросов, выполненная в стиле cURL. Ну и, наконец, gmnlm - line-mode браузер с богатым набором фич. Вместе эти утилиты достигают около 4000 строк кода из которых 1600 - URL-парсер, взятый из cURL.
  • gmnisrv - высокопроизводительный Gemini-сервер, написанный на C11 для POSIX-систем с OpenSSL. Он поддерживает TLS без конфигурирования (zero-configuration TLS), CGI-скриптование, auto-indexing, regex routing, URL-перезапись и планирую ещё несколько вещей для версии 1.0. И весь код достигает около 6700 строк кода из которых 1600 - тот же код, взятый из cURL и ещё дополнительно 2800, взятые из quickjs Фабриса Белларда для реализации регэкспов.
  • kineto - это сетевой шлюз для соединения HTTP-клиента и Gemini-сервера. Реализован в одном Go-файле при поддержке go-gemini библиотеки от ~adnano. Мой Gemini-блог доступен через этот портал, если вы хотите посмотреть его.

Так что погружайтесь и изучайте! Устанавливайте gmnisrv на свой сервер и настраивайте своё Gemini-окружение. Читайте фиды из CAPCOM. Пишите собственный софт!

Что помешает его расширять непонятно.

Текст он передаёт, а потом в этот текст можно встроить тэги, которые уже будут обрабатываться браузером.

Вот и расширение.

А так-то верно, что большинство сложнейших сайтов можно заменить простейшей страничкой в «социальной» сети типа vk.

Bad_ptr ★★★★ ()
Ответ на: комментарий от urxvt

Левачьё

иначе нас ждут времена, когда без разрешения Гугла в интернеты не войдешь и про белых натуралов спокойно не почитаешь

А как эта проблема решается в Gemini? Автор то тоже «из этих».

Google ... kowtows to oppressive regimes, and punishes workers who stand up to them.
... Uber and Airbnb ... are ... fostering a “gig” culture in which the poor have no stability or security.
... contempt of the law, tax evasion, ppression of the poor, of minorities… this is what our industry is known for

Вольный перевод фрагмента:

Гоголь, который «заискивает с деспотичными режимами», не даёт несчастным работникам организовать проф. союзы. Uber и Airbnb эксплуатируют нищуков, которые не имеют стабильности и гарантии работы (прим.: то ли светлое время «кэбов», когда проезд стоил в десятки раз дороже, машин на всех не хватало из-за искусственной монополии, а нищуков в таксисты не принимали вовсе). Презрение к закону (прим.: речь про конкуренцию с «кэбами»), уклонение от налогов, притеснение нищуков и меньшинств. Это то, чем известна наша индустрия.

anonymous ()
Ответ на: комментарий от rhubear

Например, тот же Реддит, насколько я знаю, является одним из самых популярных сайтов у европейцев и американцев. В то же время, он довольно долгое время оставался в «немодном» дизайне.

Потому что web версию использовали только вместе с Reddit Enhancement Suite - браузерным дополнением, которое превращало «немодный» дизайн во что-то удобоваримое.

anonymous ()
Ответ на: комментарий от anonymous

многие годы существования реддита самым популярным браузером был internet explorer

Многие годы существования реддита его дизайн не считался «немодным». При этом, первые 5 лет он не был и аномально популярным.

anonymous ()
Ответ на: комментарий от urxvt

Чаво?

Поднятая тобой проблема, а именно SJW, назначение и защита сирых и убогих, запрет контента, оскорбляющего чувства людей с тонкой душевной организацией - это в западных интернетах леватская повестка. Я указал на статью автора, где он эти леватские взгляды разделяет.

anonymous ()

Что это за векторный фидонет? Непонятно чем его пример отличается от простой хтмл странички с тегами pre без ксс и жс, то есть получается текущий веб уже давно включает придуманный Андрюхой велосипед. Давайте еще ксанаду вытащим из чулана.

mydibyje ()
Ответ на: комментарий от ugoday

Коммунисты считались правыми ..., а либералы — левыми

Либерализм изначально - политическая программа, построенная на идеях классической экономики (Дэвид Юм, Адам Смит, ранний Джон Милл, Дэвид Рикардо и т.д): частная собственность, экономическая и личная свобода, маленькое правительство. В 20м веке «либералами» себя массово начинают называть социалисты и интервенционисты, чьи идеи имеют мало общего с изначальным пониманием «либерализма». Поэтому, тот «либерализм», чтоб не путать начинают называть «классическим либерализмом», а социалистический - «нео-либерализмом» (а в США просто «либерализмом»). Дем. партия США, особенно её молодое крыло, например, это как раз такие нео-либералы.

anonymous ()

Любой стандарт форсится, или он не стандарт. Либо с помощью какого-то продукта, обычно нескольких, которые естественно форсятся огого, аки кока-кола. Либо с помощью власти, и не важно какой, пусть даже несколько корпораций сговорятся. Обычно используются оба подхода для достижения результата. И пользователь будет есть какое угодно дерьмо, если оно будет зафорсино как следует.

У сабжа и любых проектов, которые решают какие-то мифические задачи, но за которыми не стоят конкретные проекты и сила - всегда были и будут обречены на провал. Да, есть очень малая вероятность создать стандарт с помощью простого подхода: все взяли и договорились. Но это невозможно в нынешних условиях. Люди теперь даже в рамках одной семьи договориться не могут. Скоро даже груднички не смогут с кормящей матерью договориться об объёме потребляемого молока и частоте смены памперсов. Такой вот он, бесчеловечный мир ради бабок(которые придут в карманы избранных, точнее унаследованных)

ixrws ★★★ ()