Отличительная черта процесса разработки в компании ALT Linux — разделение на две практически независимые структуры: коммерческое подразделение ALT Linux и сообщество разработчиков ALT Linux Team. Компания, состоящая из 15 человек, занимается выпуском дистрибутивов, подготовкой материалов, сервисным обслуживанием, разработкой решений на заказ и другими коммерческими задачами. Сообщество ALT Linux Team объединяет около 60 человек и занимается собственно редактированием исходных текстов и их сопровождением, анализом и исправлением ошибок, тестированием и сборкой пакетов. Впрочем, кроме собственно разработчиков, в этой команде есть и так называемые «майнтейнеры» (от английского maintain), которые сами ничего не разрабатывают, а занимаются сборкой пакетов в соответствии с определенными требованиями. Разработчики и майнтейнеры практически не влияют на коммерческую деятельность ALT Linux, которая, в свою очередь, не воздействует на процесс разработки и сборки пакетов, лишь рекомендуя исправить ошибки к определенному времени. Все взаимодействия выполняются через репозиторий программ Sisyphus ("Сизиф").
Компания ALT Linux стремится к созданию модели разработки, которая уже достаточно давно существует в Debian. Эта группа объединяет более 300 специалистов со всего мира, которые занимаются поддержкой и развитием более десяти тысяч пакетов. Особенность ситуации в том, что в Debian нет коммерческой части сообщества, а есть только независимые разработчики и набор центральных серверов, на котором работают скрипты автоматизированной подготовки пакетов. На этих серверах располагается несколько репозиториев: стабильные и находящиеся в разработке. Репозитории выходят для шести платформ и имеется также фонд, который занимается материальным обеспечением техники центральных серверов. Многоплатформность Debian, реализуемая также с помощью специального скрипта autobuilders, который распаковывает пакет с исходными текстами программы и компилирует ее под конкретную аппаратно-программную среду. Только после того, как приложение было корректно скомпилировано на всех платформах, оно попадает в нестабильный репозиторий Debian. Затем пользователи и другие разработчики тестируют приложение пакета и сообщают о найденных ошибках, выставляя им определенный уровень. Чтобы приложение попало в стабильный дистрибутив, разработчик должен решить все ошибки, помеченные как «блокирующие выпуск» (release critical). Дистрибутив объявляется стабильным, когда все его пакеты прошли данную процедуру.
В сообществе разработчиков Debian имеются выборные должности, такие как президент или менеджер по выпуску дистрибутива, которые имеют лишь номинальную власть — правила разработки описаны настолько точно, что появилась возможность реализовать их в виде скриптов, управляющих процессом без участия человека. Конечно, «ленточку перерезает» менеджер по выпуску, но он не имеет права выпустить продукт с нерешенными проблемами или закрыть их самостоятельно. ALT Linux выстраивает аналогичную систему, в которой нет субъективизма, а есть строгие правила, выраженные в скриптах.
В мире Unix явно прослеживаются два подхода к разработке, отражающие, соответственно, точки зрения программиста и системного администратора. Программист делает продукт, который, будучи написанным правильно, должен работать везде. Задача системного администратора — обеспечить работу на конкретной платформе и в конкретных условиях. Если администратор пытается найти общее решение на все случаи жизни, то это говорит о его некомпетентности. Если же разработчик пытается построить частное решение, которое основано на определенных ухищрениях и будет работать только при определенных условиях, то его нельзя назвать хорошим программистом.
Репозиторий
Вся разработка программного обеспечения в ALT Linux связана с общим репозиторием Sisyphus, в который попадают все новые версии программ, в том числе и непроверенные. Здесь хранятся откомпилированные программы, исходные тексты и файлы документации, правда, не в формате .deb, как это принято в Debian, а в виде RPM-пакетов. Прежде чем какой-то пакет будет перенесен в стабильную часть репозитория, он вначале попадает в Sisyphus, откуда его берут на тестирование заинтересованные пользователи. Чтобы пакет попал в Sisyphus нужно, чтобы нашелся человек, который согласился бы его сопровождать. Им может стать любой, кто продемонстрирует свое умение компилировать программы и собирать RPM-пакеты. Пакеты в ALT Linux собираются по особым требованиям, в частности, в пакетах должна быть документация, а файл Changelog, который содержит информацию о внесенных в пакет изменениях, не должен быть пуст. Скрипты, заполняющие репозиторий, выполняют необходимые проверки и не выкладывают новые компоненты в общий доступ, пока не будут удовлетворены все правила.
Есть еще одно непререкаемое правило — откомпилированные программы не могут попасть в репозиторий без пакета исходных текстов. Это связано с тем, что по правилам ALT Linux зависимости в RPM-пакетах генерируются скриптами автоматически по поведению компоновщика. Дело в том, что утилита apt-get не может быть применена к произвольному набору пакетов, поскольку это может разрушить уже работающую систему. Хотя в RPM и предусмотрены механизмы управления взаимосвязями, они полностью зависят от произвола того, кто собирает пакет, поэтому пришлось разработать жесткие требования именно к процессу сборки; точное соблюдение зависимостей гарантирует правильную работу установленных посредством apt-get программ.
Sisyphus предназначен для разработчиков и никогда не становится стабильным. Тем не менее, пользователи могут обновлять свои программы из него, но рекомендуется сделать вначале пробное обновление, и только если оно полностью протестировано, переносить его на рабочие машины. Таким образом, основной продукт ALT Linux Team — это репозиторий Sisyphus, а уже компания ALT Linux разрабатывает на его основе свои стабильные дистрибутивы: Master, Junior, Castle и др.
Репозитории, содержащие большое количество пакетов, должны отвечать требованию согласованности — во всех пакетах должны быть правильно установлены все необходимые зависимости по исполнению и устранены лишние связи. Для каждого пакета должны быть определены другие пакеты, без которых данный не будет работать. В системах с большим количеством пакетов важно не только установить зависимости по исполнению в каждом конкретном пакете, но иметь согласованную систему зависимостей во всех пакетах репозитория с учетом версий. В каждом новом пакете нужно указывать текущие версии, чтобы программа обновления вовремя модифицировала базовые библиотеки. В противном случае заниматься обновлениями рискованно, поскольку система может перестать работать уже после очередного обновления.
Более интеллектуальные программы могут вычислять пакеты, необходимые для самостоятельной сборки приложения. В ALT Linux используются именно такие скрипты сборки (это нужно, например, при сборке пакетов в локальном chroot-окружении или «под» другую платформу). Зависимости по сборке позволяют создавать отдельную среду для сборки приложения, что гарантирует работоспособность программы практически в любой среде, в которой соблюдены указанные зависимости. Соблюдение зависимостей по сборке гарантирует, что в системе установлены все компоненты, необходимые для компиляции пакета.
Sisyphus построен так, чтобы любая другая компания могла на его основе выпустить свой специализированный дистрибутив. Sisyphus — не просто репозиторий пакетов, а набор решений, как и любой универсальный дистрибутив Linux. В нем реализовано большое количество идей в области безопасности, интернационализации и управления пакетами. Большинство серверных программ были специально переписаны для работы в chroot-окружении, что повысило стойкость системы по отношению к атакам на отдельные сетевые службы. Кроме того, была переписана система регистрации пользователей, упрощающая контроль. Были найдены ошибки в системе печати, которые возникли из-за неправильной локализации. Также переведены на русский язык интерфейсы коммуникатора Mozilla, пакета офисных программ OpenOffice.org, подготовлен набор шаблонов документов, максимально приближенный к отечественным реалиям.
Правда, чтобы этот набор превратился в законченный продукт, нужна еще полноценная документация. Идеальным решением была бы система, с помощью которой пользователь мог выделить подмножество необходимых пакетов, а она бы уже самостоятельно укомплектовала этот набор всем необходимым для работы и установки.
Общение в Open Sourсe
Важное место в процессе разработки занимают списки рассылки, которые, по сути, склеивают сообщество разработчиков, позволяя взаимодействовать большой территориально распределенной команде. В ALT Linux стараются поддерживать конструктивный дух в списках рассылки для разработчиков, который позволил бы решать проблемы, а не заниматься словесными баталиями. Списки не являются модерируемыми, но за их работу отвечают определенные люди, которые могут «отписать» кого-то от списка, но не вправе удалять из переписки или архивов ни одного сообщения.
Компания поддерживает список рассылки для разработчиков, который общедоступен только для чтения. Писать же в него могут участники ALT Linux Team, которые подписываются на него автоматически. Всем же остальным пользователям продуктов можно подписаться на общедоступные списки рассылки — сообщества пользователей (community@altlinux.ru), репозитория (sisyphus@altlinux.ru), обсуждение юридических проблем свободного программного обеспечения (legal@altlinux.ru), а также два списка, посвященных проблемам безопасности. Эти списки позволяют разработчикам, майнтейнерам и пользователям общаться между собой, получать информацию о новых поступлениях, исправлениях ошибок и проблемах с безопасностью. Первое, что рекомендуется сделать пользователю после установки дистрибутива — подписаться на список рассылки по безопасности.
Когда выпускается тот или иной дистрибутив, то развитие определенных пакетов замораживается, а разработчиков просят обратить внимание на решение проблем, отмеченных в системе контроля ошибок Bug Tracking System (BTS). Выпуск дистрибутива состоится только тогда, когда будут устранены все критические ошибки, вызывающие сбой или блокирующие выпуск дистрибутива. Впрочем, возможен выпуск дистрибутива с серьезной ошибкой, если известно, как ее обойти или когда ошибка допущена сторонними разработчиками, а ALT Linux своими силами ее решить не в состоянии. Есть еще несколько категорий оценок опасности ошибки, но они уже не влияют на выпуск дистрибутива и решаются штатным порядком через репозитории.
Уровень ошибки определяет тот, кто ее заметил. Сами разработчики определяют до трети ошибок, которые попадают в BTS, и не имеют права скрывать сведения о них. Если ошибка была допущена в сторонней системе, то ее решение может перейти к другому разработчику. Собственно процесс устранения ошибки не однозначен, поскольку она может проявляться в сторонних приложениях, а располагаться в базовой библиотеке. Тем не менее, сообщество разработчиков не отвечает за выпуск новых продуктов: этим занимается менеджер выпуска, который проверяет правильность сборки и работоспособность программного обеспечения.
Поддержка от Open Sourсe
ALT Linux взяла очень многое от Debian, в частности утилиту онлайнового обновления apt-get, которая является компонентом репозитария Sisyphus. Правда, в Debian используется свой собственный формат пакетов .deb, а Sisyphus построен на более известном формате RPM. Поэтому apt-get был взят не от Debian, а адаптирован под RPM бразильской компанией Connectiva, которая также занимается выпуском своих дистрибутивов Linux. Использование apt-get позволяет поставить или обновить любой заранее определенный набор программного обеспечения при помощи единственной команды. При этом обновится не только необходимый пользователю компонент, но и другие пакеты, от которых он зависит.
Утилита apt-get взаимодействует с репозиториями, например, Sisyphus, сверяя версии пакетов и загружая обновленные. ALT Linux поддерживает несколько различных репозиториев. Стабильными наборами пакетов являются те, которые жестко привязаны к выпущенным дистрибутивам. Обновление стабильных дистрибутивов происходит крайне редко — в основном при исправлении ошибок, затрагивающих безопасность.
Некоторые компании устанавливают у себя «зеркало» репозитория и обновляют все компьютеры по локальной сети. При этом администраторы локальных репозиториев могут обновлять не весь набор приложений, а только самое необходимое или проверенное. Из этого репозитория можно печатать специальные компакт-диски и рассылать их по филиалам для обновления. Причем в дистрибутиве есть утилиты для автоматизации этого процесса. Если же этого не достаточно, то компания может заказать у ALT Linux дополнительную стабилизацию определенных приложений. Вся техническая поддержка выполняется стандартными путями через списки рассылки и систему онлайновых обновлений.
Разработчики
Зачем же разработчики программ сотрудничают с ALT Linux, раскрывая исходные тексты своих решений? Дело в том, что создателям системы для ALT Linux Team самим требуется базовая платформа, которая соответствовала бы их требованиям. Причем желательно иметь контакт с теми людьми, которые принимают участие в разработке этих компонентов. Естественно, разработчики предполагают, что их решения также кому-то могут понадобиться. В результате возникает сообщество творцов программного обеспечения. Участвуя в нем, каждый получает именно то, что ему нужно, но так же открывает другим свои разработки.
Откуда берутся разработчики Open Sourсe? Человек покупает один из дистрибутивов и работает с ним как пользователь, ему нравится предлагаемое решение, а затем, через список рассылки он, например, спрашивает: «А почему у вас нет такого-то пакета?» Ему отвечают: «А потому, что у нас никто не хочет его собирать — хочешь, чтобы он появился, можешь сам стать его майнтейнером». Работая майнтейнером, человек не только собирает пакеты по определенным правилам, но еще, как минимум, подписывается на соответствующие списки рассылки для разработчиков. В конце концов, он изучает пакет настолько, что может самостоятельно решать проблемы программного обеспечения, начинает участвовать в процессе его разработки и развития.
Если речь идет о материальной заинтересованности, то ALT Linux привлекает для своих проектов людей из команды разработчиков для выполнения определенных заказов. Впрочем, разработчики из сообщества могут зарабатывать и «на стороне», где они работают с определенными системами и хотят иметь влияние на их дальнейшее развитие. Они только собирают пакеты и выкладывают их в репозиторий, но взамен получают гораздо больше — интегрированность пакетов и их согласованность, а также возможность обсудить проблемы с разработчиками пакета и договориться с ними о новых функциях или решении конкретных проблем. Одновременно у разработчиков, выполняющих правила сборки пакетов для Sisyphus, появляется возможность распространять свои продукты не как отдельное приложение, а в составе готовой, согласованной и интегрированной системы, развивая только ту функциональность, которая является изюминкой его приложения.
Еще одной особенностью разработки программ с открытым кодом является доступность авторов, как следствие, любой работодатель может оценить качество работы программиста и проверить его квалификацию. В результате, имя, заработанное на разработке программ с открытым кодом, легко можно превратить в материальные блага, чего нельзя сказать об обратном преобразовании.
Все пакеты, распространяемые через репозиторий ALT Linux, имеют электронную подпись майнтейнера и должны содержать информацию о том, кто, когда и куда внес свои изменения, даже если это были сторонние разработчики. Цифровую подпись автоматически проверяет apt-get. Вместе с любым дистрибутивом ALT Linux распространяется база публичных ключей разработчиков; все подписи проверяются автоматически. Есть также общий ключ, которым дополнительно подписываются все дистрибутивы.
Валерий Коржов (cwzerro@gmail.com) -- обозреватель, Computerword Россия, (Москва). Автор признателен Алексею Новодворскому, техническому директору компании ALT Linux, за помощь в подготовке статьи.
Примером работы службы технической поддержки является ситуация с библиотекой zlib, которая занимается архивированием файлов в формате zip. В библиотеке была найдена ошибка, позволяющая составить такой архив, распаковка которого могла бы повредить системе. Ошибка эта присутствовала практически для всех платформ. Сама библиотека была настолько маленькая, что разработчики приложений предпочитали интегрировать ее в приложение (статическая компоновка), а не пользоваться разделяемой, т. е. динамически подгружаемой, библиотекой. Как только ошибка была замечена, разработчики ALT Linux постепенно стали переходить к динамической компоновке. Когда же ошибка была признана официально, уже через четыре минуты в Sisyphus была помещена новая исправленная версия библиотеки. Если пользователь обновлял свою систему, ошибки убиралась из нее автоматически. Таким образом, пользователь получал техническую поддержку незаметно для него самого. В системах с закрытыми исходными текстами эта ошибка может сохраняться и по сей день.