Недавний дайджест Lobste.rs принёс эксперимент, который звучит как шутка: программист Кевин Соснеж (Kevin Sosnierz) отрендерил полный текст «Моби Дика» Германа Мелвилла в анимированный GIF размером 88 на 31 пиксель. В кнопку. В ту самую, какие в конце девяностых и начале двухтысячных повсюду кричали «Netscape Now!», «Best viewed in…» и «Valid HTML 4.01». Получился файл на 4,2 мегабайта из 12 565 кадров, который крутится дольше девятнадцати часов — и всё это время внутри веб-украшения размером со спичечный коробок можно читать Мелвилла.
Сам опыт остался в дайджесте курьёзом, а зря: он упёрся в предел формата, которому почти тридцать лет, — и тем самым поднял вопрос, который никто толком не задавал. Откуда вообще взялись эти 88 и 31? Почему крошечная рекламная плашка пережила и браузерные войны, породившие её, и саму эпоху, когда сайты писали руками? Короткий ответ — потому что ей всегда было чем заняться. Длинный ответ и есть эта история.
С размером 88×31 не всё чисто: документального «свидетельства о рождении» у него нет, и нидерландский сайт 88x31.nl, целиком посвящённый феномену, честно перечисляет три конкурирующие теории. Первая винит GeoCities — крупнейший бесплатный хостинг доморощенных страниц девяностых: всем пользователям вменялась ссылка обратно на хостинг, дефолтные баннеры для этой ссылки раздавались как раз в 88×31, а поскольку родная картинка, по формулировке блогерки yequari, была «признанно уродливой», пользователи начали рисовать собственные версии того же размера. Она же проследила эту ветку до страницы процедур GeoCities FTP из архивного снапшота 1996 года — со сниппетом кнопки прямо в инструкции.
Вторая теория отдаёт размер Netscape: компания, воевавшая за каждый установленный браузер, раздавала кнопку «Netscape Now!» — и веб-мастера копировали её габариты. Третья версия самая прозаическая: 88×31 — это «Micro Bar» из рекламной таксономии Interactive Advertising Bureau, младший брат знаменитого full banner'а 468×60. IAB стандартизировала баннерные размеры, чтобы рекламные площади можно было торговать как зерно, и миниатюра попала в ту же таблицу.
Скорее всего, правы все сразу: рекламный стандарт, хостинговое требование и браузерная пропаганда десятилетие обкатывали один и тот же размер, пока он не затвердел. Дальше интереснее — потому что из коммерческого стандарта кнопка сделала то, что не снилось ни одному медиаплану: стала языком.
В конце девяностых Netscape и Microsoft воевали за каждый браузер на планете, и кнопка оказалась дешёвым оружием: поставь бейдж «Best viewed in Netscape» — и заявка фронта готова. Пользователь MetaFilter вспоминал: «в середине-конце девяностых мы так делали со всем». Размер стал де-факто единицей измерения — не «картинка 88 на 31», а просто «кнопка».
Звуком войны был, впрочем, уже и протест против неё. Под лозунги «best viewed in…», то есть под идею «мой сайт лучше всего работает там, где вам не надо», выросла целая кампания «Viewable With Any Browser» Кэри Д. Бёрстейн — с собственной кнопкой, заявлявшей уже не лояльность браузеру, а независимость от него. Образцово-показательный экземпляр «Best viewed with any HTML browser» можно разглядеть прямо в посте Соснежа.
Важно, что обе стороны войны писали лозунги на одной и той же плашке. Кнопка была достаточно мала, чтобы не доминировать на странице, и достаточно велика, чтобы уместить лозунг из пары слов, — идеальная единица агитации в сети, где всё остальное стоило дорого.
К 2002 году кнопки стали фоновым шумом сети: оранжевый «XML» для RSS-лент, уродливые, по мнению многих, значки W3C-валидатора. 22 октября 2002 года Джереми Хедли, автор блога Antipixel, объявил им войну: не нравилась ему оранжевая XML-кнопка, расплодившаяся повсюду, — шрифт не тот, вёрстка кривая, весит четыреста с лишним байт. Он перерисовал набор в строгом 88×31 и выложил вместе с Photoshop-исходниками, сопроводив абзацем, который теперь читается как манифест:
If you want them, they're yours, gratis, no strings attached. You do not need to give me credit or provide a link back here or anything like that.
Дословно: картинки, которые прямо просят себя украсть. Прощание стоило отдельной строки: «So, bye-bye little buttons. Go forth, multiply and, above all, have fun out there». Через семь месяцев, в мае 2003-го, MetaFilter собрал всю движуху в тему «Steal These Buttons» — к тому моменту существовали коллекция gtmcknight.com с кнопками «почти на всё», скрипты-генераторы и даже GUI-фронтенды к ним, где кнопку мог собрать человек, никогда не державший Photoshop.
Здесь формат и сменил природу. Рекламная плашка, обязанная ссылкой на спонсора, стала фольклором, который копируют ради узнавания: «у меня тоже есть сайт, и я его сделал руками». Экономика трафика уступила экономике принадлежности — и именно в этом качестве кнопка пережила всё, что её породило.
Тайного смысла в цифрах, скорее всего, нет. 88x31.nl замечает лишь, что кнопка «достаточно мала, чтобы не подавлять страницу, и достаточно велика, чтобы оставаться заметной». Ни IAB, ни GeoCities обоснований не публиковали; кристаллизация прошла по эмпирике — размер оказался удобен, а потом его никто не рискнул тронуть, потому что вся экосистема генераторов и коллекций уже сверялась с этими цифрами.
Эргономика той эпохи согласна с выбором. Мониторы стояли 1024×768, и кнопка занимала около трети процента экрана — в подвал влезали десятки без кубометра жертв. Худшие ограничения оборачивались стилем: крошечные пиксельные шрифты, палитра в считанные цвета, файлы весом в сотни байт. CRT-мониторы заодно прощали огрехи: экран размывал пиксели, и мелкий текст читался мягче, чем на современных матрицах, — yequari зафиксировала это как исторический факт, не ностальгию.
Она же посчитала главный побочный эффект смены мониторов. На современном 1920×1080 та же кнопка занимает уже 0,13% пикселей экрана против 0,35% в девяностые. Кнопка уменьшилась почти втрое относительно страницы, хотя её размер не менялся ни на пиксель. Формат не устарел — устарел мир вокруг него.
Из рекламных справочников формат ушёл: сама идея «стандартных баннерных размеров» умерла вместе с эпохой считаемых показов. Но кнопка не умерла, потому что давно отвечала не рекламе, а человеку. Симптом живучести — сама Википедия: внизу каждой её страницы до сих пор висит бейдж «Powered by MediaWiki» ровно в 88×31 — наравне с плашкой лицензии CC. Формат не отменён — он стандарт де-факто для «Powered by».
А в 2020-х случился полный ренессанс. Neocities — прямой наследник GeoCities — и выросшее вокруг движение «web revival» вернули 88×31 как знак принадлежности к ручной сети. Wikipedia фиксирует возвращение прямо в статье о бейджах: «возрождение в начале 2020-х через сайты вроде Neocities», крупные коллекции. У neonaut'а на Neocities бейджи выложены сплошной лентой на несколько экранов подряд.
Далеко не все празднуют. Та же yequari в 2023-м опубликовала манифест против формата: на современных экранах кнопки нечитаемы, в «button wall» — стене из сплошных бейджей — «трудно разобрать, как выглядит каждая, не то что прочитать текст», а мерцание анимации утомляет. Её рецепт — переход на 200×40, размер с собственной баннерной родословной (она сама оговаривается: ветераны сети уже неодобрительно хмыкнули). Отклика переход не получил: ревив выбирает архаику осознанно, аргумент эргономики разбивается о тот простой факт, что кнопка — не утилита, а цитата.
И вот на этой пенсии в 2024-м Соснеж задал свой вопрос. Все анимированные кнопки, сколько он ни видел, мигали либо для привлечения взгляда, либо перебирали пару слов — а почему бы не «Моби Дик»? Технических преград не было: он проверил, что у GIF нет предела по числу кадров, а максимальное разрешение кадра — 2¹⁶ × 2¹⁶, то есть 4295 мегапикселей. Стандарт разрешал всё, кроме читаемости.
Пайплайн получился из той поры, из тех же девяностых: текст романа с Project Gutenberg, очищенный от лицензии, прогнан через cat, tr и fold — три posix-утилиты, склеивающие книгу в одну строку и режущие её по 22 знака. sed вычистил не-ASCII-символы и развёл главы пустыми строками. Дальше ImageMagick собрал кадры шрифтом TomThumb, чьи глифы умещаются в 3×5 пикселей (6×4 с межбуквенным интервалом): на экран кнопки встаёт пять строк по 22 символа — 110 знаков за кадр. Задержка между кадрами — шесть секунд: «по моему опыту, так комфортнее читать».
И тогда арифметика формата показала себя целиком. Роман — около 1,2 миллиона знаков — дал 12 565 кадров; полный GIF весит 4,2 мегабайта и, по подсчёту автора, идёт дольше девятнадцати часов непрерывного показа. Кнопка, дизайн которой предполагал три слова в подвале страницы, стала бегущей строкой длиной в две рабочие смены: уголок экрана с Бостоном, гарпунщиками и белым китом, знакомый каждому, кто хоть раз вжимал окно браузера до минимума.
Эффективности этот трюк не преследует — и в комментариях на Lobste.rs это немедленно посчитали: chrismorgan вычислил, что хранение текста в кадрах стоит 3,5 байта на символ, APNG вдвое хуже, AVIF выигрывает лишь чуть-чуть — «не знаю, я жертва или охотник». Но главное здесь не байты. Соснеж мерил другое: где у формы, которой почти тридцать лет, кончается запас. Кончается, как выяснилось, не там, где ждали. Не на объёме и не на читаемости 3×5-пиксельного шрифта — а на времени: листать роман в кнопке девятнадцать часов не станет никто, но именно эта бессмысленность доказывает, что предела у формата нет, потому что ему давно нечего доказывать. Рекламе нужны были отклики; кнопке ревива — принадлежность; этой — не нужно ничего. Она просто крутится в чужом подвале сети, страница за страницей, и «Call me Ishmael» ждёт своих шести секунд на одном из первых экранов.