Пользователи без достаточного опыта работы в системе Linux часто неправильно понимают концепцию системы Linux и ожидают от неё того, что она не может дать. Для того, чтобы эффективно использовать систему, важно понять философию и принцип построения системы Linux. Мы начнём с описания того принципа, по которому система Linux не построена.
В компаниях, разрабатывающих коммерческие программы для системы UNIX, на всем протяжении разработки системы соблюдается строгая методика обеспечения качества. В эту методику входят системы контроля за исходными текстами, системы контроля за изменениями системы, методики ведения документации, и методики, по которым сообщаются и исправляются ошибки. Разработчики не могут, руководствуясь внезапно появившейся у них идеей, добавить новые возможности в систему или изменить её ключевые разделы. Изменения должны быть обоснованы сообщением об ошибке, и сообщение об изменениях должно быть занесено в специальную систему контроля исходного текста, так что при необходимости сделанные изменения могут быть отменены. Каждому разработчику поручаются одна или несколько частей разрабатываемой системы, и только он может изменять эти разделы системы, пока эти разделы находятся у него в разработке, и до тех пор, пока они не будут отмечены как готовые.
В таких организациях имеется специальный организационно оформленный отдел обеспечения качества. Этот отдел производит строгое тестирование каждой новой версии системы и сообщает о всех замеченных ошибках. Выявленные ошибки исправляются разработчиками. Перед выходом очередной версии системы обычно требуется, чтобы определённый процент ошибок был исправлен, и что система как целое удовлетворяет некоторым конкретным критериям. Для этого используются сложные системы статистического анализа.
Вполне понятно, что компании-производителю программного обеспечения требуется оценивать степень готовности очередной версии программы к отправке на тиражирование. Часто желательно, чтобы эта оценка была количественной. Поэтому компания занимается сбором статистической информации о производительности операционных систем. Разработка коммерческой операционной системы семейства UNIX — это большой коммерческий проект, часто большой настолько, что в его рамках нанимаются сотни, если не тысячи, программистов, испытателей программного обеспечения, специалистов по написанию документации и административного персонала. Разумеется, нет двух похожих компаний, выпускающих коммерческие операционные системы семейства UNIX, но все они укладываются в описанную выше схему.
Схема, по которой создавалась операционная система Linux, не имеет ничего общего с моделью, описанной выше: здесь нет организованного упорядоченного развития, системы контроля исходных текстов, структурированной системы фиксации ошибок и статистической системы контроля качества. Linux является операционной системой, созданной хакерами, и возможно навсегда останется такой. Заметим, что словом хакер в данной книге обозначается страстно увлечённый своим делом программист, который испытывает радость от работы с компьютерами и с помощью этих компьютеров делает интересные вещи. Это — первоначальное определение слова хакер; оно отличается от того смысла, который в него стали вкладывать в последнее время: нарушитель компьютерного законодательства или программист, не признающий законов.
Не существует какой-либо организации, которая была бы ответственна за создание и развитие системы Linux. Любой программист с достаточными умениями и навыками имеет возможность участвовать в развитии и исправлении ошибок ядра системы, переносить новое программное обеспечение на другие платформы, писать документацию и помогать неопытным пользователям. Большей частью сообщество создателей системы Linux общается между собой с помощью списков рассылки и телеконференций Usenet. В процессе создания системы возникло несколько соглашений. Если, например, какой-нибудь программист хочет, чтобы его код был включена в "официальное" ядро системы, он отправляет свой код Линусу Торвальдсу. Линус Торвальдс тестирует этот код, и если новый код не противоречит общему дизайну системы и не нарушает работу других частей системы, то он включается в ядро.
При разработке системы использовался открытый функционально-ориентированный подход. В последнее время количество новых функций и существенных изменений, вносимых в систему, уменьшилось, и общим правилом стало, что новая версия ядра выпускается один раз в несколько недель. Разумеется, длительность перерывов между выпусками новых версий — величина не постоянная. Среди факторов, влияющих на выпуск очередной версии — число исправленных ошибок, сообщения от пользователей, испытывающих предварительные версии системы, и, наконец, время, которое имел для сна за эти недели сам Линус Торвальдс.
Не лишним здесь будет сказать, что перед выпуском новой версии не все ошибки удаётся исправить и не все проблемы решить. Новая версия считается стабильной и выпускается сразу, как только создаётся впечатление, что в ней нет критических или исправленных ранее ошибок. Идея, которая движет создателями системы Linux, состоит не в том, чтобы создать совершенную программу, в которой нет ошибок, а скорее в том, чтобы создать свободную реализацию операционной системы семейства UNIX. Система Linux предназначена больше для разработчиков системы, чем для кого-либо ещё.
Если программист написал некоторое приложение или программу, которая реализует какую-либо новую возможность, он обычно распространяет её в так называемой альфа-версии, т. е. в пробной версии. Эта версия предназначается для тех отважных пользователей, которые готовы искать ошибки в первоначальном варианте программы. Поскольку общение в сообществе разработчиков системы Linux в основном происходит через Интернет, программы альфа-версии обычно выставляются на один или несколько FTP-сайтов, посвящённых системе Linux. Кроме того, в одну из телеконференций Usenet, посвящённых системе Linux, посылается сообщение о том, как получить новую программу и как её испытывать. Пользователи, которые переписывают и испытывают альфа-версии новых программ, могут впоследствии направлять по электронной почте результаты испытаний, советы по исправлению ошибок и вопросы автору.
После того, как первоначальные ошибки исправлены, программе присваивается бета-версия. В бета-версии программа обычно считается стабильной, но не полной. Программа в бета-версии работает, но у неё могут быть реализованы не все функции. Программа может также перейти непосредственно в конечное состояние, в котором она будет считаться полной и готовой к использованию.
Следует иметь в виду, что сказанное выше является всего лишь соглашениями, а не правилами. Некоторые программисты настолько уверены в корректности написанных ими программ, что они считают необязательным для себя выпускать альфа- или бета-версии. Подобные решения всегда принимаются программистом, который пишет данную программу.
На первый взгляд может показаться удивительным, что такой неупорядоченной системе добровольных программистов и испытателей программного обеспечения удаётся создать законченную операционную систему семейства UNIX. Однако, как оказывается, здесь мы имеем дело с одним из наиболее эффективных методов создания программного обеспечения с очень сильной мотивацией участников. Все ядро системы Linux написано абсолютно с нуля. При написании кода не использовались никакие источники, защищённые авторскими правами. Перенесение всевозможного свободного программного обеспечения под Linux — огромная задача, требующая колоссальных усилий: создаются и переносятся библиотеки, конструируются файловые системы, пишутся драйверы для многих популярных видов устройств — и все это делается на абсолютно добровольных началах.
Операционная система Linux обычно распространяется в виде дистрибутивов — наборов своеобразно упакованных программ, которые вместе составляют полную систему. Для большинства пользователей будет очень трудно выстроить полную систему с нуля, начиная с ядра, добавляя к нему утилиты и устанавливая все необходимое программное обеспечение вручную. Вместо этого существуют многочисленные дистрибутивы программного обеспечения, которые включают в себя все необходимое для того, чтобы установить и использовать полную систему. Не существует единственного стандартного дистрибутива — есть несколько дистрибутивов, и каждый имеет свои преимущества и недостатки.