Этюд о героях невидимого фронта

Copyright(С) Олег П. Филон
канун 2000, Гомель, BY
Oleg.Philon@mail.ee
см. также статью Кризис в программном обеспечении и способы его преодоления

Виртуальный мир полон реальных героев. Имена некоторых из них получили заслуженное признание и известны далеко за пределами виртуального мира Сети. Скажу даже больше: если вам ничего не говорят имена Ричарда Столмена, Линуса Торвальдса или Эрика Реймонда - в вашем компьютерном образовании серьезный пробел и вы пропустили первые серии захватывающего фантастического триллера на компьютерную тему. Так что хотя бы вкратце содержание предыдущих серий.

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

Любознательный студент-первокурсник в заснеженной Финляндии на другом конце земного шара публикует в Сети Интернет крошечную программку, которая начинает стремительно расти. Вокруг этого проекта под названием ОС Линукс объединяют свои усилия тысячи добровольцев и он постепенно проникает на миллионы компьютеров по всему миру.

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

Если же говорить серьезно, то до полной победы пока далеко и нам еще предстоит увидеть много драматических сражений и при желании в них поучаствовать. Но уже сейчас нужно назвать имена героев, бескорыстно отдающих свой труд и свое вдохновение всем, кто использует открытые программы из проекта GNU, в том числе и саму ОС Линукс. Таких программ уже многие тысячи и у каждой из них множество авторов и соавторов, так что полный список составил бы десятки тысяч человек. Этому списку черед еще придет, а мы пока порассуждаем о том, что же заставляет людей становиться такими альтруистами.

Ричард Столмен в своем Манифесте GNU описывает причины, почему он раздает свои программы людям и надеется, что найдется много программистов, которые последуют его примеру. На первых порах его борьба была действительно трудна. Первые версии программ из проекта GNU были по сегодняшним меркам любительскими, многие из них пришлось писать наново, с нуля, общение с единомышленниками было затруднено - Internet еще не получил широкого распространения. Пришлось также доказывать, почему нужно использовать именно лицензию GNU GPL. Только сейчас, спустя много лет и наблюдая триумф свободных программ, очевидна важность этой лицензии. Она является гарантией, что программа останется открытой навсегда, и налагает обязательство на каждого, кто распространяет подобную программу: всегда публиковать исходный код, в том числе и сделанных изменений. Эта лицензия также гарантирует авторство разработчикам, так что мы сможем и через десятки лет узнать имена каждого, кто сделал вклад в данную конкретную программу.

Подробный анализ мотивов, движущих авторами свободных программ, сделал Эрик С. Реймонд в своей статье "The Cathedral and the Bazaar". Анализирую собственный опыт открытой разработки и феноменальный успех проекта Линуса, Эрик не только показал жизнеспособность открытого метода разработки программ, но и убедил некоторых известных производителей ПО попробовать этот метод в своей практике. К его глубинному анализу изнутри проекта, простирающемуся от цитат из классика анархизма Петра Кропоткина и вплоть до сравнения с саморегулирующимися биологическими и рыночными системами, осмелюсь добавить одно замечание со стороны.

В полном соответствии с лицензией GNU и сложившейся традицией каждый фрагмент кода сохраняет имя автора и его комментарии. В случае ядра Линукс это привело к любопытной ситуации, когда внимательный пользователь просканировал (в смысле grep) мегабайты кода и поразился обилию т.н. "нехороших слов" в комментариях. Была даже опасность, что исходники ядра кое-где могут запретить из цензурных соображений. Так что если вы талантливый программист, увековечить свое имя на миллионах компьютеров можно с такой же легкостью, как и гвоздем на стене.

Имена авторов, особенно в больших проектах с сотнями разработчиков, иногда помещают в файле под именем CREDITS. Например, в исходниках ядра linux-2.2.13 в этом файле список из 283 человек. Каждый программист, сделавший значительный вклад в проект, имеет запись в этом файле наподобие этой:

Это пример текстовой базы данных с полями из обычных строк, а первые два символа в строке задают имя поля - N: для имени человека, W: веб-страничка, E: электронный адрес, D: описание сделанного, S: почтовый адрес. Такие текстовые базы данных вместе с несколькими простыми утилитами для их обработки позволяют легко и быстро извлечь нужную информацию. Например, чтобы подсчитать, сколько человек упомянуто в списке CREDITS, наберем из командной строки:

... $ grep "^N:" CREDITS|wc -l

Команда grep сканирует файл в поиске указанного контекста, и передает результат через т.н. конвейер следующей команде wc, которая подсчитывает количество строк, слов и знаков (ключ -l показывает только строки). Если вы не знакомы с такими текстовыми утилитами, срочно разыщите файл под именем textutils_2.0.tar.gz и попытайтесь установить их в своей системе. Если вы можете выполнять команды на Юникс машине, то эти утилиты уже обязаны там быть. С помощью этих утилит мы и попробуем исполнить наш этюд.

Мы составим список самых результативных сопроводителей (maintainer) из дистрибутива Debian. Этот проект основал в 1994г. Ян Мэрдок (Ian Murdock), и он оказался важной и необходимой частью движения GNU. Сам Ричард Столмен одобрил и назвал его официльным дистрибутивом начатого им проекта GNU. Особенностями Debian являются открытая разработка, несколько поддерживаемых вычислительных платформ, огромное количество программ, высокое качество и профессионализм. Над проектом Debian трудятся почти пол-тысячи разработчиков, кооперирующихся через Сеть. За много лет отработана уникальная система "дебианизации" программ из интернет и раскинута широкая сеть зеркал архива. На основе Debian построен дистрибутив Corel и несколько других.

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

... $ for i in main non-free contrib;do \
wget ftp://ftp.debian.org/debian/dists/potato/$i/binary-i386/Packages.gz;\
gzip -cd Packages.gz>>debian-packages;rm Packages.gz;done

Для полноты картины сделаем то же самое и для архива non-us.debian.org . Этот архив расположен в Голландии и хранит програмы, которые из-за экспортных ограничений, существующих в США, нельзя держать на основном сайте. Хотя таких программ немного, в некоторых случаях они могут оказаться весьма важными, т.к. обеспечивают шифрование и защиту информации.

... $ for i in main non-free contrib;do \
wget ftp://non-us.debian.org/debian-non-US/dists/potato/non-US/$i/binary-i386/Packages.gz;\
gzip -cd Packages.gz>>debian-packages;rm Packages.gz;done

Эти команды для удобства разбиты на 3 строки, но так же работает и одна длинная строка. Полученный файл debian-packages представляет собой текстовую базу данных, имеющую следующие поля:

Package: textutils
Version: 2.0-2
Priority: required
Section: base
Essential: yes
Maintainer: Galen Hazelwood <galenh@debian.org>
Pre-Depends: libc6 (>= 2.1)
Conflicts: ptx
Provides: ptx
Replaces: bsdmainutils (<= 4.5.2), ptx
Architecture: i386
Filename: dists/unstable/main/binary-i386/base/textutils_2.0-2.deb
Size: 498524
MD5sum: 0aedf1cd8f4dd591ab66008db45aa431
Description: The GNU text file processing utilities.
 The utilities: cat cksum comm csplit cut expand fmt fold head join
 nl od paste pr ptx sort split sum tac tail tr tsort unexpand uniq wc.
installed-size: 1334

Названия полей говорят сами за себя. Добавлю лишь, что весь архив разбит сначала на 2 версии - стабильную и экспериментальную. Эти версии дистрибутивов имеют соответственно имена slink и potato. Затем каждый дистрибутив разбит на 3 секции : main, non-free и contrib. Первая и самая большая из них полностью удовлетворяет требованиям проекта Debian и его политике. Программы в секциях non-free и contrib имеют некоторые ограничения на распространение или как-то иначе не выдерживают строгих требований ревнителей чистоты Debian. Отдельно хранятся исходники, общие для всех типов процессоров, и откомпилированные пакеты для нескольких платформ. Далее каждая секция разбивается на 26 каталогов, и каждый пакет хранится в каталоге в соответствии со своим назначением.

Теперь, когда огромный список программ получен и есть некоторое представление об устройстве архива, обратим внимание на поле "Maintainer:". Там стоит имя человека, который является посредником между автором программы и нами, пользователями. Этот посредник встраивает данную конкретную программу в сложную систему, исправляет найденные ошибки, отслеживает быстро развивающиеся версии ядра, библиотек, компиляторов, интерпретаторов и проч. Кроме этого, в обязанность сопроводителя входит затыкание обнаруженых дыр в защите системы и гарантия собственной цифровой подписью целостности исходного кода и откомпилированного пакета. Эти люди - наши благодетели. СтОит только научиться пользоваться их опытом, и на вас будет работать уникальная команда экспертов, собрать которую можно только в Сети.

Подсчитаем количество пакетов в дистибутиве potato, который, кстати, в начале 2000 года должен перейти из состояния unstable в состояние frozen, а затем станет следующей стабильной версией.

... $ grep "^Package: " debian-packages|wc -l

У меня получилось 4485, но у вас может быть и больше. По количеству программ дебьяновский архив превосходит даже известные коллекции программ, куда помещают все подряд без разбора. Теперь таким же образом выделим список сопроводителей, попутно еще одной текстовой утилитой cut обрежем первые 12 символов, общие для всех строк:

... $ grep "^Maintainer:" debian-packages|cut -c 13-|less

В списке много повторяющихся фамилий - это значит, что человек сопровождает несколько пакетов. Попробуем узнать, кто же из них чемпион? Сделать это нам помогут еще пара утилит: sort и uniq. Вторая из них может в отсортированном списке подсчитать количество совпадающих строк. Таким образом

... $ grep "^Maintainer:" debian-packages|cut -c 13-|sort|uniq -c|less

уже выдает нам интереснейший список. Но внимательно на него посмотрев, обнаруживаем, что у некоторых сопроводителей по нескольку e-mail адресов, так что наш список не совсем точен. Уберем эти адреса - нас интересуют только люди. Воспользуемся потоковым редактором sed - программкой, выполняющей ряд заданных команд редактирования для каждой строки.

... $ grep "^Maintainer:" debian-packages|cut -c 13-|sed 's/ *<.*>//'\
> |sort|uniq -c|less

Что-то команда стала слишком длинная. Давайте переименуем файл debian-packages в более короткое имя pks, или еще лучше - сделаем на него символическую ссылку (symbolic link):

... $ ln -s debian-packages pks

Можно было бы, конечно, сохранить промежуточный результат в файле, но мы ведь почти у цели - рейтинг-листа сопроводителей проекта Debian, подлинных героев невидимого фронта.

$ grep "^Maintainer:" pks|cut -c 13-|sed 's/ *<.*>//'|sort|uniq -c|sort -k1nr -k2f|less

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

$ awk -F" <" '/^Maintainer:/{print $1}' pks|cut -c 13-|sort|uniq -c|sort -k1nr -k2f|head -n 20
     87	Joey Hess
     80	Herbert Xu
     66	Adrian Bridgett
     62	James LewisMoss
     59	Adam Heath
     56	Turbo Fredriksson
     53	Matthias Klose
     52	Takuo KITAME
     51	Branden Robinson
     51	Gergely Madarasz
     51	Michael Alan Dorman
     47	Debian QA Group
     44	David Engel
     41	Charles Briscoe-Smith
     39	Santiago Vila
     38	Andrea Fanfani
     37	Torsten Landschoff
     36	Josip Rodin
     36	Martin Mitchell
     35	Debian GCC maintainers

В этот список попали два коллективных сопроводителя: Debian QA Group с 47 пакетами и GCC maintainers с 35. Первый нечто вроде группы контроля качества (Quality Assurance), а вторая группа следит за GNU Compiler Collection - именно так теперь расшифровывается GCC. Тем удивительнее производительность некоторых сопроводителей, обошедших целые коллективы. А долговременный чемпион Joey Hess сопровождает также и весь мастер-архив проекта Debian, и является автором множества скриптов, автоматизирующих дебианизацию новых программ.

Если у вас возникли вопросы о возможностях использованных утилит и программ, можете обратиться к подробнейшей документации, имеющейся в исходниках и установленной on-line на многих Юникс-системах. Например :

... $ info -f textutils

Так же подробно описаны sed и gawk - GNU вариант языка запросов awk. К сожалению, хотя дистрибутив Debian содержит документацию на многих языках, русского среди них нет. Море полезной информации на эту тему имеется на сервере http://www.citforum.ru/operating_systems/unix.html

В заключение, воздав хвалу таланту и бескорыстию авторов открытых программ, хочу обратить внимание на один тревожный факт - очень редко встречающиеся фамилии из бывшего СССР. Вот некоторые имена, попавшие в почетные списки в крупных проектах: Олег Дрокин из Евпатории, Юрий Пер из Тулы в списке 283 из файла CREDITS ядра версии 2.2.13. Алексей Кузнецов (Москва?) в списке действующих MAINTAINERS этой же версии. Упоминаются как авторы правок к ядру также Boris Tobotras, Sergey Smitienko, Savochkin Andrey Vladimirovich. Точно знаю, что под именем Solar Designer также скрывается наш человек. В проекте Debian среди почти полутысячи сопроводителей отыскал похожие на русские имена: Dima Barsky, Alexander Yukhimets, Igor Grobman. Вспоминаю еще Андрея Чернова, известного человека из мира FreeBSD. Даже если я не упомянул или не нашел многих наших, уже могу утверждать - ex-СССР представлен среди лидеров открытого программирования непропорционально мало. Это повод для беспокойства более серьезного, чем в случае спортивных поражений. Отставание в программировании может иметь далеко идущие последствия для экономики наших стран и для их информационной безопасности. Но это тема другой статьи.