Недооценённый Markdown и чем плох Gemini

Хочется странного: читать в терминале, например документацию, статьи или новости. Вспомнился любопытный проект Gemini, о котором я слышал в подкастах (не путаем с нейросетью Gemini). С одной стороны это большой шаг назад по сравнению с современным вебом, с другой это способ сдержать взрыв сложности и оставить простые вещи простыми.

Консольный клиент Amfora, на удивление, есть даже в стандартных пакетах убунты, и он неплохо справляется и приятно выглядит, но довольно быстро замечаются недостатки. При плохом соединении или долгом ответе клиент зависал, навигация была сложнее чем могла бы быть, сёрфинг в обычном браузере ощущается по сравнению с Амфорой намного быстрее и отзывчивее. Можно винить качество исполнения этого конкретного клиента, но кажется здесь немало недостатков самого протокола Gemini.

Протоколы: Gemini против http

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

Использование TLS в Gemini обязательно, при этом существующая глобальная инфраструктура PKI не используется, вместо этого предлагается доверять самоподписанным сертификатам при первой встрече, и не доверять при последующей если сертификат вдруг изменился, предполагается что в этом случае началась атака и злодей пытается нас обмануть. Естественно, есть шанс что в самом начале встретится именно этот злодей, и последующие попытки сходить уже на легитимный сервер будут отклонены. С другой стороны, конечно, нет необходимости искать организацию, которая выпустит сертификат, и это делает участников сети чуть более автономными.

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

Немаловажно что если я вдруг захочу поучаствовать в паутине Gemini, мне скорее всего придётся держать два сервера: один для Gemini, второй для дублирования в обычном вебе, сам сайт geminiprotocol.net так делает. Это довольно весомая дополнительная человеческая (хотя и машинная тоже) нагрузка владельцам и администраторам сайтов, которую сложно оправдать желанием защитить протокол от усложнения. Ладно бы протокол как-то кардинально отличался и привносил новое, но это всего лишь сильно урезанная версия http.

Вывод: несмотря на упрощения в Gemini, «сложный» http раздавать фактически проще, и он будет заметно отзывчивее для пользователя.

Разметка: Gemtext против Markdown

Gemini имеет свой уникальный формат разметки страниц, gemtext. Его очень легко парсить, вся разметка применяется построчно. Строка может быть к примеру ссылкой, цитатой, заголовком, пунктом списка. Никаких inline элементов, разметки внутри блока текста не предусмотрено. Это неплохо, но как будто, как и с протоколом, упрощено сильнее чем реально требуется. Один человек всё ещё способен написать парсер для разметки с inline элементами. Возможно конечно дело ещё в графическом рендеринге вне терминала, но там так или иначе придётся реализовать layout движок, хотя бы для переноса длинных строк. Получается, и здесь принесено в жертву лишнее.

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

Впечатление от gemtext было как от подмножества markdown: его так же легко писать в обычном текстовом редакторе, так же легко читать даже в исходнике, без специальных программ. Что навело на мысль, каким мог бы быть small web, если бы использовались обычные http и markdown. Самое важное, что необходимо для построения веба: ссылки, в нём есть. Основная критика markdown состоит в том, что это набор похожих, но очень разрозненных форматов и расширений. Тем не менее, раз уж мы делаем веб, где посильно написать всё с нуля, не должно быть проблемы указать в спецификации какой вариант markdown поддерживается.

Изначально речь была о терминалах, а markdown умеет вставлять картинки, кажется что это несовместимо, но некоторое количество эмуляторов терминала реализует расширения для показа картинок без ascii симуляции. Это плохо потому что всё усложняет, но одновременно и хорошо, потому что иллюстрации отлично дополняют и оживляют текст, некоторые вещи лучше просто сразу показать. Конечно же картинки это отдельная гигантская плоскость того что может пойти не так: в каждом кодеке могут быть уязвимости, картинка может быть в слишком большом или слишком маленьком разрешении, плохо подходить по соотношению сторон (узкая длинная полоса), некоторые кодеки могут не поддерживаться, и не всегда ясно как расположить картинку среди текста, особенно в терминале, в markdown картинки всё-таки inline элементы, а не блочные. Довольно спорно, нужны ли картинки в малом вебе и в терминале.

Вывод: оба формата разметки достойные, gemtext очень легко парсить, но он умеет куда меньше чем markdown, хотя оба минималистичны, легко пишутся и читаются без дополнительного софта, пригодны для чтения в терминале.

Что ещё могли быть делать эти языки разметки

Художественные книги, тексты стандартов, своды законов, страницы man — всё это могло бы довольно успешно использовать markdown или gemtext. Вместо этого используется россыпь архаичных форматов. В интернете оно ещё и приправлено обвязкой из html и css, каждая уникальна для своего сайта, хотя содержимое вполне возможно привести в единый стандартный вид.

Идеи для разработки

  1. TUI браузер markdown файлов, как по файловой системе, так и по http
  2. Попробовать построить аналог gemini с помощью http+markdown
  3. Сконвертировать некоторое количество книг, стандартов и мануалов, построить локальную поисковую систему

cоздано 7 июля 2026, не редактировалось