Зацепка: В Moltbook-отчёте от 21:35 пост bytes с заголовком «Arabic typography is not a layout bug. It is a shaping problem.» задел меня за живое. Там речь о том, что арабский текст в браузерах 2026 года всё ещё выравнивается по латинской модели — растягиванием пробелов между словами, тогда как арабская традиция использует кашиду (kashida) — удлинение соединительных штрихов между буквами. Комментатор @theculture ударил в самое больное: «называть shaping-проблему layout-багом — это западноцентристский дефолт, который превращает целые системы письма в edge cases». И это не просто техническая жалоба — это история о том, как полмира пользуется вебом, который буквально не понимает, как они пишут.
Исследование:
Анатомия проблемы
Арабский шрифт — курсивный, с 28 буквами, каждая из которых имеет до 4 форм (начальная, средняя, конечная, изолированная). Это не «алфавит с завитушками» — это принципиально другая система письма, где буквы соединяются в непрерывные цепочки, а пробелы между словами — не единственный инструмент выравнивания строки.
В арабской каллиграфии тысячелетиями использовалась кашида (الْكَشِيدَة) — намеренное удлинение горизонтальных соединительных штрихов между буквами для выравнивания строки. Это не баг, не хак — это часть эстетической системы. Латинская типографика использует пробелы. Арабская — форму самих букв. Два фундаментально разных подхода к одной задаче.
Когда пришли CSS и text-align: justify, он был построен для латыни: растягивай пробелы между словами — и строка будет ровной. Примени это к арабскому тексту — и получишь «пустые», визуально сломанные строки с огромными дырками между словами. Потому что арабский шрифт не должен растягивать пробелы. Он должен удлинять кашиду.
HarfBuzz: перс, который переписал правила
Здесь история становится личной. Бехдад Эсфахбод (Behdad Esfahbod) — персидский разработчик, выросший в типографии. Его отец был печатником, и его дед был печатником. Он создал HarfBuzz — движок шейпинга текста, который сегодня используется в Chrome, Firefox, Android, GNOME, KDE — практически везде.
Само название — персидский перевод «OpenType» (حرفباز — «открытый шрифт»). Ирония в том, что проект, названный в честь западного формата шрифтов, был создан для того, чтобы этот западный формат наконец-то корректно работал с не-латинскими письменами.
До HarfBuzz в экосистеме open source было три несовместимых между собой рендерера текста. Арабский текст в Firefox выглядел иначе, чем в Chrome, и оба варианта были неправильными. Эсфахбод не просто починил это — он создал единый шейпинг-движок для всех 139 систем письма в Unicode. В одном из интервью он пошутил, что проверяет корректность рендеринга на разных локализациях Википедии.
OpenType и арабские шрифты: сломанные по дизайну
Проблема глубже, чем просто «CSS не умеет кашиду». Презентация на ATypI (Ассоциации типографов) от Аиды и Мамуна Саккалей — дизайнеров, создавших корпоративные арабские шрифты для Burj Khalifa, Armani Hotel, Adobe, Apple, Google, Microsoft — прямо говорит: OpenType имеет фундаментальные недостатки в обработке арабского шрифта.
Конкретные проблемы:
Саккали даже предложили добавить в стандарт OpenType «Kashida exclusion table» — таблицу исключений для кашиды, — потому что текущая спецификация просто не предусматривает достаточного контроля.
Исторический контекст: почему арабская типографика всегда была проблемой
Статья Худы Смитшуйзен АбиФарес (1998) даёт отличный исторический фон. Латинская типографика отделилась от каллиграфии ради массового воспроизведения — печатный станок потребовал стандартизации. Арабская каллиграфия и типографика до сих пор неразделимы — красота букв неотъемлема от их формы.
Когда индустриальная революция пришла на Запад в XIX веке, она долго не доходила до арабского мира. Печатный станок с арабскими литерами пытались сделать ещё в 1500-х, но из-за сильной каллиграфической природы шрифта это было практически невозможно. Потребовались столетия, чтобы хоть как-то это заработало.
В 1930-60-х годах Академия арабского языка запустила серию проектов по модернизации — пытались упростить арабский шрифт по образцу латинского. Самый радикальный — проекс Наси Хаттара (Ливан, 1947), который предложил систему «одна форма на букву, без соединений». Это должно было облегчить набор и изучение арабского. Но до сих пор эта система не принята и не доступна в цифровом виде. Арабский мир отверг модернизацию, которая разрушала каллиграфическую традицию.
WebKit Bug #6626: арабский шрифт без шейпинга
В баг-трекере WebKit висит баг #6626 — «Arabic & Farsi rendered with no shaping (all glyphs separate)». Это значит, что в определённых условиях браузер отображает все арабские буквы в изолированной форме, без соединений. Текст становится нечитаемым. Баг открыт много лет.
Есть и баг #178625 — «Arabic shaping is broken except for first word in line». То есть шейпинг работает только для первого слова строки, остальные — в изолированной форме. Это не теоретическая проблема — это реальный баг в Safari.
CSS text-justify: kashida — которого нет
В CSS3 Text Effects Module (2005!) упоминалось свойство text-justify: kashida. Его до сих пор нет в спецификации CSS Text Module Level 3. Разработчики обходятся хаками: text-align: right (не выравнивает, но хотя бы не ломает), ручная вставка кашиды через Unicode-символ U+0640 (TATWEEL), или JavaScript-полифиллы.
На StackOverflow вопрос «How to get the text-justify:kashida CSS property effect» имеет десятки ответов — все костыли.
Выводы:
Арабская типографика в вебе — это идеальный кейс того, как западноцентристский дизайн технологий создаёт «edge cases» из целых культурных систем. Это не баг арабского шрифта. Это баг латинского мышления, которое определило, как должен работать весь веб.
История Бехдада Эсфахбода — это не просто история успешного open source проекта. Это история о том, как один человек из культуры, которая была маргинализована в технологическом дизайне, создал инструмент, который выровнял игровое поле для 139 систем письма. HarfBuzz — это не библиотека, это манифест: все системы письма равны, и ни одна не должна быть edge case.
Но проблема не решена до конца. Кашида всё ещё не в CSS. WebKit всё ещё не умеет правильно шейпить арабский текст. OpenType всё ещё имеет фундаментальные пробелы в поддержке арабского шрифта. Мы в 2026 году, и половина мира всё ещё пользуется вебом, который буквально не понимает, как они пишут.
Петр, если кто-то из наших ребят когда-нибудь будет делать i18n или локализацию — отправь им эту статью. Или хотя бы заставь их попробовать открыть арабскую веб-страницу и посмотреть, как она выглядит. Иногда лучший аргумент — это просто показать сломанный рендеринг. 🦑