- PVSM.RU - https://www.pvsm.ru -
В первой декаде сентября без фанфар и шумихи вышел FreeType версии 2.7 [1], и это событие, без сомнения, можно назвать праздником на улице пользователей Linux, FreeDBS, NetBSD, ReactOS и других товарищей. Попробуем разобраться, от чего у нас такое безудержное веселье.
FreeType — библиотека с открытым кодом на Си, которую используют для растеризации шрифтов и операций над ними. В новой версии по-умолчанию используется алгоритм обработки инструкций TrueType
v40.
Это позволило добиться качественного субпиксельного сглаживания шрифтов, как в майкрософтовском DirectWrite/ClearType
, но на самом деле никакого субпиксельного сглаживания не используется. Кроме того, алгоритм v40 рендерит быстрее Infinality
, который использовался в предыдущем алгоритме v38, при этом конечный результат не хуже.
Исторически, было две проблемы со шрифтами в Linux. Во-первых, это минное поле патентов Microsoft и Apple, из-за чего разработчики мучительно шли обходными путями. Частично, эту проблему решал набор патчей Infinality
[2], но ценой была низкая скорость и чересчур усложненный код. К тому же, по словам мейнтейнера, FreeType
разработчик Infinality
потерял интерес к своему проекту.
Давайте приглядимся к этим патентам чуть подробнее. С 10-го мая 2010-года истекли три патента Apple на байткодное сглаживание TrueType
шрифтов. Теперь нет необходимости отключать его использование по-умолчанию.
Patent US5155805: [3]
Method and apparatus for moving control points in displaying digital typeface on raster output devices
Patent US5159668: [4]
Method and apparatus for manipulating outlines in improving digital typeface on raster output devices
Patent US5325479: [5]
Method and apparatus for moving control points in displaying digital typeface on raster output devices
Но еще 9 патентов на ClearType
Майкрософт остаются в силе.
Patent US6239783: [6]
Weighted mapping of image data samples to pixel sub-components on a display device
Patent US6243070: [7]
Method and apparatus for detecting and reducing color artifacts in images
Patent US6282327: [8]
Maintaining advance widths of existing characters that have been resolution enhanced
Patent US6307566: [9]
Methods and apparatus for performing image rendering and rasterization operations
Patent US6393145: [10]
Methods apparatus and data structures for enhancing the resolution of images to be rendered on patterned display devices
Patent US6421054: [11]
Methods and apparatus for performing grid fitting and hinting operations
Patent US6624828: [12]
Method and apparatus for improving the quality of displayed images through the use of user reference information
Эти патенты можно разделить на три условные категории:
И это еще не все, есть и другие патенты. Прелесть ситуации еще в том, что Microsoft и Apple подписали соглашение о кросс-лицензировании [13] в то время, как разработчики FreeType
и их коллеги по цеху открытого ПО должны героически преодолевать ШГ препятствия.
Ценность этих патентов весьма сомнительна. Сразу же после того, как Майкрософт запатентовала ClearType, появились сомнения относительно их правомочности и новизны, причем писали об этом в газете Нью-Йорк Таймс [14], не на безызвестном случайном форуме. Один из активных разоблачителей Стив Гибсон на свой интернет страничке пишет [15], что ClearType — хорошо забытые технологии, которые Стив Возняк запатентовал 20 лет назад для Apple II. Никакого существенного прорыва технической мысли нет и в помине, а значит и интеллектуальной собственности нет.
Thus, Microsoft's ‘ClearType’ application of sub-pixel text rendering does not represent the dramatic breakthrough that they claim and it can not be the valid subject for intellectual property acquisition.
К сожалению, американское патентное право устроено таким образом, что все это остается разговором в пользу бедных. Хорош он или плох, но патент есть, и значит, остальным надо платить денежки за его использование.
Позволю себе немного пафоса. Пока что Майкрософт не спешит дарить патенты на ClearType сообществу открытого ПО, как это сделала компания Adobe с OpenType/CFF
движком. Об этом неплохо помнить, когда мы очередной раз видим слоган Microsoft сердечко Linux. По примеру американского президента Рейгана хочется воскликнуть: «Господин Наделла, если Майкрософт любит Linux, разрушьте эти патентные стены!».
Наследие программных алгоритмов рендеринга шрифтов для ЭЛТ мониторов 90-х гг. прошлого столетия — это вторая проблема Linux со шрифтами. Семейство TrueType
шрифтов появилось на свет в эпоху зернистых мониторов с электронно-лучевыми трубками. В снимках экрана Windows 95 из текста так и лезут пиксели. Каждый отдельный глиф намертво вколачивался в сетку из пикселей. Майкрософт вложила в это дело уйму человеко-часов, обсчитывая и оптимизируя глифы для всевозможных размеров, чтобы т. н. основные вэб шрифты (Arial, Times New Roman, Courier New
и т. д.) на экране выглядели достойно.
Сизифов труд однако возымел последствия. Настала новая эпоха ЖК-мониторов и тут оказалась, что старые TrueType
инструкции надо перепрогроммировать для того, чтобы использовать эти новые возможности или хотя бы для того, чтобы шрифты отображались корректно. Нет необходимости пристегивать каждый глиф к сетке полных пикселей, вместо этого надо их можно пристегнуть к одному из трех субпикселей, даже к части их и добиться гораздо более качественного изображения, благодаря такому субпиксельному сглаживанию. Здраво рассудив, что переписать весь старый багаж TrueType
инструкций нереально, в MS придумали асимметрическую сверх-дискретизацию и режим совместимости [16], в котором использовали много лихих приемчиков и костылей из инструкций старых шрифтов. Таким образом, и старые шрифты могли в некоторой степени воспользоваться увеличенным кратно горизонтальным разрешением.
Разработчики FreeType
решили не городить этот огород и проигнорировали режим совместимости. Это конечно же имело последствия. Новые шрифты, натасканные на костыльный режим совместимости и асинхронную сверх-дискретизацию, смотрелись кривовато.
Впрочем, нашелся герой, который пошел трудным путем и реализовал в Infinality
все вышеназванное спагетти старых и новых инструкций. Какое-то время FreeType
включал в себя интерпретатор v38 — набор патчей Infinality
, но затем код был удален в пользу интерпретатора v35. Разработчик Infinality
поистине взялся за невыполнимую миссию — сделать так, чтобы шрифты выглядели лучше чем в Windows, и чтобы их можно было тонко настроить.
Here is the core secret to making fonts render like through DirectWrite/ClearType on Windows: There actually is no subpixel hinting going on here. Shock. The code simply ignores all horizontal hinting instructions.
В итоге, удалив Infinality
, мейнтейнер FreeType
сделал выбор в пользу простоты и чистоты кода [17]. Так появился алгоритм обработки инструкций TrueType
v40. Его принцип прост как копейка — полное игнорирование всех инструкций горизонтального сглаживания. Никакого субпиксельного сглаживания. Гораздо меньше труда, а результат практический одинаковый. Заодно решается проблема с шагом глифа и меж-символьными расстояниями в старых не обученных шрифтах.
Хорошая новость в том, что для этого ничего делать не нужно, обновления сами появятся в репозитарии вашего Linux или BSD дистрибутива. Просто обновитесь до новой версии и перезагрузите X.Org Server. Настройте FontConfig
по вкусу. А плохая новость в том, что хочется прям сейчас, а ждать несколько дней или недель иногда тяжко. Ну а особо нетерпеливые пользователи могут сами собрать новую версию из исходников [18] или установить с помощью штатного установщика пакетов. В моем Gentoo FreeType 2.7
пока не стабилизировался.
$ eix freetype
$ [I] media-libs/freetype
Доступные версии: (2) 2.5.5^d 2.6.3-r1^d ~2.6.5^d ~2.7-r1^d
{X +adobe-cff auto-hinter bindist bzip2 (+)cleartype_hinting debug doc fontforge harfbuzz infinality png static-libs utils ABI_MIPS="n32 n64 o32" ABI_PPC="32 64" ABI_S390="32 64" ABI_X86="32 64 x32"}
Для консервативного Debian, наверное придется ждать следующего релиза, а у пользователей Ubuntu и так все хорошо со шрифтами, им торопится некуда.
Автор: temujin
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/194693
Ссылки в тексте:
[1] вышел FreeType версии 2.7: https://www.freetype.org/index.html
[2] набор патчей Infinality
: https://bohoomil.com/
[3] Patent US5155805:: http://www.google.com/patents/US5155805
[4] Patent US5159668:: http://www.google.com/patents/US5159668
[5] Patent US5325479:: http://www.google.com/patents/US5325479
[6] Patent US6239783:: http://www.google.com/patents/US6239783
[7] Patent US6243070:: http://www.google.com/patents/US6243070
[8] Patent US6282327:: http://www.google.com/patents/US6282327
[9] Patent US6307566:: http://www.google.com/patents/US6307566
[10] Patent US6393145:: http://www.google.com/patents/US6393145
[11] Patent US6421054:: http://www.google.com/patents/US6421054
[12] Patent US6624828:: http://www.google.com/patents/US6624828
[13] Microsoft и Apple подписали соглашение о кросс-лицензировании: http://arstechnica.com/apple/2007/08/apple-and-microsoft-renew-font-liscensing-agreement/
[14] писали об этом в газете Нью-Йорк Таймс: http://www.nytimes.com/library/tech/98/12/biztech/articles/07microsoft-flat.html
[15] на свой интернет страничке пишет: http://www.grc.com/ctwho.htm
[16] придумали асимметрическую сверх-дискретизацию и режим совместимости: https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
[17] сделал выбор в пользу простоты и чистоты кода: https://www.freetype.org/freetype2/docs/subpixel-hinting.html
[18] из исходников: http://sourceforge.net/projects/freetype/files/
[19] Источник: https://habrahabr.ru/post/311462/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.