-->
Остров пингвинов
- - - - - - - - - - - - - - - - - - - - - - -
Сольные выступления

Для начинающих

Для знатоков

Для души

О нас

Copyright(С) Олег П. Филон
март 2002, Гомель, BY
[email protected]



Дебьян Статья написана для доклада на V Республиканской научной конференции,проводимой в Гомельском Государственном Университете им. Ф.Скарины 18-20 марта 2002г. Оглавление

1. История

Этот проект был начат Яном Мёрдоком (Ian Murdock) 16 августа 1993г. В то время само понятие "дистрибутив Линукс" ещё не существовало, а Яну к тому же пришла в голову идея организовать команду разработчиков, используя возможности глобальной Сети. К тому времени модель подобной распределённой разработки уже была опробована Ричардом Столменом [RMS] в проекте ГНЮ и Линусом Торвальдсом [Torvalds] для создания ядра Линукс.

С самого начала была поставлена цель создать "народный дистрибутив" из полностью свободных программ, в духе идей созданного Р. Столменом Фонда Свободных Программ [FSF]. Ещё одной целью был упор на качество, надёжность дистрибутива - имеется в виду сведение к минимуму количества ошибок и тщательное согласование программ для совместной работы. Эти цели были изложены Яном Мёрдоком в "Манифесте Дебьян" [deb-manifesto]. По мере развития эти идеи получили воплощение в целой серии документов - социальный контракт, конституция Дебьян, многочисленные технические "policy" [policy].

Важной характеристикой этого проекта является его некоммерческая суть. Распределённость и открытость разработки подразумевает доступность дистрибутива для всех желающих. При готовности очередной версии изготавливаются CD-образы, которые можно свободно копировать и распространять. На основе Дебьяна были созданы другие дистрибутивы, в том числе коммерческие.

Такой подход не помешал Дебьяну устойчиво расти прошедшие 8 с лишним лет. Вот некоторые количественные показатели роста:

  • v1.1 _Buzz_, Июнь 1996г., 474 пакетов
  • v1.2 _Rex_ Декабрь 1996г., 848 пакетов, 120 разработчиков
  • v1.3 _Bo_ Июль 1997г., 974 пакетов, 200 разработчиков
  • v2.0 _Hamm_ Июль 1998г., 1500+ пакетов, 400+ разработчиков
  • v2.1 _Slink_ 09 Марта 1999г., около 2250 пакетов, 2 бинарных CD
  • v2.2 _Potato_ 15 Августа 2000г., 6 дисков (bin+src), почти 4000 бинарных пакетов, более 450 разработчиков
  • v3.0 _Woody_ 2002г.??, 9000+ пакетов, 900+ разработчиков

Также стабильно росла всемирная сеть зеркал архива Дебьян, поддержка кроме первоначальной архитектуры Intel i386 ещё более 10 аппаратных платформ.

Проект Дебьян постепенно обрёл юридическое воплощение в форме неприбыльной организации SPI (Software for Public Interest Inc.) [SPI]. Эта организация представляет интересы сообщества Дебьян и ещё нескольких программных проектов, принимает и распределяет дотации деньгами и аппаратурой .

2. Сообщество

Процесс разработки Дебьян с самого первого дня был открытым и распределённым. Участники проекта координировали свои действия через и-нет, постепенно создавая уникальное сообщество разработчиков - виртуальную республику с собственной конституцией, избранным народом лидером, со своими вполне реальными традициями и законами. Кроме официальных разработчиков, сопровождающих программные пакеты, в это сообщество входит также огромная армия активных пользователей дистрибутива Дебьян. Любой обнаруживший ошибку может сообщить о ней, используя систему учета ошибок Bug Tracking System [BTS]. Существует более 140 списков рассылки, их перечень и архив сообщений доступны на специальном сервере [lists].

На рабочей встрече "Свободное программное обеспечение", прошедшей в конце ноября 2001г. в Москве с докладом "Конституционная анархия Debian" выступили два разработчика - Петя Новодворский и Вартан Хачатуров [anarchy]. В этом докладе идёт речь о проблемах, возникающих при координации такого глобального проекта с таким количеством участников, и способах их решения. Подробно рассказан процесс включения пакета в дистрибутив и программиста в команду разработчиков.

Ещё один взгляд на проект представлен в исследовании группы учёных из Universidad Rey Juan Carlos de Madrid [potato-count]. В этой работе предпринята попытка приблизительно оценить стоимость труда, затраченного разработчиками, при использовании тех же оценок стоимости строки кода и производительности труда, которые применяются при оценке традиционной закрытой разработке. Оценка для дистрибутива v2.2 "Potato" составила ~55 млн. строк кода и ~1.9 млрд. долларов США (по методу COCOMO).

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

  • Ян Мёрдок, основатель и бессменный лидер с августа 1993г. по март 1996г.
  • Брюс Перенс (Bruce Perens), с марта 1996г. по декабрь 1997г.
  • Ян Джексон (Ian Jackson), с января 1998г. по декабрь 1998г.
  • Викерт Аккерман (Wichert Akkerman), с января 1999г. по март 2001г.
  • Бен Коллинс (Ben Collins), с апреля 2001г. до перевыборов весной 2002г.

Звание лидера проекта не даёт особых привилегий, но является отражением степени авторитета данного разработчика, его видения и вклада в проект. Невозможно рассказать обо всех разработчиках, но могу подсказать, как можно получить список этой уникальной команды, и заодно выстроить его по такому критерию, как количество сопровождаемых пакетов - см. статью [этюд-о].

Упомянутый дистрибутив v2.2, выпущенный в августе 2000г., содержал посвящение одному из разработчиков - Joel 'Espy' Klecker, тяжело болевшему и умершему в возрасте 21 год. Обязательно найдите и прочтите это посвящение - судьба 'Espy' позволяет лучше понять и почувствовать, что же такое сообщество Дебьян и из каких людей он состоит .

3. Дистрибутив

Основой дистрибутива Дебьян является собственный формат пакетов и программа управления ими - соответственно deb и dpkg. Вместе с набором файлов, составляющих пакет программ, в архив пакета включены сценарии, выполняемые до и после установки, а также перед и после удаления пакета. В базе данных информации о пакете хранится список зависимостей этого пакета от других. Такая развитая система управления пакетами позволяет легко добавлять и удалять отдельные пакеты, сохраняя полный контроль над системой.

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

В Дебьян сейчас входят на самом деле не один, а сразу три дистрибутива. Первый, т.н. стабильный, понемногу меняется с первого релиза в августе 2000г., в настоящий момент это v2.2r6. Развитие этой версии не происходит, только исправляются обнаруженные ошибки и затыкаются открытые дыры в защите.

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

Для желающих иметь постоянно развиваемый, но более стабильный дистрибутив, был создан промежуточный, т.н. тестовый дистрибутив woody. В него включают версии пакетов, которые за две-три недели в unstable не обнаружили серьёзных ошибок и не вызвали ошибок в других пакетах. Благо, организация архива позволяет иметь несколько версий одного и того же пакета.

Перед выпуском релиза - новой стабильной версии Дебьян, происходит т.н. заморозка, freeze. На некоторое время развитие дистрибутива прекращается, все силы разработчиков направляются на устранение ошибок и замечаний. Как уже упоминал, постоянно работает система отлова и учёта ошибок [BTS]. Увы, ошибки при программировании вещь неизбежная, а в таком глобальном проекте их число уже перевалило за сотню тысяч. Увлекательным событием для разработчиков становится проводимые время от времени особые уикенды - Bug Squash Party. В реальном времени, общими усилиями, ловятся и безжалостно уничтожаются сотни багов. Ошибкам присваиваются разные уровни приоритетов, для готовности релиза стараются свести к минимуму т.н. release critical bugs.

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

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

Во-вторых, количество пакетов, размер дистрибутива и пользовательская база неизмеримо выросли. Не только проект Дебьян, весь мир Линукс живёт теперь в другом темпе, обновления происходят постоянно. Так что ожидать полной стабилизации бесполезно, нужно как-то научиться жить в этом темпе, находить компромисс между стабильностью и новизной .

4. Архив

В качестве решения этой проблемы - безостановочная гонка версий и постоянное исправление ошибок - предлагается создать местное зеркало архива Дебьян и настроить средства разработки.

С декабря 2000г. архив Дебьян подвергся реорганизации и сейчас устроен в виде пула из трёх традиционных секций - main, contrib и non-free, далее разбит на каталоги по начальной букве (для lib* - по 4 первым буквам), и на третьем уровне - каталоги с названием пакета. В каталоге хранятся несколько версий исходников и все версии бинарных пакетов, получающихся из этих исходников для всех аппаратных платформ. На сегодняшний день это пакеты для 13 различных архитектур, считая ядро hurd-i386.

Исходники хранятся в виде 3 файлов, например:

название-пакета_версия-N.diff.gz
название-пакета_версия-N.dsc
название-пакета_версия.orig.tar.gz

Третий по счёту файл, обычно самый большой, представляет собой оригинальный архив исходников, взятый из Интернет, т.н. upstream. Это тот код и документация, которые выложили в Сеть авторы программы. Таким образом, архив Дебьян уже представляет интерес как крупнейшая коллекция исходников в Сети.

В первом из файлов, с расширением .diff.gz, хранятся исправления, патч, который позволяет встроить программу в систему Дебьян, согласовать её с другими, иногда разбить единую программу на несколько пакетов. Третий маленький файлик .dsc представляет собой описание пакета, содержит некоторые поля для программы управления пакетами, а также контрольные суммы и подпись сопроводителя. Для программ, созданных специально для Дебьян, файла diff.gz нет, а тарбол (файл-архив) называется имя-пакета_версия.tar.gz

Для каждой из версий исходников и для каждой из 13 программно-аппаратных платформ в каталоге пакета хранятся также откомпилированные бинарные пакеты, например название-пакета_версия_i386.deb для архитектуры i32.

В исследовании [potato-count], уже упомянутом во 2-й части, приведены соотношения между объемом upstream кода и кодом, добавленным или исправленным сопроводителями пакета. Из приведенного анализа видно, что из ~55 млн. строк кода, составляющих potato, только ~1/10 часть добавлена сопроводителями пакета. Это вполне согласуется с наблюдением, что .diff.gz в среднем гораздо меньше по объёму и изменяется, как правило, чаще, чем upstream tarball.

При каждом изменении исходников происходит перекомпиляция всех бинарных пакетов. Но самое важное качество свободных программ - доступность исходников, подсказывает нам, что получение бинарного пакета можно сделать на месте, не загружая канал связи. Во многих случаях, все архитектуры компилить нет необходимости, так что достаточно настроить место разработчика для самой распространённой у нас архитектуры i386.

Но даже с учётом приведенных соображений, задача синхронизации локального зеркала архива Дебьян требует точной настройки и, как минимум, выделенного канала на 33600 KiBi/сек.

В ГГТУ им. Сухого имеется указанный минимальный канал связи, так что расскажу поподробнее, как организовано зеркалирование архива Дебьян.

Для отслеживания изменений и выполнения копирования используется пакет mirror v2.9. Этот большой перловый скрипт позволяет получить список файлов на сервере из заархивированного листинга ls-lR.gz, сравнить с имеющимся в локальном зеркале. Но самое главное, с помощью перловых регулярных выражений можно тщательно настроить список выкачиваемых файлов, точнее, то, что нужно исключить, а всё остальное копировать. Например, документация на многих языках для нас не очень интересна, ядро Линукса многие отслеживают отдельно, есть очень тяжёлые snapshot'ы, интересные только разработчикам. Для заинтересованных в деталях файла конфигурации программы mirror и настройки зеркалирования архива Дебьян этот файл выложен вместе с данной статьёй [mirror.deb-src].

В итоге, после первоначального трудоёмкого выкачивания базового архива исходников объёмом более 5 GiB для дальнейшей синхронизации изменений хватает обычно нескольких ночных часов online .

5. Разработка

В Дебьян существует множество инструментов, упрощающих и облегчающих процесс получения из исходников готовых пакетов. Самым высокоуровневым является, пожалуй, уже упоминавшаяся программа apt-get. Кроме установки пакетов и обновления системы, apt-get может также служить оболочкой для вызова более низкоуровневых программ, выполняющих сборку пакетов. Если вы настроили файлы конфигурации в каталоге /etc/apt - apt.conf и sources.list, далее процесс сборки пакета выполняется вызовом 2 команд:

... $ sudo apt-get build-dep имя-пакета
... $ apt-get source -b имя-пакета

Первая команда проверяет зависимости собираемого пакета от других, при необходимости выкачает и установит все необходимые программы. Вторая команда выполняет собственно сборку.

Если вы захотите вмешаться в процесс сборки пакета, вы можете начать править файлы исходников, управляющие этим процессом. Эти файлы лежат в каталоге debian который создаёт и заполняет сопроводитель пакета. Подробно узнать назначение каждого из файлов, а также сам процесс построения пакетов, можно из документа [maint-guide], имеющимся в русском переводе. Этот документ доступен либо с официального сайта [debian.org], либо, как всегда, из архива в пакете maint-guide.

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

... $ debuild -b -uc 2>&1|tee build.log
... $ fakeroot debian/rules clean

Вторая команда необязательна - она очищает каталоги от временных и производных файлов.

Конечно, процесс разработки не всегда удаётся свести к двум-трём простым командам. Это происходит в том идеальном случае, к которому постоянно стремится команда разработчиков и всё сообщество Дебьян. Любые ошибки в процессе сборки для любой из 13 платформ составляют основную массу БД [BTS]. Рано или поздно серьёзному разработчику придётся зарыться вглубь программы или используемого языка программирования. Здесь давайте снова обратимся к уже дважды упоминавшемуся исследованию [potato-count]. Среди ~55 млн. строк исходников расклад по строкам на разных языках программирования таков:

  • C: 38,450,000 (69.65%)
  • C++: 5,510,000 (9.98%)
  • LISP: 2,840,000 (5.15%)
  • Shell: 2,620,000 (4.75%)
  • Perl: 1,330,000 (2.41%)
  • FORTRAN: 1,150,000 (2.08%)
  • Tcl: 550,000 (1.01%)
  • Modula3: 540,000 (0.98%)
  • Objective C: 425,000 (0.77%)
  • Ada: 405,000 (0.74%)
  • Assembler: 390,000 (0.72%)
  • Python: 360,000 (0.66%)

Менее 0.5% количества строк относились к Yacc (0.44%), Java (0.20%), Expect (0.18%), Lex (0.13%). Данный подсчёт сделан на основании дистрибутива двухлетней давности, но процентное соотношение между используемыми языками должно в основном сохраниться для текущего архива исходников .

6. Выводы

  • Создание локального зеркала архива Дебьян в значительной степени решает проблему ПО для корпоративной сети. Уникальная команда разработчиков и сообщество пользователей Дебьян могут во многих случаях служить в качестве бесплатной службы поддержки.
  • Зеркалирование только исходного кода из архива свободно-доступных программ и настройка соответствующих инструментов разработки позволяет значительно повысить эффективность использования канала связи.
  • Использование свободно-доступных программ снимает проблему легальности используемого ПО, значительно повышает надёжность и уровень защиты серверов и сети. Если принять точку зрения, выраженную в публикации [кризис ПО], локальный архив Дебьян и соответствующее переоснащение рабочих мест показывают возможность преодоления кризиса в области ПО.
  • Участие в процессе разработки может рассматриваться как полезная практика для студентов, изучающих системное и прикладное программирование. При достаточно высокой квалификации собственных разработчиков возможно создание постоянно обновляемого и пополняемого, но достаточно стабильного дистрибутива нового типа.
  • Современный дистрибутив, как и система обеспечения безопасности - это непрерывный процесс обновления, в котором скорость реакции на обнаруженные ошибки является одним из решающих факторов.

7. Ссылки и библиография

[RMS] Richard M. Stallman. Биография и официальная страница Ричарда М. Столмена расположены на сайте www.stallman.org. Большое количество ссылок и цитат из интервью и выступлений приведены на сайте Ник. Безрукова www.softpanorama.org/People/Stallman/

[Torvalds] Linus Torvalds. Несмотря на свою молодость и виртуальность, Линус Торвальдс в мире и особенно в Интернет, чрезвычайно популярен. На сайте Ник. Безрукова ему также посвящён отдельный каталог www.softpanorama.org/People/Torvalds/

[FSF] Free Software Foundation. Организация, созданная Ричардом М. Столменом [RMS] для продвижения свободных программ. Философия движения за свободу программ подробно рассказана на www.gnu.org.

[policy] FTP-архив проекта Дебьян, каталог с документацией и ftp.debian.org/doc/.

[deb-manifesto] Манифест Дебьян, написанный Яном Мёрдоком в 1994г., ftp.debian.org/doc/debian-manifesto.

[SPI] Software for Public Interest Inc. www.spi-inc.org.

[debian.org] Официальный сайт проекта Дебьян, www.debian.org.

[maint-guide] Раздел документация на официальном сайте, www.debian.org/doc/maint-guide, руководство разработчика, имеется русский перевод.

[BTS] Bug Tracking System www.debian.org/Bugs.

[lists] Архив списков рассылки, подписка, статистика, lists.debian.org.

[anarchy] Петя Новодворский, Вартан Хачатуров, "Конституционная анархия Debian", доклад на рабочей встрече "Свободное программное обеспечение".

[potato-count] Jesus M. GonzАlez-Barahona и др., Исследование количественных показателей дистрибутива Debian Potato v2.2, http://people.debian.org/~jgb/debian-counting/.

[mirror.deb-src] Файл конфигурации программы mirror v2.9, настроенный для копирования исходного кода всех пакетов из архива Дебьян. mirror.deb-src

[этюд-о] Олег П. Филон, статья "Этюд о героях невидимого фронта"

[кризис ПО] Олег П. Филон, статья "Кризис в программном обеспечении и способы его преодоления"

Олег Филон, Дм. Федорович, Ал-др Качанов Статьи Олега Филона Статьи Олега Филона Литературная страница Дм. Федоровича Литературная страница Дм. Федоровича дизайн А. Качанова дизайн А. Качанова Статьи Олега Филона