Всё началось с энтузиастов gopher

Gopher — это такой устаревший протокол обмена данными между клиентом и сервером. Он обладает некоторыми принципиальными отличиями от привычного нам HTTP, однако рядовой пользователь вряд ли когда-то с ними будет иметь дело.

Активной жизнь протокола была недолго: почти через два года после релиза разработчики — университет Миннесоты — решил сделать реализацию сервера платной, и ресурсы стали переезжать на HTTP, формируя веб 1.0, каким мы его когда-то знали.

Однако, несмотря на это, gopher не умер насовсем. Кто-то продолжил держать сервера, а кто-то вкатился сильно позже. Несмотря на поддержку HTML-файлов протоколом, большинство владельцев gopher-сайтов продолжали вести их в текстовом виде, без какой либо разметки, как в блокноте. Минимализм имел смысл. Пока веб развивался, gopher застыл, сохраняя дух эпохи, когда он был создан. Так появилось понятие Gopherspace, описывающее совокупность gopher-ресурсов.

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

Осознавая колоссальную пропасть между современными технологиями, позволяющими И вот в 2019 году команда энтузиастов под руководством некоего Solderpunk делится своими результатами попытки совместить веб с gopher: проектом Gemini.

Что это вообще такое?

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

Протокол

Он достаточно простой и описывается одной спецификацией. Базовое требование, заложенное при создании протокола — реализация клиента или сервера должна укладываться в несколько сотен строк кода и требовать пары дней разработки. Обязательно шифрование данных посредством TLS.

Самое интересное, на мой взгляд — никаких cookie и иных данных от сервера, которые надо сохранять. Для авторизации придуман отдельный механизм, базирующийся на шифровании. Сервер может ответить клиенту просьбой сгенерировать сертификат и использовать его при формировании последующих запросов. Так сервер сможет различать разных пользователей и сохранять у себя сведения о сессиях.

Формат разметки страниц

Например, скриншот исходника страницы

Одним словом — минималистичный. Если вы знаете markdown, то даже он на фоне gemtext будет выглядеть слишком функциональным.

Форматирование построчное. Строка может быть простым текстом, ссылкой, заголовком, пунктом списка, цитатой или кодом. Целиком. Да, даже если вы хотите вставить ссылку, она будет отдельной строкой.

Картинки тоже не вставляются. Но нормальные клиенты определяют, что ссылка ведёт на картинку, и позволяют отобразить её по клику внутри страницы.

Из досадного — нет нативной возможности как-то выделить текст. Например, подчеркнуть одно слово в строке или выделить жирным одну букву. Впрочем, например, клиент Lagrange, даёт возможность реализовать это через костыли.

Зато есть возможность отображать исходный код. Многие пользуются ей, чтобы показывать крутые ASCII-арты. Ретро! А ещё в связи с неудобным использованием картинок в ходу обильное использование эмодзи. Наконец-то они реально пригодились в тексте.

Терминология

Вся эта инициатива вводит три с половиной довольно странных понятия:

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

Всё пространство ресурсов в Gemini именуется Geminispace. На русский переводится очень плохо и соответственно довольно редко употребляется. Если оперировать аналогиями, то это как веб, только в Gemini.

Гемлог (gemlog) — это блог в Geminispace. Русский перевод используется нечасто. Не знаю, зачем понадобилось отдельное слово, но видимо кто-то видел в этом смысл.

Станция (station) — термин не вполне официальный, но часто используемый. Это ресурс, занимающий целый домен (или поддомен), на котором могут располагаться много разных капсул. Характерное свойство станции — локальный путь в адресе начинается с тильды и последующего имени пользователя, например gemini://station.example.com/~username. В общем, что-то вроде шаред хостинга типа старого народ.ру, поскольку до соцсети обычно не дотягивает по функционалу. Впрочем, поскольку понятие в документации не закреплено, не всякий подобный ресурс именует себя станцией и не каждая станция действительно предоставляет пространство другим пользователям.

И зачем оно надо?

Я вижу несколько причин в зависимости от пользователей.

Во-первых, минимализм, упрощающий чтение. Как в режиме «для чтения» в браузерах, только ещё проще. Никаких cookie, никаких баннеров, никаких JS-скриптов, никакого шума. Сервер отдаёт минимально форматируемый текст, а пользователь может настроить у себя, как он хочет его отображать. А может и не настроить — не все клиенты позволяют, хаха. Должно понравиться как параноикам, так и любителям отвлекаться.

Во-вторых, ностальгия. Легковесные страницы, словно оптимизированные для загрузки через 16 кбит/с диалапом, украшенные ASCII-артом вызывают тёплые чувства у старожилов.

В-третьих, специфичная аудитория. Несмотря на довольно низкий порог входа, Geminispace неинтересен обывателям — в нём не очень удобно смотреть мемчики и видосики и в него не очень удобно постить. В нём нельзя сделать даже банальный чат в реальном времени. Для многих он слишком простой. Из-за этого контент пишут преимущественно техногики для таких же, как они.

Ну и в-четвёртых, из-за относительно узкого круга пользователей, в нём несколько проще стать заметным и узнаваемым. Это тоже не может не привлекать некоторых людей.

Подводные камни

Новый протокол — новые потребности. Да, сервер легко разработать с нуля, и готовые библиотеки имеются в изобилии, но пока нет уверенности в том, насколько они безопасны и отказоустойчивы.

Для http(s) серверов решением был бы Cloudflare или какой-либо иной WAF. Но Gemini — совсем не http, поэтому и для защиты сервисов идеальных готовых решений нет — придётся искать и настраивать какое-то более комплексное решение. И, скорее всего, за него придётся платить сотню-другую баксов в месяц. Или же собирать велосипед самостоятельно.

Ко всему прочему, аудитория ресурса не будет большой. Это своего рода порочный круг: люди не идут вести гемлоги, поскольку их мало кто будет читать. Люди не идут читать гемлоги, потому что их мало кто ведёт. В итоге, Geminispace во многом формируется людьми, энтузиазм которых превосходит навыки. Это, конечно, похвально, но читать не всегда интересно. Интересные материалы просто некогда публиковать.

Как вкатиться

Берёте клиент, открываете в нём поисковик и ищете что-то интересное.

Хороший кроссплатформенный браузер — Lagrange. Пользуюсь на маке и на айфоне. Раньше на айфоне был Elaho, но пару лет назад он перестал поддерживаться и теперь его нет в AppStore. Лагранж тоже в аппсторе отсутствует, но хотя бы ставится через TestFlight.

Самым Главным Поисковиком некогда был geminispace.info, но полтора месяца назад он перестал обслуживать поисковые запросы, а на главной странице у него висят ссылки на AuraGem, Gemplex, Kennedy и tlgs.one. Я пока не определился, какой из них лучше.

Хотите углубиться — посмотрите на awesome-список для Gemini, там много разного интересного.

Личный опыт

Я пока не понял, зачем оно мне. Вроде, концепция крутая, но реализация не всегда радует. И самое досадное — мне реально нечего читать. Я захожу и просто не нахожу интересных капсул, в которых есть какие-то новости. Наверное, если пошариться подольше, можно будет найти несколько ресурсов, обновляющихся чуть чаще, чем раз в полгода, и добавить их в закладки. Или может даже найду интересный форум... Помните, были в вебе такие?

Вообще, с user-generated content всё сложно. Протокол не очень дружелюбен к отправке данных, есть лимиты по длине запросов, а авторизация завязана на клиентские сертификаты, поэтому по большей части сайты однонаправленные: от автора к читателям. Ну, может, у кого-то есть ещё гостевые книги, как в далёких нулевых. Периодически попадаются гемлог-платформы (например, gemlog.blue или smol.pub) и «аналоги реддита» (bbs.geminispace.org), но публикация работает либо плохо и неудобно, либо через обычный веб: пишем в браузере, читаем в Gemini-клиенте или браузере... Но зачем тогда Gemini, если у вас в вебе всё точно такое же?

Сильно печалит, что часто сервисы в Geminispace и для него имеют довольно ограниченный срок жизни. Нельзя привыкать к чему-либо, ибо даже популярные (по местным меркам) ресурсы часто живут только за счёт энтузиазма. Энтузиазм заканчивается — сервис умирает.

Но всё-таки хочется немного поддержать инициативу и внести свой вклад в развитие пространства. Поэтому теперь блог можно читать в Gemini по адресу gemini://gemini.danis.one. Возможно, когда-нибудь даже напишу туда пару постов, эксклюзивных только для этого протокола. А исходники сервера, проксирующего запросы из Gemini в веб, открыты.

А обсудить можно в телеге.