Введение в разработку Ubuntu: часть 1

Это первая статья в серии, объясняющей основы разработки Ubuntu, не требующей огромного количества знаний, инструментов, концептов, процессов и инфраструктуры. Если вам понравилась статья или вы нашли в ней что-то проблемной, пожалуйста, проявляйте активность в комментариях.

ubuntu-11.10 screenshot

Введение в разработку Ubuntu

Ubuntu сделана из тысяч различных компонентов, написанных на различных языках программирования. Каждый компонент — будь то библиотека ПО, инструмент или графическое приложение — доступно также в виде исходного кода. Пакеты с исходным кодом состоят из двух частей: актуальный исходный код и «metadata». Метадата включает в себя зависимости пакета, информацию о разработчике, лицензии, а также инструкции по сборке приложения. После того, как исходный код скомпилирован, он становится бинарным .deb-пакетом, которые пользователи могут установить.

Каждый раз при выходе новой версии приложения, или когда кто-то производит изменение в исходном коде Ubuntu, пакет с исходным кодом сначала должен быть загружен на Launchpad для компиляции. Получившиеся бинарные пакеты упаковываются в архив и помещаются в зеркала в разных странах. URL’ы в /etc/apt/sources.list указывают на архив или зеркало. Каждый день CD-образы собираются для разных видов Ubuntu. Ubuntu Desktop, Ubuntu Server, Kubuntu и остальные отличаются лишь списком пакетом на CD. Эти CD-образы затем используются для тестов установки и получения отзывов для будущего планирования релизов.

Разработка Ubuntu очень сильно зависит от текущей стадии плана выпуска. Мы выпускаем новую версию Ubuntu каждые шесть месяцев, и это возможно только благодаря строгим датам «замораживания». С каждым замораживанием разработчики начинают делать всё менее заметные улучшения (улучшения производительности). Feature Freeze — первая большая заморозка после первой половины цикла. На этом этапе все возможности уже должны присутствовать. Цель этого замораживания — сфокусироваться на исправлении багов. После этого — пользовательский интефейс, затем документация, ядро, и дальше — замораживаются, затем beta-релиз выходит с большим простором для тестирования. Исправляются критичные баги, выходит релиз-кандидат. И наконец, если нет серьёзных проблем, выходит финальный релиз.

Тысячи пакетов, миллиарды строк кода, сотни контрибуторов требуют много коммуникации и планирования для производства продукта высокого качества. В начале каждого цикла релиза у нас проходит саммит разработчиков Ubuntu Developer Summit, где разработчики и контрибуторы собираются вместе для планирования возможностей следующих релизов. Каждая возможность обсуждается, для этого должна присутствовать информация о реализации возможности, возможных изменениях в других местах, как это тестировать. Это всё открыто, и вы можете подключиться удалённо и слушать прямую трансляцию, общаться с участниками, подписываться на изменения спецификаций, поэтому вы всегда будете в курсе происходящих событий. Это все бесплатно, и для этого не нужно никакого интернет трейдинга.

Не все изменения могут быть обсуждены на встрече, в основном потому что Ubuntu основывается на изменения, происходящих в других проектах. Вот почему контрибуторы Ubuntu всегда держат связь друг с другом. Большинство команд или проектов используют собственные списки рассылки для избежания кучи ненужного шума. Для более оперативной связи, разработчики и контрибуторы связываются через Internet Relay Chat (IRC). Все дискуссии открыты и публичны.

Другая важная вещь для связи — баг-репорты. Когда дефект находится в пакете и части инфраструктуры, сообщение о баге отправляется в Launchpad. Вся информация содержится в этом багрепорте, в том числе и статус, а также время последнего обновления. Это эффективный инструмент для отслеживания багов в проекте, а также для организации разработки.

Большинство софта, доступного в Ubuntu, не написано самими разработчиками Ubuntu. Его большинство пишется разработчиками других Open Source-проектов, и они интегрируются в Ubuntu. Эти проекты зовутся «Upstreams», потому что их исходники попадают в Ubuntu, но мы просто интегрируем его. Связь с Upstream крайне важна для Ubuntu. Ubuntu получает из Upstream исходники, а Upstream’ы получают пользователей, отчёты о багах и патчи из Ubuntu (и других дистрибутивов).

Самый важный Upstream для Ubuntu — это Debian. Debian — дистрибутив, на котором основана сама Ubuntu и много решений касательно разработки принимаются именно из-за здешней пакетной структуры. Традиционно, у Debian всегда есть выделенные мейнтейнеры для каждого отдельного пакета или выделенные команды мейнтейнеров. В Ubuntu также есть команды, специализирующиеся на отдельных пакетах, и у каждого разработчика есть свой раздел для работы, а присоединиться может каждый, кто показывает свою возможность.

Разработка Open Source происходит у всех по-разному, с разными целями и разными полями для концентрации сил. Например, какой-нибудь Upstream может быть заинтересован в работе над новой большой возможностью, в то время как Ubuntu, из-за своего плана релизов, может быть заинтересована в разработки очень стабильной версии. Вот почему код сначала пишется в разных бренчах, а потом принимаются решения об их объединении.

В примере, который я привёл выше, можно поступить так: поставлять Ubuntu с существующей версией проекта, добавить багфикс, добавить следующий релиз в Upstream, и добавить его в следующий релиз Ubuntu. Это лучший компромисс и ситуация, где выигрывает каждый.

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

Когда вы ищете решение проблемы, хорошей идеей было бы проверить Upstream на наличие проблемы (или возможного решения). Если эта проблема ещё не известна, то вы можете предложить своё решение.

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

Самым важным требованием для удачи в разработке Ubuntu являются: умение «заставлять вещи снова работать», не бояться чтения документации и задавания вопросов, умение работать в команде и получать немного удовольствия от работы детективом.

Хорошими местами для ваших вопросов являются Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. и #ubuntu-motu на irc.freenode.net. Вы легко найдёте много новых друзей и людей с тем же желанием, что и вы: сделать мир лучше, разрабатывая Open Source-софт..