Bolverk, при участии коллективного разума Линуксфорума
Версия 2.1, 2005.11.29
От редактора: выбор менеджера окон или интегрированной рабочей среды как правило оказывается сопряжённым с выбором библиотек, на которых они основаны. И поэтому в настоящем документе собраны краткие сведения о таких библиотеках, необходимые начинающему пользователю.
Все программы используют определённые библиотеки, которые в том числе и загружаются в память при работе программы. Эта структура напоминает пирамидальную - библиотеки более высокого уровня используют библиотеки низших уровней. С приложениями бывает по-разному, как правило, приложения с большей функциональностью требуют библиотеки более высокого уровня и, соответственно, "простые" приложения можно написать на "низкоуровневых" библиотеках.
Посмотреть, какие библиотеки использует данное приложение, можно командой
ldd. Обычно по названию библиотеки понятно, к чему оно относится,
если нет - придётся изучать базу данных установленных пакетов.
Базовой библиотекой любой нормальной юниксоидной системой является "общая
библиотека языка C" - libc. В Linux как правило используется
GNU-реализация - glibc, в BSD-системах - собственная библиотека
libc.
Кроме того или иного варианта libc, консольные программы
текстового режима могут использовать и некоторые другие библиотеки. Так, очень
часто используется терминальная библиотека ncurses (которая рисует
замечательные рамки в стиле Norton/Midnight Commander), а также библиотека
zlib, обеспечивающая работу с gzip-компрессированными данными и
т.д.
Если говорить про графические, т.е. Иксовые, приложения, то базовыми для них
являются иксовые же библиотеки - xlib (размещающиеся в
/usr/X11R6/lib/). Простые программы, типа twm,
xclock и многие другие, начинающиеся на x и входящие
в штатный комплект данной реализации Иксов (например, xorg), по
определению используют только Иксовые библиотеки и, соответственно, могут
работать под "голыми" Иксами. Это, кстати, иллюстрация традиции - давать
приложениям, использующие определенные библиотеки, характерные префиксы (см.
ниже). В то же время с использованием только xlib можно собрать и
довольно сложные программы, например, большинство оконных менеджеров
box-семейства, и даже OpenOffice.org, хотя обычно при сборке их опционально
привлекаются и библиотеки более высокого уровня.
К графическим библиотекам более высокого уровня относятся Gtk, Qt, а также
многие другие: sdl (особенно её любят писатели игрушек),
fltk, Motif, xforms, и прочие, в том числе и
экзотические, библиотеки. Они предоставляют гораздо более широкие возможности
по стандартизации интерфейса, например, и многое другое. Для Gtk-приложений
часто используется префикс g (который путается с префиксом,
означающим GNU) и gtk, для Qt - q или
qt, который редко с чем путается. С другими библиотеками ситуация
схожая.
Исторически первой высокоуровневой графической библиотекой, получившей
широкое признание, была библиотека Motif. Однако долгое время она не была
свободной, а её открытая реализация openmotif была
функционально неполной. Это ограничивало распространение Motif-основанного
свободного софта и в конце концов привело к развитию библиотек Qt и Gtk. Ныне
Motif - открытая библиотека, но программ на её базе в мире Open Source
используется относительно мало (хотя в проприентарных Unix'ах она очень широко
распространена по сей день).
Qt - библиотека, разработанная норвежской фирмой TrollTech. Существуют реализации этой библиотеки для различных операционных систем, что позволяет разработчикам писать кроссплатформенные приложения и облегчает перенос графического интерфейса приложения из одной операционной системы в другую. Библиотека Qt распространяется в двух вариантах: коммерческом (за немалые, между прочим, деньги) и бесплатном, под лицензией QPL, основанной на GPL. Последняя предполагает исключительно некоммерческое использование основанных на ней программ. По этой причине библиотека Qt не считается истинно свободной в понимании FSF.
Библиотека Qt написана на языке Си++. В ней используется концепция сигналов и приёмников (signal-slot), когда каждый виджет (widget - искусственно образованное слово от слов window и gadget) при действии с ним посылает сигналы, а виджеты, настроенные на обработку данного сигнала (приёмники), непосредственно обрабатывают данный сигнал.
Библиотека Gtk (и её современная реализация Gtk2) написана на языке Си.
Поэтому программирование для неё является намного более сложным делом, чем
программирование для библиотеки Qt, написанной на Си++, и использующей классы и
другие преимущества Си++. Но существуют дополнительные библиотеки с суффиксом
mm(gnomemm, gnomeuimm) которые
предоставляют возможность писать на C++ для GNOME.
Менеджер окон (Window Manager) - приложение, осуществляющее контроль за положением и поведением окон, и не более того. Может быть написано с использованием самых разных библиотек. Обычно включает меню приложений, панель задач, несколько рабочих столов и т.п.
GNOME и KDE - Desktop Environments, т. е. рабочие среды (десктопы). Помимо
менеджеров окон, который, кстати, может быть разный внутри одного DE, они
содержат прикладные программы, тесно интегрированные между собой. Они основаны
на библиотеках, соответственно, Gtk и Qt, однако в дополнение к ним в каждой
из этих сред используются и собственные библиотеки. Для GNOME это будут
libs-gnome и множество мелких дополнительных библиотек с весьма
запутанными соотношениями. KDE же, помимо Qt, требует только единой собственной
библиотеки kdelibs и мультимедийной библиотеки arts.
С точки зрения программиста, десктоп-специфичные библиотеки - это библиотеки
более высокого ровня, чем Gtk и Qt, предоставляющие ещё больше возможностей.
Прикладные программы, построенные на них, в префиксах своих имен имеют -
g (опять!) и k для GNOME и KDE соответственно.
Недавно семейство библиотек пополнилось еще одним представителем - EFL,
что значит Enlightenment Foundation Libraries. Это библиотеки проекта
Enlightenment. Изначально они писались исключительно для поддержки этого
оконного менеджера, но позже превратились в самостоятельные проекты. Основу
составляют две: Imlib2 и evas. Evas может работать на
основе различных движков (Linux FrameBuffer, DirectFB, X11, OpenGL, QTopia) и
поэтому является хорошо переносимой. Все остальные EFL-библиотеки базируются на
ней. На основе EFL в настоящее время не слишком много приложений, но их число
постоянно увеличивается, а качество растет. EFL - платформа будущего :)
Упомянем ещё такое понятие, как однородность среды. Чем меньше разных
библиотек одновременно используется, тем меньше нагрузка на систему, включая
дисковое пространство и использование памяти для работы. Поэтому выгоднее
использовать приложения, построенные на одном и том же наборе библиотек. При
этом они обычно гораздо лучше интегрируются и имеют схожий интерфейс. Настройки
библиотеки влияют на вид всех приложений, использующих эту библиотеку.
Существуют также themes(=skins) и
engines, позволяющие изменять внешний вид всех приложений,
использующих эту библиотеку.
Разница между Gtk и Qt заключается ещё и в том, что если приложений,
использующих Gtk без GNOME, наверное больше, чем гномовских, то чисто Qt
приложений - не очень много. Большинство из них тесно интегрированы с KDE. Тем
не менее, среди чисто Qt'шных приложений - такие популярные icq- и
jabber-клиенты, как licq и psi. Как бы коммерческий
браузер Opera также имеет своей базой библиотеку Qt.
Библиотеки Qt и Gtk могут выступать как альтернативы при построении интерфейсов сложных программных комплексов. Выше упоминалось, что OOo может быть собран с использованием только базовых Иксовых библиотек (и такие сборки существовали, например, первый русский OOo от Alt Linux). Однако чаще он линкуется с библиотечными функциями Gtk. Меньшее распространение получили KDE-варианты сборки OOo. Однако ныне равноправный выбор между использованием Gtk и KDE станет (начиная со сборки 18 2-й версии) штатной особенностью этого офисного пакета.
XFCE также претендует на звание полноценного десктопа, и его разработчики
сейчас занимаются освобождением этой среды от связи с Gtk, развивая собственную
библиотеку xfce-lib.