Основные библиотеки графического режима

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

Для начала, существует библиотека базовых графических функций, обеспечивающих работу оконной системы X -- для определённости будем говорить о её свободной реализации Xorg, тем более что все остальные актуальность практически потеряли. До некоторого времени она носила имя xlib, ныне те же (и новые) функции собраны в заменившую её библиотеку libxcb (X protocol C-language Binding).

Простые программы, начинающиеся на x и входящие в штатный комплект данной реализации Xorg, по определению используют только одну из этих базовых библиотеки и, соответственно, могут работать под "голыми" Иксами. Это, кстати, иллюстрация традиции -- давать приложениям, использующие определенные библиотеки, легко узнаваемые префиксы, о чём будет сказано ниже. В то же время с использованием только xlib или libxcb подчас собираются и довольно сложные программы, например, большинство оконных менеджеров box-семейства. Одно время бытовали даже чисто Иксовые сборки OpenOffice.org, хотя ныне для него привлекаются и библиотеки высокоуровневые.

К графическим библиотекам более высокого уровня относятся sdl, fltk, xforms и ряд других, менее распространённых. Они предоставляют более широкие возможности по стандартизации интерфейса, однако использовались достаточно ограниченно. Так, sdl применялась преимущественно в играх, с импользованием xforms была написана первая версия рабочей среды Xfce и текстовый процессор LyX.

Исторически первой высокоуровневой графической библиотекой, получившей широкое признание, была библиотека Motif. Однако долгое время она не распространялась свободно, а её открытая реализация openmotif отличалась функциональной неполнотой. Это применение Motif-основанного свободного софта. Ныне Motif -- открытая библиотека, но программ на её базе в мире FOSS используется относительно мало. Хотя в проприентарных UNIX'ах она до недавнего времени была распространена очень широко. В частности, на ней основывалась первая интегрированная рабочая среда CDE, о чём будет рассказано в исторической рубрике.

Ограничения, сущестовавшие для ранних версий Motif, в конце концов привели к развитию библиотек Qt и Gtk, наиболее широко используемых в настоящее время.

Для Gtk-приложений обычно используется префикс g (который путается с тем же самым префиксом, приписываемым программам, разработанным в рамках проекта GNU) и gtk. Программы для Qt безошибочно распознаются по префиксам q или qt.

Qt -- библиотека, разработанная норвежской фирмой TrollTech. Существуют реализации этой библиотеки для различных операционных систем, что позволяет разработчикам писать кроссплатформенные приложения и облегчает перенос графического интерфейса приложения из одной операционной системы в другую. Библиотека Qt распространяется в двух вариантах: коммерческом (за немалые, между прочим, деньги) и бесплатном, под лицензией QPL, основанной на GPL. Последняя предполагает исключительно некоммерческое использование основанных на ней программ. По этой причине библиотека Qt долго не считалась истинно свободной в понимании FSF.

Библиотека Qt написана на языке C++. В ней используется концепция сигналов и приёмников (signal-slot), когда каждый виджет (widget -- искусственно образованное слово от слов window и gadget) при действии с ним посылает сигналы, а виджеты, настроенные на обработку данного сигнала (приёмники), непосредственно обрабатывают данный сигнал.

Библиотека Gtk (и её современная реализация Gtk2) написана на языке C. Поэтому программирование для неё является намного более сложным делом, чем программирование для библиотеки Qt, написанной на C++, и использующей классы и другие преимущества объектно-ориентированного подхода. Но существуют дополнительные библиотеки (опознаваемые по суффиксу mm, например, gnomemm, gnomeuimm), которые предоставляют возможность использовать и C++.

GNOME и KDE -- это рабочие среды (десктопы), основанные на библиотеках, соответственно, Gtk и Qt. Однако в дополнение к ним в каждой из этих сред используются и собственные, ещё более высокоуровнеые, библиотеки. Для GNOME это будут gnome-libs и множество мелких дополнительных библиотек с весьма запутанными соотношениями. KDE же, помимо Qt, требует только единой собственной библиотеки kdelibs и мультимедийной библиотеки arts. Прикладные программы, построенные на них, в префиксах своих имен имеют g (опять!) и k для GNOME и KDE соответственно.

Разница между Gtk и Qt заключается ещё и в том, что если приложений, использующих Gtk без GNOME, наверное больше, чем гномовских, то чисто Qt приложений -- не очень много. Большинство из них тесно интегрированы с KDE. Тем не менее, среди чисто Qt'шных приложений -- такие популярные icq- и jabber-клиенты, как licq и psi. Как бы коммерческий браузер Opera также имеет своей базой библиотеку Qt.

Библиотеки Qt и Gtk могут выступать как альтернативы при построении интерфейсов сложных программных комплексов. Выше упоминалось, что OOo может быть собран с использованием только базовых Иксовых библиотек (и такие сборки существовали, например, первый русский OOo от Alt Linux). Однако чаще он линкуется с библиотечными функциями Gtk. Меньшее распространение получили KDE-варианты сборки OOo, в конце концов полностью вышедшие из употребления.

XFCE также претендует на звание полноценного десктопа, и его разработчики время от времени занимаются освобождением этой среды от связи с Gtk, развивая собственную библиотеку xfce-lib. Хотя использующих её приложений не так много даже в составе "родной" среды.

Недавно семейство библиотек пополнилось еще одним представителем -- EFL, что значит Enlightenment Foundation Libraries. Это библиотеки проекта Enlightenment. Изначально они писались исключительно для поддержки этого оконного менеджера, но позже превратились в самостоятельные проекты. На основе EFL в настоящее время не слишком много приложений, но их число постепенно увеличивается, а качество растет. Существует мнение (не моё), что EFL -- платформа будущего, поскольку лежашие в её основе (и исторически предшестовавшие ей) библиотеки Imlib2 и evas изначально могли работать в различном окружении (Linux FrameBuffer, DirectFB, X11, OpenGL, QTopia) и отличались хорошей переносимостью. Это теоретически открывает для них сферу применения во всякого рода гаджетах. Насколько такая возможность будет реализована -- будет видно в том самом светлом будущем.

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

Тем не менее, излишний фанатизм здесь не уместен. Ресурсов типичных современных машин вполне достаточно для оперирования хоть всеми библиотеками, написанными человечеством со времён дреневавилонской абаки. А разработчики всех интегрированных сред приложили немало усилий для придания единообразия и внешнему виду программ, написанных с использованием "чуждых" быблиотек. Другое дело, что большинство пользовательских программ одного назначения, будь они написаны с использрванием Gtk/gnome-libs или Qt/KDE, функционально почти идентичны, и выбор между ними -- дело исключительно вкуса и привычки. Но об этом мы поговорим в другой раз, когда будем выяснять вопрос, сколько же юзеру программ нужно...


Теги: , , , , , , , , ,