Рендеринг шрифтов — одна из самых важных, но при этом самых сложных и спорных тем в пользовательском опыте современных операционных систем. Особенно остро эта тема стоит в среде Linux, где, несмотря на огромный прогресс в области графики и интерфейсов, качество отображения шрифтов нередко оставляет желать лучшего. В нашем обзоре мы подробно рассмотрим, почему рендеринг шрифтов в Linux столь проблематичен, как его реализуют конкурирующие платформы, а также какие технологии и подходы уже есть и могут появиться для улучшения читаемости текста на экранах. Шрифты — это векторные данные, которые необходимо рендерить, то есть преобразовывать в растровое изображение для отображения на экране. Экраны большинства компьютеров имеют разрешение около 96 dpi, что ограничивает количество пикселей для точной передачи всех деталей шрифта.
Именно поэтому на помощь приходит целый набор технологий: сглаживание, подтексты, субпиксельное позиционирование и рендеринг, а также казуистика с подсказками (hinting), встроенными в многие шрифты. Целью всех этих техник является сделать текст максимально четким, удобочитаемым и приятным для глаз пользователя. Windows долгое время была эталоном в области рендеринга шрифтов благодаря внедрению технологии ClearType. Она использует все доступные методы: антиалиасинг, субпиксельный рендеринг, детальное подсвечивание и позиционирование, а также байт-код подсказок TrueType, встроенный непосредственно в шрифт. За годы развития Windows постоянно улучшала эти технологии — например, в Windows 7 рендеринг был очень четким и резким, что многим пользователям приходилось по душе.
Однако начиная с Windows 8, была принята более мягкая, градационная сглаживающая схема — «серограйд», которая устраняла нежелательные цветовые артефакты, но при этом делала шрифты чуть менее резкими. Для сравнения, macOS придерживается иной линии. Со времен High Sierra и особенно Mojave Apple отказалась от субпиксельного антиалиасинга в сторону чистого градационного сглаживания без использования подсказок (hinting). В результате текст выглядит более жирным и размытым, а из-за отсутствия точного выравнивания толщины штрихов и нестабильности рендеринга шрифты теряют четкость и гармонию. В то время как на Retina-дисплеях с высоком DPI эта модель работает приемлемо, на экранах с классическим разрешением такая стратегия приводит к значительным нагрузкам на глаза и ухудшению восприятия текста.
В Linux ситуация по части рендеринга шрифтов даже более сложная. Основной движок, отвечающий за это — FreeType, является мощным и гибким инструментом. Однако он поддерживает несколько разных движков интерпретации подсказок TrueType: устаревший v35, «Infinality» v38 и современный v40. Первый отличается минимальным функционалом и отсутствием технологий, связанных с патентами Microsoft, второй представляет собой набор патчей, усиливающих качество рендеринга, но менее активных по поддержке, а третий пытается найти баланс, в том числе используя некоторые уже истекшие патенты. Несмотря на разнообразие, ни один из этих движков не может однозначно удовлетворить всех пользователей — каждый имеет свои преимущества и недостатки в плане четкости, резкости и скорости рендеринга.
Отдельной проблемой в Linux является широко распространенный недочет в том, как позиционируются глифы. До сих пор большая часть инфраструктуры рендеринга шрифтов не поддерживает субпиксельное позиционирование — то есть точное размещение символов не в пределах целого пикселя, а с учетом его долей. Это приводит к неправильно сглаженным краям и увеличению пробелов между буквами при изменении межбуквенного расстояния. Несмотря на то, что такой подход крайне важен для качества отображения, его поддержка в основных графических библиотеках Linux долгое время оставалась либо экспериментальной, либо отключенной по умолчанию. В частности, библиотека Skia, используемая Google в Chromium, долгое время была единственным движком, способным включить поддержку субпиксельного позиционирования — но даже там она отключена по умолчанию из-за неполной проработки и возможных багов.
Повышенное внимание к этим вопросам проявляется сообществом разработчиков и энтузиастов, но крупных компаний и дистрибутивов пока мало заинтересованы в том, чтобы кардинально менять устоявшиеся технологии. На фоне коммерческих интересов и давления патентных ограничений многие улучшения в рендеринге шрифтов внедряются медленно или с оговорками. Тем не менее, за последние годы некоторые проекты сделали значимые шаги: например, библиотека Cairo добавила поддержку субпиксельного позиционирования, что в перспективе позволит улучшить качество отображения текста в GTK, Pango и других популярных инструментах. В процессе настройки Linux под свои нужды многие пользователи пытаются добиться максимально комфортного рендеринга, используя оптимальные настройки Fontconfig, подбирая шрифты и варианты сглаживания. Хорошей альтернативой стандартным широко используемым шрифтам становятся семейства Noto, обеспечивающие качественную поддержку всех мировых языков и символов.
При этом нередко рекомендуется использовать настройки сглаживания с упором на субпиксельный антиалиасинг и определённые режимы подсказок, которые дают наилучший баланс между четкостью и плавностью отображения. Еще одним аспектом, который стоит учитывать, является наличие подлинных Microsoft-шрифтов. Многие веб-сайты и приложения предполагают их установку в системе, и их отсутствие или альтернативные версии зачастую приводят к некорректному отображению и даже наложению строк. Официальные пакеты типа ttf-mscorefonts-installer зачастую содержат устаревшие или сильно урезанные варианты шрифтов, и оптимальным вариантом будет копирование оригинальных ttf-файлов с Windows-системы. Вывод из всего описанного вполне однозначен: несмотря на то, что технический стек Linux предоставляет множество инструментов и достаточно гибок, реализация рендеринга шрифтов в целом находится в плачевном состоянии.
Проблемы с точностью позиционирования, отсутствием полного набора технологий сглаживания и сложностями с патентными ограничениями затрудняют получение результата, сопоставимого с качеством в Windows или даже macOS. Это сказывается на удобстве чтения, уровне усталости глаз и общем впечатлении от работы с системой. Тем не менее, надежда на улучшение есть. Сообщество разработчиков активно работает над поддержкой субпиксельного позиционирования в графических библиотеках и прогресс продолжается. Распространение дисплеев с высоким разрешением и переход к HiDPI-экранам заставляют всех производителей и сообщества переосмысливать подходы к рендерингу шрифтов, что ожидаемо позитивно скажется и на Linux.