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. Пишите собственный софт!

Ибо расширяемость как правило плохая идея. Расширения в конечном итоге ведут к большему усложнению…

  • Куцый Вейланд + тонна расширений = гибкий подход, модно, молодежно.
  • Расширяемый Web = плохая идея, большее усложнение.

Смотри не перепутай.

anonymous ()

Markdown на минималках

И что на нём можно сделать?

Форум типа ЛОРа — нельзя.

Интернет-магазин — нельзя.

Вики — нельзя.

Поисковик — нельзя. Оно и зачем, когда весь Geminispace — четыре с половиной странички. Не заблудишься.

Даже порносайт не сделать. Там тупо inline-картинок даже нет. Интернет без порнухи — вы угораете там? Почему все плохие люди начинают с борьбы с порнухой в интернете? Афтар, анус себе запрети да убейся апстену.

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

По-моему, оригинал изначально и грубоват.

Как мне кажется, «ass» в данном контексте – «хрень редкостная» или что-то вроде того. Для меня «быть в жопе» означает более высокую степень проблем, с меньшей долей субъективизма. Например, если рассматривать долю рынка, то у Google Chrome все в порядке,а Firefox – в жопе, но оба они – хрень редкостная (ass).

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

не. Деволт хороший программист, хоть и очень opinionated, но как человек он на голову ушиблен. «В жопе» тут правильный перевод)

Я знаю, что за словом он в карман не лезет, но когда говорят «you are an ass», «don’t be an ass» и т.д., то имеют в виду – «не веди себя, как козел», а не «не будь в дерьме».

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

О многостоящий веб-макакразработчик, просветите же скорее, почему же AMP не является ублюдочным мусором и полнейшим говном нужным только гуглу? Особенно учитывая сбор бигдаты гуглем и цензуру неугодной гуглю информации. А ещё можно рассказать, почему всё более популярными становятся разные URL-cleaner’ы, которые избавляют людей от подобного дерьмища.

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

Думаю, это замечание имеет место быть. Спасибо за фикс.

Спасибо за перевод. Видел слово «gemini» мельтешило в его блоге, подумал «хрень редкостная»:), не стал нажимать. Так что, если бы не этот перевод, то я бы так и не узнал что это.

anonymous ()

Ибо расширяемость как правило плохая идея.

Всё однозначно зашквар этого Дрю Деволт, не из за не расширяемости, а из за «То что нам не нужно ненужно в принципе! Если у нас чего то нет то это говно по определению».

Нет бы сказать, у нас скромные возможности и одна из целей это сохранение простоты в ущерб фичам. Но нет, надо выкрутить финтом и спороть дичайшую тупость. Он поди ещё и TOML революшоном называет.

Хорошо когда есть простые и лаконичные инструменты, они приятны. Плохо когда что-то более крутое во всех смыслах принижается.

И да

Реализация сервера или клиента может быть написана одним человеком с нуля в промежутке одного-двух дней.

LTS свой за два дня! Изи!

Нет милок, когда говорят протокол и его реализацию то подразумевают полную от и до. А не нашлёпку над библиотеками.

Спроектировать такое да можно за два дня, а потом написать ещё за два дня.

Выглядит как школьная поделка сына директора школы которая выиграла первое место в областном соревновании мер области при этом его мама. То есть просто на ровном месте от банальной вещи восторги. Это очень странно выглядит. Для узких задач и фановых вещей это несомненно прикольная штука, но собсна и всё.

Любые данные можно передавать и формировать на клиенте вид как угодно, да хоть через qt/gtk интерфейс строить по итогу.

А ещё можно взять http вырезать из него всё нахер и оставить только куцый функционал который можно реализовать за 2 дня и оно будет работать у всех сразу от нетсюрфа то современных монстров и curl и чем угодно иным из коробки.

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

Нет бы сказать, у нас скромные возможности и одна из целей это сохранение простоты в ущерб фичам.

Да нет. В той же статье упоминается, что если оставить эти «фичи», то получится тот же веб, только вид сбоку. Со всеми его болезнями, в т.ч. и с потенциальной переусложнённостью. Тогда возникает вопрос. Зачем нам нужен Gemini с такими «фичами», если мы уже имеем веб?

Так что отсутствие этих «фич» - как раз фича этого протокола.

rhubear ()
Последнее исправление: rhubear (всего исправлений: 1)

Веб-браузеры чрезвычайно переусложнены

Ещё один дурачок, который думает, что кто-то делает сложное там где можно сделать просто?

Мы не можем иметь «веб» без всех этих проблем

Очень даже можем. Это не просто, а очень просто. Потому что это «может быть написано одним человеком с нуля в промежутке одного-двух дней». Мы не хотим простой веб, мы хотим свистоперделки на сотни гигабайт.

Он очень простой

Не актуально, у нас достаточно макак для написания протокола любой сложности.

Он не расширяемый

Не актуально, людям постоянно нужно что-то новое.

Он однозначен в вопросах форматирования документов

Тавтология, повторение предыдущего пункта.

no-such-file ★★★★★ ()
Ответ на: комментарий от Stanson

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

К бигдате и цензуре AMP отношения не имеет, как и к URL-клинерам.

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

всё правильно, почитай параграфы «cons». Видел например, как он на go пишет? Я видел. Запиливает горутины, пишет оттуда в переменные без мьютексов, на багрепорты о гонках заявляет, что это проблемы языка:

Cons: the runtime is too complicated, no distinction between green threads and real threads (meaning all programs deal with the problems of the latter)

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

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

К бигдате и цензуре AMP отношения не имеет

забавно читать такое на фоне недавних новостей

Google объявила о запуске решения для AMP (Accelerated Mobile Pages), которое расширяет возможности рекламы. Это алгоритмическая реклама в веб-сториз. Решение будет доступным для издателей, использующих Менеджер рекламы и AdSense. Сториз можно публиковать без привязки к конкретной платформе.

и там же пример со специальными AMP-тегами. «Embrace, Extend, Extinguish» в чистом виде.

Lrrr ★★ ()
Последнее исправление: Lrrr (всего исправлений: 1)

Он не расширяемый

И значит никому не нужный.

Да и вообще на какую нишу он ориентируется? Простота? Возьми http 1.0 и html 3.01 делов то - тоже можно реализовать в обозримое время.

Реализовать за день два? криптография и юникод говорят - ню-ню.

Браузеры переусложннены да и г*но? бесспорно. То что продвигает гугле и компания в виде «прогресса» http - беспросветный кал? бесспорно. Но это не значит, что проблемы веба можно решить простой ничего не умеющей хренью.

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

Возьми http 1.0 и html 3.01 делов то

Почитай спецификацию gemini и gemtext, и найди, где ты неправ.

Реализовать за день два? криптография и юникод говорят - ню-ню.

Зачем? Часто ты tcp/ip стек переписываешь, когда надо в интернет сходить?

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

Был же gopher. Больше 10 лет назад выпилили. Смысл такое же запиливать обратно? Не знаю зачем оно вообще может понадобиться, кроме как для фана. А значит обречено.

Stack77 ()
Последнее исправление: Stack77 (всего исправлений: 1)