Основы GTK+, часть 3: Развертывание приложения GTK+.: Как разворачивать GTK+

Мацей Катафьяж, Сергей Безденежных

В двух предыдущих статьях цикла «Основы GTK+» (Часть1, Часть 2), мы узнали, что такое GTK+ и для чего он используется. Эта последняя статья цикла освещает вопросы, связанные с распространением вашего программного продукта среди пользователей, то есть вы узнаете, как подготовить приложение GTK+ к встрече с множеством разных систем.

Уникальность - это хорошая черта, но не для библиотеки. Что касается программного обеспечения, широкая известность и популярность означает больше обзоров, больше сообщений об ошибках (и как следствие, их устранение), больше шансов, что ПО будет протестировано в необычных средах и нетипичных ситуациях. Все это ведет только к улучшению и упрощению использования библиотеки. К счастью, GTK+ достаточно большая фигура среди инструментариев и один из наиболее широко используемых пакетов ПО. Посмотрите на следующий список различных платформ, на которых работает GTK+:

UNIX®
UNIX является платформой, на которой и для которой был создан GTK+, и со временем GTK+ (так же как и конкурирующий Qt) стал де-факто стандартом для этой платформы. Без преувеличения тысячи приложений GTK+ были написаны и работают на UNIX (и UNIX-подобных) системах. Кроме автономных приложений, GTK+ стал родоначальником для двух рабочих окружений (GNOME и Xfce), нацеленных на обеспечение всех нужд пользователя. Такое многообразие создает самодостаточную экосистему, в которой все новые проекты основываются на использовании последних достигнутых возможностях. Множество достижений такой разработки позже становятся частью GTK+, например, большие части кода библиотеки libgnomeui теперь можно встретить внутри GTK+.

Microsoft® Windows®
На платформу Win32, GTK+ был перенесен позднее, но теперь поддержка Win32 находится на высоте. Большинство маленьких и средних приложений скомпилировано и без доработки работают под Win32 (конечно, если они не делают что-то специфичное для UNIX), большие приложения так же могут быть успешно адоптированы для работы на этой платформе. Программа редактирования изображений GIMP - наилучший (и хронологически первый), но не единственный пример такой адаптации. Например, замечательный редактор электронных таблиц Gnumeric официально выпускается под Windows, начиная с версии 1.4.

Mac OS X
Последние операционные системы от Apple представляют собой замаскированную UNIX, так что заставить работать приложения GTK+ на Mac'ах не так сложно. Тем не менее, некоторые приложения, такие как GIMP, были специально модифицированы, дабы лучше вписаться в соглашения по уникальному пользовательскому интерфейсу Mac OS X.

Конвейер приложения

Нравиться вам или нет, разработка приложения состоит не только из приятного написания строчек кода. Чтобы создать успешный продукт, прежде всего, нужно создать конвейер, который позволит вашим разработчиком нормально трудиться.

Программист

Наиболее критическая часть такого конвейера - это, конечно, программист. Если библиотека сложна в использовании, имеет странные требования или плохо совместима с другими приложениями - она не станет хорошей основой для вашего продукта. К счастью, GTK+ лишен этих недостатков. Его программный интерфейс (API) последователен (если не считать редкие соглашения для обратной совместимости), легок в изучении и использовании. Именно поэтому программисты так любят GTK+. Надлежащим образом создатели GTK+ позаботились о том, чтобы избежать несовместимости с другими библиотеками: пространство имен тщательно продумано (с учетом используемых языков программирования), число экспортируемых функций сведено к минимуму, чтобы сделать библиотеку надежней и ускорить сборку программ.

Система сборки

 
Команда pkg-config
Команда pkg-config славится за свой простой подход к делу. Этот подход отличается от традиционных способов поиска библиотек на UNIX-системах, которые в своем большиинстве предлагают использовать тщательно продуманные (но, к сожалению, содержащие ошибки) скрипты. В отличии от них, в GTK+ был реализован другой метод - использовался один точно настроенный скрипт gtk-config (а также glib- и gnome-config). В версии 2.0 этот метод был приведен в порядок и превращен в универсальное решение, названное pkg-config, и представлен для стандартизации в проект freedesktop. Новое решение оказалось настолько удобным, что дефакто стало стандартом поиска библиотек. А благодаря подробной документации, для ошибок в нем осталось слишком мало места.
 

Так как во время разработки программы приходится тысячи раз её компилировать, чтобы освободиться от необходимости делать это каждый раз вручную, возникает потребность в автоматической системе сборки приложения. И так как система сборки адресует всю собираемую программу, необходимо быть уверенным, что все части хорошо взаимодействуют друг с другом. Здесь GTK+ поистине превосходен. Без преувеличения, он имеет только одну точку взаимодействия: команду pkg-config. Эта команда позволяет проверить, установлена ли и подходит ли версия библиотеки GTK+, а так же разделяет на части все эти бесконечно длинные и неинтересные строки параметров таким образом, что компилятор может найти нужные ему библиотеки.

Не существует и каких-либо специальных требований по использованию GTK+, все, что действительно нужно, чтобы использовать его - это включить в программу один заголовочный файл. Ни каких препроцессоров или специальных компиляторов не требуется, так же как и ничего другого, что может выдать непредсказуемый результат.

Сам GTK+ использует GNU Autotools, поэтому в нем есть готовые макросы для Autoconf и Automake (написанные для проекта GNOME), которые позволяют находить и конфигурировать библиотеки GTK+ одним вызовом. Но даже если вы используете другую систему сборки, вы можете легко интегрировать GTK+ в неё. Все что для этого нужно - это правильно определенный вызов pkg-config. Если же вы используете систему, основанную на каталогах (такую как Microsoft Visual Studio) - просто включите несколько каталогов в путь сборки.

Распространяем готовый продукт

Распространение готового приложения среди пользователей в высшей степени зависит от платформы, которую они используют, так что нужно подготовиться к тому, что способ интеграции вашего приложения и GTK+ будет меняться от системы к системе. На платформе UNIX и, в частности, на Linux® GTK+ представляет собой системную библиотеку, распространяемую поставщиком ОС. Если вам не подходит предустановленный в системе GTK+ или он там отсутствует, можете обратиться к проекту Autopackage (см. ресурсы). Autopackage - это решение, позволяющее собирать пакеты, которые автоматически установят недостающие библиотеки.

На платформе Windows существует большое число инсталляторов. Для распространения большинства программ, включая GTK+, широко используется стандартный инсталлятор Windows InstallShield, а так же Nullsoft's NSIS. Все двоичные дистрибутивы библиотеки GTK+ используют стандартные ключи реестра и конфигурационные данные, позволяя разным приложениям совместно использовать одну и ту же копию библиотеки.

Кроссплатформенность

В зависимости от целевой системы способ доступа к библиотеке (и соответственно способ установки программы) может изменяться:

  • Что касается Linux дистрибутивов, вы можете здраво рассудить, что GTK+ будет доступен как стандартный пакет. Большинство дистрибутивов довольно быстро включают в свой состав последние выпуски GTK+, поэтому почти на 100% можно рассчитывать, что как минимум один из двух последних выпусков GTK+ будет включен в дистрибутив пользователя. Однако так как ни кто не гарантирует, что все пользователи будут использовать свежий дистрибутив Linux, старайтесь нацеливаться на наиболее старую версию Linux, в которой ваша программа сможет работать;
  • На компьютерах под управлением Windows GTK+ совершенно сторонний компонент. Однако, благодаря единообразному размещению различных пакетов установки, вы можете полностью положиться на существующую установку GTK+, если таковая присутствует, или произвести собственную в другом случае. Так как установка исполняемой среды GTK+ включена в ваш процесс инсталляции, вы можете более свободно выбирать целевую версию библиотеки, но по возможности придерживайтесь более старых версий;
  • Для Mac OS X, GTK+ так же полностью чужой пакет программ. На этой системе будет безопасней создать самодостаточный пакет, чтобы уберечь пользователя от проблем с зависимостями. Чтобы посмотреть на пример такого пакета, взгляните, как собран Gimp.app.

Существует пара замечаний относительно GTK+ на Mac OS X. Во всех выпущенных к настоящему времени версиях библиотеки, вы должны использовать GTK+ через мост Apple's X11-to-OS X. Однако в текущую разрабатываемую версию, был добавлен новый, родной для оконной системы Mac OS X интерфейс, который в ближайшем будущем позволит достичь такого уровня интеграции, который сейчас наблюдается на платформе Win32.

Так же вам нужно четко представлять, что в GTK+ означает совместимость на уровне двоичного интерфейса (ABI). Разработчики библиотеки стараются сохранить обратную совместимость GTK+, но для вашего приложения это означает только то, что будет сохранена совместимость с новыми версиями GTK+. В частности, даже если исходный код использует API версии 2.2 , но приложение скомпилировано с использованием библиотек версии 2.6, получившийся исполняемый файл не будет работать с библиотеками версии 2.2. А все потому, что во время компиляции использовались ссылки на последнюю версию ABI, которые на более ранних версиях при вызове выдают ошибки.

Чтобы достичь совместимости на уровне двоичного кода с более ранней версией библиотеки, например 2.2, нужно установить GTK+ этой версии, т.е. 2.2 и компилировать программу с использованием заголовочных файлов этой библиотеки. Хотя это и не самый простой способ для разработчиков, зато он единственно надежный.

Существуют и альтернативные подходы к решению этой проблемы, например, выявив параметры версии, можно указать их при компиляции, чтобы переключиться между версиями заголовочных файлов. Кстати, этот прием используется в наборе инструментальных средств разработки Windows SDK. Однако этот метод имеет и отрицательную сторону, в результате заголовочные файлы программы становятся трудны для понимания и соответственно для поддержки, а иногда даже вызывают непредсказуемое поведение программы. По этим причинам разработчики GTK+ решили отказаться от такого метода компиляции.

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

Подгоняем GTK+ к нашим нуждам.

Иногда вам могут не подойти настройки GTK+ по умолчанию. Причина этого может быть двояка: или вы хотите получить дополнительные возможности, которые отсутствуют в базовом наборе, или хотите повлиять на некоторые аспекты работы библиотеки, дабы она лучше соответствовала вашим нуждам.

Первый случай разрешается достаточно просто. Необходимо найти внешнюю библиотеку, предоставляющую желаемые функции. Есть несколько мест, где можно начать поиск такой библиотеки. Очень часто нужды, схожие с вашими, появляются в больших проектах, таких как GNOME. По этой причине в GNOME существует несколько модулей, которые выполняют роль «песочницы», в которой функции находятся до тех пор, пока не «созреют» для включения в состав GTK+, тем не менее, они полезны и отлично работают. Наиболее примечательный модуль такого рода в GNOME CVS называется libegg . Можно также поискать на сайтах, которые предоставляют хостинг открытым проектам, таких как SourceForge.net и freshmeat.

Другие случаи возникают, когда вам нужно изменить некоторые аспекты самого GTK+. Например вам может потребоваться запустить GTK+ на встраиваемом устройстве с редкой архитектурой или добавить поддержку какого-нибудь особого типа взаимодействия с пользователем. В зависимости от ваших потребностей (и возможностей), существует несколько вариантов решения этой задачи.

В простейшем случае вы можете просто подписаться на список почтовой рассылки и там спросить, не делал ли кто-нибудь до вас то, что вы ищете. Если ваши изменения находятся в зоне общих интересов проекта и сделаны качественно, существует большая вероятность того, что они попадут в главную ветвь разработки GTK+.

Однако, если ваш проект очень сложен, вы можете решиться и нанять специализированную консалтинговую компанию, которая поможет наладить контакты с сообществом и выявить критические точки вашего проекта. Именно так поступила компания Nokia, решив использовать GTK+ как основу интерфейса для своей новой линейки мобильных устройств. Результатом этого решения явилось появление платформы maemo, которая была радушно воспринята сообществом. Осторожный выбор партнеров и методов может привести к созданию проекта, выгодного обеим сторонам. Компания сможет привлечь к проекту множество опытных разработчиков, жаждущих попробовать новую игрушку, в то же время сообщество получит множество усовершенствований, сделанных во время работы над проектом и еще один способ использования библиотеки, расширяющий круг возможностей GTK+.

Сообщество GTK+

 
Хакеры и GTK+

В списках рассылки и других материалах вы увидите упоминания о хакерах. Это не значит, что кто-то пытается взломать программу. На самом деле это показатель того, что кто-то работает и хорошо знаком с продуктом, сохраняя исходный смысл программы. Поэтому вы можете видеть ссылки на GTK+ хакеров, GNOME хакеров и других в сообщениях форумов и списках рассылки.

Все время в течение вашего общения с GTK+, сообщество, собранное вокруг него, будет вашей службой поддержки. Поэтому важно, чтобы вы знали с чего начать. Это знание сбережет массу вашего времени и убережет вас от потенциального недопонимания при общении.

Люди, занимающиеся разработкой, связанной с GTK+, в основном ориентируются на три списка рассылки:

gtk-list
В этом главном списке обсуждаются все вопросы, связанные с GTK+, причем не обязательно относящиеся к программированию. Например, здесь вы можете задать вопросы, касающиеся лицензии. Это также единственный список, где уместно размещать предложения работы;
gtk-app-devel-list
Этот список посвящен вопросам разработки приложений, использующих GTK+. В этом списке следует задавать все вопросы, относящиеся к программированию с GTK+. Если вы сомневаетесь в каком списке задать свой вопрос, задайте его здесь;
gtk-devel-list
Этот список посвящён вопросам разработки самого GTK+ (в отличие от приложений). Поскольку эффективные способы общения очень важны при постоянной разработке будущих версий, необходимо, чтобы вопросы, не относящиеся к разработке GTK+, не попадали в этот список. Например, здесь будет неуместен вопрос об использовании GtkTreeView. Однако сообщения о предполагаемых ошибках или предложения по расширению возможностей инструментария найдут в этом списке рассылки своего адресата, и очень приветствуются разработчиками.

Разработчики GTK+ регулярно читают все эти три списка рассылки, так что не волнуйтесь о том, что ваше сообщение пропустят.

Другая вещь, о которой вы должны иметь представления, называется Bugzilla. Это система регистрации ошибок, в которой так же есть база данных об ошибках в GTK+. Если вы заметили какое-то странное или нелогичное поведение программы GTK+, прежде чем сообщать об этой ошибке в списках, посмотрите в Bugzilla, не сообщил ли уже кто о ней до вас. Здесь вы также можете высказать свои предложения, чтобы помочь сделать GTK+ еще лучше. Не стесняйтесь зарегистрировать что-то, в чем вы не уверены, главное опишите это подробно. Самое плохое, что может случиться, - это кто-нибудь поставит метку NOTABUG (не ошибка) на вашем сообщении.

Помимо этих источников информации, вы можете оперативно получить поддержку на многих каналах IRC (чатах). Главным сервером всех чатов по GTK+ является GIMP.net. На каналах #gtk и #gnome обычно можно найти людей, которые могут вам помочь. Но будьте вежливы и терпеливы: "можно" это не означает, что "в течение 5 минут".

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

Взгляд в будущее

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

Тем не менее, в настоящее время, разрабатывается один очень интересный проект, цель которого оказать поддержку независимым поставщикам ПО (ISV) и сделать процесс поиска нужных инструментов разработчика более простым. Эта работа проводится в рамках проекта Ridley и состоит из интеграции множества ранее независимых библиотек и модулей в одну, простую в использовании и согласованную платформу. Например, в GTK+ будет интегрирована часть из существующих сегодня библиотек GNOME, дабы использовать их возможности на платформах, где работает GTK+. Среди таких библиотек, библиотека libglade, с которой вы уже познакомились в части 2, она уже запланирована на включение в состав платформы GTK+. Ожидается, что после завершения проекта Ridley получившаяся в результате платформа получит номер 3, т.е. появится GTK+ версии 3.0 (при этом совместимость с текущей веткой 2.x будет сохранена).

Заключение

В этой, последней статье цикла "Основы GTK+" вы познакомились со многими аспектами создания успешного программного продукта. Вы увидели, как GTK+ поддерживается на разных платформах, как лучше распространить ваше приложение среди пользователей. Узнали пути, которыми вы можете изменить GTK+, чтобы он лучше соответствовал вашим нуждам. В заключение, вы получили краткую справку о будущей версии платформы и информацию о том, где начать ваше большое путешествие с GTK+.

Я надеюсь, что мы скоро встретимся с вами на одном из списков рассылки, или возможно даже в чате. До скорых встреч!


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=4228