Unix: Сага о POSIX или Введение в POSIX'ивизм.
Книга о работе в POSIX-совместимых системах разного рода. Предназначена для пользователей (в том числе и начинающих).
Содержание
- Преамбула
- Открытость, свобода и халява
- Кое-что об ОС, Unix'ах, Linux'ах и BSD
- Вопросы истории POSIX'ивизма
- Вечные истины POSIX-систем
- Истина первая, или почему Linux не Windows
- Истина вторая, или как научиться плавать
- Истина третья, или три кита POSIX'ивизма
- Истина четвертая: терминалы, режимы, интерфейсы
- Истина пятая, или in command veritas
- Истина шестая: рецепты и принципы
- Истина седьмая, или самая главная
На протяжении предшествующих разделов то и дело упоминались названия различных операционных систем - Linux, Free- и прочие BSD, а также некоторые другие. А внимательный читатель компьютерной прессы время от времени (правда, последнее время - все реже) встречается, с одной стороны, со звучными заграничными именами типа Solaris или UnixWare, с другой же - с неудобопонятными аббревиатурами вроде AIX или HP-UX. Все вышепоименованные ОС имеют ряд общих черт, позволяющих объединить их в единое семейство. Имена ему суть многи - величают эти системы и Unix'ами, и юниксоидами, и Unix-подобными ОС. Хотя наиболее строгий титул им всем будет - POSIX-совместимые операционные системы. Откуда же они все взялись? Об этом и пойдет нынче разговор.
Совсем-совсем недавно, лет пять назад (а конкретно - 1 января 2000 г.) все прогрессивное человечество широко отметило (в узком кругу) тридцатилетний юбилей первозданного Unix'а. Разумеется, это не значит, что операционная система Unix (а некогда это действительно была конкретная операционная система) волшебным образом возникла в этот день, как Афина Паллада из головы Зевса. Создание ОС - процесс, несколько длящийся во времени, и потому паспортную дату рождения ее установить затруднительно. Просто системные часы всех Unix-машин во всем мире отсчитывают свое время (в секундах) с той самой знаменательной даты. И это - одно из многочисленных соглашений, о которых пойдет речь в этой заметке (и которые имеют непосредственное отношение к нашему сюжету).
Вообще говоря, о первой пятилетке истории Unix (1969-1974 гг.) написано немало, поэтому ограничусь основными фактами. Началось все с того, что Bell Labs (в то время подразделение корпорации AT&T) совместно с General Electric и Массачуссетским технологическим институтом разрабатывала очень прогрессивную по тем временам ОС под названием Multics, многопользовательскую и многозадачную, как легко догадаться из названия. Причем - безуспешно, на причинах чего здесь останавливаться не будем. Однако разработка эта имела некое побочное следствие: один из участников проекта, Кен Томпсон, написал под нее игру Space Travel.
В 1969 г. проект Multics был закрыт, и играть Кену стало не на чем и не под чем. Благо, в закромах Bell Labs обнаружилась завалящая машина PDP-7, которая и была окучена под игровые цели. Правда, игра Кена под родной ее операционкой не работала, так что заодно пришлось написать для нее и ОС. Созданная на базе Multics, она получила название Unics - ибо, в отличие от прототипа, пользователь у нее первоначально был один (позднее к Кену в этом качестве присоединился Денис Ритчи, в честь чего и название трансформировалось в Unix).
На дальнейшую судьбу Unix огромное влияние оказали юридические коллизии текущего момента. Еще до создания этой системы корпорация AT&T подверглась антимонопольному преследованию (подобно Microsoft ныне), в результате чего претерпела поражение в правах - на деятельность ее был наложен ряд ограничений. В частности, она не имела права торговать программными продуктами, в число коих попадала и новорожденная Unix. Так что последняя на протяжении первых 5 лет своего сущестовования вела исключительно внутриутробное существование в лоне породившей ее компании.
Правда, за это время Unix сформировалась как концептуальная целостность. Это были: понятие файла как универсального интерфейса доступа ко всему на свете, командный интерпретатор (shell) как столь же универсальное средство взаимодействия пользователя с системой и набор запускаемых из него монофункциональных утилит, комбинации которых позволяли решать весьма сложные задачи. Получила Unix и свою файловую систему, очень простую (в частности, в ней отсутствовало представление о типах файлов - все они трактовались просто как последовательности байтов) и, одновременно, очень по тем временам эффективную. Главное же - система была почти целиком написана на компилируемом языке высокого уровня - специально под нее созданном Си, - что создавало предпосылки для ее переноса на почти любые аппаратные платформы. Тем не менее, до настоящего Unix, каким мы его представляем нынче, было еще далеко.
Все нововведения в первозданном Unix находили отражение в его титулатуре. Сначала они знаменовали смену версий - было их чуть ли не 10. Затем количество перешло в качество, и версии стали системами - System III, скажем, потом System V, которой, кстати, суждено было стать последней. Дальнейшие модификации в ее недрах получали имена реализаций - System V Release 3, System V Release 4. Последняя также оказалась знаковой - она (под идеограммой SVR4) легла в основу большинства современных коммерческих Unix. Впрочем, я существенно забежал вперед.
Следует помнить, что все это происходило в бездушном и бездуховном мире чистогана, где, как известно, все покупается и все продается. А вот продавать-то Unix как раз было нельзя. Однако - не пропадать же добру, созданному как бы и самопроизвольно, но - на проприетарном оборудовании. И компания AT&T, юридический владелец Unix, начиная с 1974 г., стал передавать исходные ее тексты в университеты (преимущественно Америки, но также и некоторых других стран) и прочие учреждения - "в образовательных целях", как задумчиво пишут в источниках.
Это не было свободным распространением в том смысле, который потом вложили в это понятие апологеты движения Open Sources, начиная с Ричарда Столлмена и кончая героями Free Software Foundations. Правда, Unix (вернее, в то время - не более, чем ее прототип) передавалась целиком в исходных текстах с правом их изучения, модификации, доработки и прочего потрошения. Однако для производства таких действий требовалось обладание лицензией на исходный код Unix. Лицензия же могла быть предоставлена владельцем (то есть AT&T) вместе с самой системой, но - уже за деньги (хотя, как пишут, и символические).
Главное же отличие от принципов Open Sources заключалось в том, что условия этой самой лицензии не допускали дальнейшего свободного распространения ни системы целиком, ни каких-либо ее компонентов, содержащих исходный код Unix. "Что, собственно, и создало сюжет". Вернее, интригу всего дальнейшего, почти детективного, сюжета...
Однако до юридических коллизий было еще далеко. А пока университеты с радостью приобщались к новой операционной системе, в которой были реализованы все передовые идеи того времени. И к тому же в принципе способной функционировать практически на всем спектре тогдашнего оборудования. Напомню, что речь идет о середине 70-х годов прошлого века - Стив Джобс еще не помышлял о продаже калькулятора и использовал родительский гараж по прямому назначению, а Билл Гейтс не освободил еще мир от засилья CP/M.
Одним из первых учреждений американского наробраза, получившего доступ к исходникам Unix, оказался Университет Беркли (штат Калифорния) - учреждение, известное всем, интересовавшимся историей т.н. точных наук, давшее миру не одно поколение достойнейших их представителей. Именно сюда Unix "вписался с точностью патрона, досланного в патронник" (Олег Куваев). И здесь с лихвой выполнил свои "научно-образовательные цели"...
В Беркли, в условиях открытого общения профессиональных специалистов в области зарождавшихся Computer Sciences, система Unix медленно, но верно превращалась именно в то, чем она стала ныне. И в значительной мере - именно усилиями трудящихся из университета, объединенных в Computer System Research Group (CSRG), финансировавшуюся в сугубо мирных целях, как не трудно догадаться, Министерством обороны США.
Что же принципиально нового привнесли берклианцы в первозданный Unix? Во-первых, конечно же, интеграцию в ядро системы протокола TCP/IP. Того самого, на котором базируется весь сегодняшний Интернет. Собственно, ради этого американские компьютерщики в штатском и финансировали работы Университета Беркли - ведь первоначально Интернет задумывался как отказоустойчивая система правительственной связи на случай советского ядерного удара. Однако это - совсем отдельная история...
Следующим принципиальным вкладом Беркли была реализация файловой системы. Поскольку именно это принципиально важно для нас, простых пользователей персоналок, остановлюсь на этом вопросе подробнее.
Извинение: возможно, сказанное выше покажется не вполне понятным начинающему пользователю, скажем, Linux. Надеюсь, что все недоразумения разрешатся при дальнейшем чтении моего сочинения, на протяжении которого к вопросам устройства файлов и файловых систем придется возвращаться неоднократно.
Я уже говорил, что основные характеристики файловой системы были сформированы уже в первозданном Unix. Эта файловая система (получившая впоследствии название s5fs, то есть файловой системы System V) базировалась на трех китах - понятиях суперблока, таблицы так называемых inodes, и области блоков данных (есть еще и четвертый "китенок" - загрузочный блок, однако это для нас сейчас не существенно).
Суперблок - это часть файловой системы, описывающая ее в целом: положение на физическом носителе, размер минимального кванта информации (логического блока) и их суммарное количество, число свободных и занятых блоков, и так. далее.
Таблица inodes (индексных, или информационных, узлов - однако лучше сохранить этот термин без перевода, как своего рода идеограмму) - это метаданные (то есть данные о данных) файлов файловой системы. Для каждого файла она содержит: его уникальный идентификатор, по которому он находится системой, число ссылок на него (фигурально говоря, количество имен файла - как будет сказано в соответствующем разделе, любой файл может иметь несколько имен), размер, т.н. атрибуты файла - принадлежности (владельца файла, группы, к которой он принадлежит, и прочих), доступа (права чтения, исполнения, изменения), времени (последнего обращения, изменения данных и метаданных), и еще некоторые.
Адреса блоков данных файла, то есть собственно физического расположения его контента на диске, также описываются в таблице inodes. Ну а сами блоки данных (то есть полезная для пользователя информация), как легко догадаться, и составляют наполнение одноименной области.
В устройство файловой системы s5fs изначально были заложены три существенных ограничения с точки зрения надежности, экономичности и быстродействия. Первое - то, что суперблок ее имелся в единственном экземпляре, и его утрата (например, вследствие физического повреждения) автоматически влекла недоступность всех данных.
Второе - s5fs была образована некими квантами информации - логическими блоками, имевшими размер от 512 (размер физического дискового блока) до 2048 байт. Очевидно, что увеличение размера блока вело к повышению быстродействия дисковых операций. Однако не менее ясно, что при этом дисковое пространство расходовалось неэффективно: ведь любой файл, сколь мал бы он ни был (а в Unix количество очень маленьких файлов весьма велико), занимал логический блок целиком.
Третье ограничение, быстродействия, сказалось позднее, когда "винчестеры стали большими". Легко сообразить, что единственная таблица inodes при непрерывности области данных на разделах большого объема требовала значительных перемещений считывающих головок диска - ведь каждая операция чтения файла или его записи требовала обращения сначала к метаданным файла, а потом - к его данным.
Это - что касается физики хранения данных. Логически же файловая система Unix имела древовидную (или иерархическую) структуру, основанную на разделении каталогов и всех прочих файлов. Каталоги образовывали как-бы скелет файловой иерархии и содержали только идентификаторы файлов и их имена - это и были те самые ссылки, о которых говорилось чуть выше. Причем, вследствие изначально принятого формата каталога, длина имени файла (как это ни покажется парадоксальным пользователям нынешних Linux или BSD) ограничивалась 14 символами. Ведь каталог - это, в сущности, база данных для идентификаторов файлов и их имен, состоящая, как и любая БД, из записей и полей. Так вот, каждая каталожная запись в s5fs имела фиксированную длину в 16 байт, из которых два первых отводились под идентификатор, так что на имя этих байт оставалось только 14.
Разработки Университета Беркли сняли многие ограничения как физики, так и логики s5fs. Во-первых, единое пространство файловой системы было разделено на части, именовавшиеся группами цилиндров, каждая из которых имела копию суперблока, самостоятельную таблицу inodes и область данных. Это давало большой прирост в быстродействии файловых операций за счет минимизации перемещения дисковых головок. Плюс к тому дублирование критически важной части файловой системы - суперблока - весьма способствовало надежности.
Далее, было введено понятие внутренней фрагментации. То есть каждый логический блок файловой системы разделялся на части (фрагменты), которые могли адресоваться независимо. И, соответственно, если файл имел размер менее логического блока - то реально он занимал не его целиком, а только один (или несколько) таких фрагментов, остальные же сохранялись свободными и могли быть использованы для других целей. Но дисковые операции все равно осуществлялись поблочно, так что на их быстродействии фрагментация почти не сказывалась.
Все это привело к потере совместимости новой файловой системы с файловой системой изначального Unix. И потому (снявши голову - плачут ли по волосам?) разработчики из Беркли решились на еще один радикальны шаг - изменение формата каталогов. Каждая запись в них разделилась на постоянную часть - идентификатор, размер переменной части и размер имени файла, - и переменную, содержащую собственно имя файла. В результате максимально возможная длина последнего возросла до 256 символов, что с точки зрения здравого смысла можно считать практически безграничным - вряд ли кому придет в голову изобретать имя длинее трех строк стандартной текстовой консоли.
Утрата совместимости в формате каталогов, казалось бы, должна была стать препятствием для использования программ - ведь подавляющее большинство их уже тогда создавалось под абстрактный Unix, а трудно представить себе пользовательское приложение или системную утилиту, не нуждающуюся в считывании имен файлов. Однако в Беркли было предусмотрено и это - путем описания специальных процедур открытия и чтения каталогов, не зависимо от формата последних. Что вовсю заиграло позднее - когда файловых систем в Unix стало множество.
Новая файловая система получила имя FFS - Fast File System, что подчеркивало ее быстродействие относительно исходной s5fs. Я столь подробно остановился на ее отличиях от прототипа по двум причинам. Во-первых, из-за важности их для пользователей. И во-вторых - потому что реализованные в FFS принципы разделения файловой системы и фрагментации ее блоков были ассимилированы во всех последующих файловых системах, применяемых ныне в любых разновидностях к Unix. К этим принципам восходят и группы блоков в файловой системе Linux (ext2fs), и экстенты (extents) JFS и, особенно, allocations group в XFS, выступающие здесь уже как почти самостоятельные файловые субсистемы.
И все потому, что Университет Беркли, представляя собой обычное научное сообщество, отнюдь не делал секрета из своих разработок. Распространяя их на условиях, общепринятых в академических кругах всех времен и народов. То есть все эти результаты публиковались в простых научных журналах и были доступны для воспроизведения любым желающим (и, что немаловажно, можущим). Позднее такие условия распространения софта, с одной стороны, легли в основу лицензии BSD. А с другой, Ричард Столлмен, в юности не чуждый академической науке, опираясь на них, изобрел очень похожий велосипед, и назвал его GPL (General Public License).
Распространялась и сама берклианская разновидность Unix как программный продукт. Группа CSRG, начиная с 1976 г., распространяла свои достижения на магнитных лентах под названием Berkely Software Distribution, что, с указанием номера версии, и дало в дальнейшем имя системе. Это было первичное понимание аббревиатуры BSD, которое не следует путать с BSDi - Berkely Software Development, Inc (или Berkeley Software Design, Inc, мне попадались обе расшифровки этой аббревиатуры) - фирмой, выпускающей коммерческий клон BSD-систем, называемый, строго говоря, BSD/386 (хотя в обиходе за этой системой закрепилось то же имя - BSDi).
Первоначально (под именем 2BSD и по цене 50 американских рублей) распространялся только пакет собственно берклианских наработок, включающий, в частности, командную облочку C-Shell и культовый редактор юниксоидов vi. Однако, начиная с 3BSD, берклианские ленты включали уже и модернизированную Unix-систему. Особенно обильные побеги дала ее 4-я ветка - 4.0BSD, 4.1BSD с несколькими подвариантами, 4.2BSD, 4.3BSD и, под занавес истории, 4.4BSD.
Наиболее существенным этапом был выпуск в 1982 г. системы 4.2BSD: именно в ней была реализована файловая система FFS, да и большинство прочих специфических особенностей BSD-систем. Не случайно тип раздела FreeBSD по сию пору идентифицируется как раздел 4.2BSD, а до недавнего времени этот же идентификатор имели и разделы Net- и OpenBSD. С этого момента стало реальностью сосуществование двух самостоятельных линий развития Unix - System III/V и BSD Unix.
А системе 4.4BSD, появившейся в 1993 г., была предначертана особая судьба, о чем я расскажу несколько позднее.
Конечно, система Unix развивалась не только в Беркли. Во-первых, не забрасывала свое детище сама AT&T во всех ее проявлениях. Правда, разработка системы плавно перемещалась от Bell Labs иным подразделениям, типа группы поддержки Unix и т.д., однако в мои цели не входит описание истории этой корпорации, и потому названия их я опускаю.
Тем не менее, из недр AT&T (в обощенном понимании этого термина) последовательно выходят System III, System V, System V Release 2 (SVR2) и, наконец, System V Release 3 (SVR3); этой системе, разработанной в 1987 г., суждено было стать последним представителем линии первозданного Unix. Ибо уже System V Release 4 (SVR4), появившаяся в 1989 г., включила в себя множество новшеств из разработки 4BSD - в частности, интеграцию с TCP/IP, поддержку FFS, берклианскую реализацию механизма виртуальной памяти, и многое другое. В частности, легший в последствии в основу стандарта шелл Корна, несмотря на совместимость с первозданным шеллом (Bourne Shell), заимствовал из C-Shell такие вещи, как управление заданиями, историю команд, поддержку псевдонимов и т.д. (впрочем, развитие шеллов - отдельная, и очень увлекательная, история).
Благо, как уже было сказано, берклианские разработки распространялись в соответствие с принципами открытой науки - то есть практически свободно. И если AT&T не всегда заимствовала их на уровне реализаций (то есть непосредственно кода), то идейное их влияние на первозданный Unix было несомненным.
Во-вторых, портируемость Unix оценили производители специфического оборудования - имена им были IBM, Sun, Hewlett-Packard, DEC и еще несколько забытых. Базируясь на SVR3, BSD, позднее - на SVR4, они адаптировали систему под собственные архитектуры, создав такие варианты, как AIX, SunOS, HP-UX, Digital Unix. Все это были коммерческие или, как нынче модно говорить, проприетарные операционки, однако, будучи жестко привязанными к аппаратуре фирм-производителей, в свободной продаже (подобно нынешним Windows) они не присутствовали.
В третьих, чисто софтверные фирмы подняли мутный вал уже чисто коммерческих Unix'ов. Это были, в частности, Interactive Systems и Santa Cruz Operations (косвенный предок скандально прославившейся ныне SCO). Не имея собственных аппаратных платформ, они адаптировали Unix под платформы общераспространенные, коими были в то время сначала PDP-сколько-то, а затем и IBM PC. Кажется, именно SCO Unix стала первой представительницей семейства Unix, портированной на машины с процессором Intel (конкретно - на i386).
Как ни странно, в числе первых на этом поприще отметилась Самая Великая Софтверная фирма всех времен и народов. Ею была создана система XENIX для тех же i386-х машин. По словам видевших ее, это было нечто вроде однопользовательской реализации Unix - как всегда, Microsoft и тут, подобно товарищу Ленину, пошла своим путем...
Наконец, Беркли был не единственным университетом, приобщившимся к миру Unix. Разработки в этом направлении велись в нескольких академических учреждениях США, а также иных стран (например, Франции и Австралии). Однако наибольшую известность стяжала деятельность Университета Карнеги-Меллона, результатом которой явилась микроядерная Unix-совместимая система March. Которая одно время виделась операционной системой будущего - на ней базировались и Digital Unix, и знаменитый NextStep, всерьез поговаривали о использовании ее в разработке OS/2. А Ричард Столлмен положил ядро Mach в основу своего перманентного долгостроя - GNU/Hurd.
Однако главная слава Mach оказалась посмертной. Ибо, во-первых, под ее воздействием Энди Танненбаум написал свою игрушечную систему MINIX, которая вдохновила Линуса Торвальдса на написание Linux. А во-вторых, микроядро Mach нынче составляет сердце MacOS X. Но в рамках описываемых событий это - опять же дела грядущего.
А пока можно было констатировать, что в конце 70-х и в 80-х годах прошлого века Unix развивался в соответствие со знаменитым лозунгом Великого кормчего китайского народа - "Пусть расцветают все цветы!" В итоге, кроме двух, существенно различных, базовых системы - System V и BSD, расцвело не менее дюжины вариантов, в той или иной мере различающихся между собой. Мною были упомянуты далеко не все из них, а лишь те, которые уцелели и поныне. Или - те, о которых мне довелось в свое время хоть что-то прочитать. На самом деле Unix-клонов в те времена было гораздо больше.
Постепенно различия между клонами становились все более значительными. Во-первых, в основе существовавших вариантов Unix лежали разные базовые системы - SVR3, SVR4, 4BSD. Во-вторых, каждый разработчик считал своим долгом либо адаптировать систему под возможности собственной аппаратной платформы, либо просто внести те или иные усовершенствования. А поскольку практически все существовавшие системы были не только проприетарными, но и закрытыми, усовершенствования эти слабо согласовывались между собой. И, в любом случае, реализовывались различным образом.
Это ставило под угрозу один из краеугольных камней Unix-идеологии - портируемость приложений. А традиции писать программы под абстрактный Unix никто не отменял. И начался процесс, который товарищ Мао, назвал бы "борьбой за упорядочивание трех стилей работы". Однако председателю КПК было попроще - в данном случае речь шла не о трех, а едва ли не о тридцати трех стилях работы...
Тем не менее, процесс упорядочивания пошел. Первый шаг в этом направлении резонно было бы сделать основоположнику Unix. И AT&T создала документ, описывающий спецификации, которым должна соответствовать система, претендующая на звание Unix - SVID (System V Interface Definition, то есть определение интерфейса System V). И даже разработала программу, которая проверяла претендента на соответствие этим спецификациям - System V Verification Suite.
Нетрудно было предположить, что в этих спецификациях нашли отражение только те особенности BSD, которые были инкорпорированы в каноническую System V. А ведь BSD была столь же полноводным источником, из которого черпали все производители Unix. Их такое положение дел не очень устроило. И потому было создано несколько организаций, разрабатывающих свои версии стандартов для операционных систем, расширенные по сравнению со SVID. Наибольшее признание из таких рахработок заслужил стандарт POSIX (Portable Operation System Interface based on uniX).
Набор соглашений POSIX был разработан международной организацией под названием IEEE. Термин Portable в названии первоначально означал, что соответствующая POSIX-спецификациям система может быть перенесена (лишь с минимальными модификациями) на любое компьютерное "железо". То есть - на машины с любой архитектурой - ведь тогда ОС Unix-семейства функционировали не только (точнее даже, не столько) на PC. Однако скоро не менее важным оказался и другой аспект этого термина - любая прикладная программа, написанная в соответствии со стандартами POSIX, теоретически может быть перенесена (подчас без всяких переделок) на любую ОС POSIX-совместимого семейства. И нужно отметить - это один из тех редких случаев, когда теоретические ожидания блестяще подтверились практикой.
Стандарты POSIX существуют в виде серии регулярно обновляемых документов (общим числом под два десятка), в которых описываются спецификации отдельных компонентов систем. Среди них:
- POSIX 1003.0 - Руководство по POSIX-совместимым средам Открытых Систем, содержащее сводную информацию о POSIX-стандартам;
- POSIX 1003.1 - Интерфейсы системного уровня и их привязка к языку Си, где описываются обязательные интерфейсы между прикладными программами и операционной системой, в частности - спецификации системных вызовов;
- POSIX 1003.2 - Shell и утилиты; здесь специфицируется стандартная командная оболочка (т.н. POSIX-shell, а также большое количество (около 80) классических Unix-утилит;
- POSIX 1003.3 - Общие методы проверки совместимости с POSIX.
Важно понимать, что стандарты POSIX жестко определяют базовую функциональность систем и приложений. Каковая, ради потери совместимости, и не должна изменяться. В то же время расширению функциональности они отнюдь не препятствуют. Так, любая из предусмотренных для POSIX-систем команда должна иметь определенный набор опций, предназначенных для выполнения базового набора действий. Однако никто не препятствует введению для данной команды дополнительных возможностей, реализуемых через опции, стандартом не предусмотренные. Важно только, чтобы первозданная функциональность команды оставалась неприкосновенной.
Я понятно выразился в предыдущем абзаце? Если не очень, попробую пояснить на паре конкретных примеров. Так, в стандарте POSIX предусмотрена команда split
, предназначенная для разделения текстового файла на отдельные фрагменты - по размеру (в байтах, килобайтах или мегабайтах) или числу строк. Что достигается указанием соответствующих опций, также описанных в стандарте. И именно это команда split
обязана делать в любой системе, претендующей на звание POSIX-совместимой.
И, скажем, реализация команды split
в Linux (вернее, в пакете coreutils
проекта GNU - одном из компонентов Base Linux) выполняет свои обязанности буквально. А вот та же команда во FreeBSD делает все то же, но имеет еще и дополнительную возможность - разбиение текста на фрагменты по шаблонам (например, заголовками вида Глава или Часть). Для чего в ней введена опция -p
(--pattern
), выходящая за рамки стандарта.
Еще более показательный пример расширения заложенных в стандарте возможностей при полном сохранении базовой функциональности, - это командные оболочки.
В стандарте POSIX предусмотрено, что стандартная (пардон за тавтологию) оболочка POSIX-совместимых систем (еще раз прошу прощения) должна носить имя sh
, располагаться в каталоге /bin
корня файловой системы и выполнять совершенно определенный набор действий. Каковой, однако, показался многим разработчикам явно недостаточным, в результате чего были придуманы POSIX-совместимые оболочки bash
и zsh
, умеющие делать все то же, что и POSIX-shell, плюс многое (bash
) или очень многое (zsh
) другое.
Именно на стандартах POSIX в первую очередь и опирался Линус Торвальдс. Однако это уже следующая история.
Как было сказано ранее, Unix в разных его проявлениях получил широкое распространение в университетах всего мира. Более того, он стал основой базового академического образования в области Computer Sciences (и не только - Unix'у кое-где учат и студентов-геологов:-)). И потому возникла необходимость в соответствующих учебных пособиях, каковые и появились во множестве.
Однако обучать операционной системе без самой системы - штука столь же сложная, как и учить плаванию посреди пустыни Кызыл-Кум. Система же Unix (даже в берклианском своем варианте) оставалась отнюдь не общедоступной - а) вследствие ограничений на распространение, б) привязки большинства вариантов к дорогим аппаратным платформам, и в) наконец, просто своей сложности.
Это противоречие разрешил Энди Танненбаум, профессор Амстердамского университета, написав "пионерский" вариант Unix - ОС Minix, предназначенную исключительно для образовательных целей. И распространял ее в виде набора дискет вместе со своим учебником по теории операционных систем.
По свидетельству очевидцев, в Minix все было как в настоящем Unix, за одним исключением - она была неспособна к выполнению реальных пользовательских задач. Многие особенности Unix в ней не были реализованы сознательно - Танненбаум полагал их слишком сложными для неокрепших студенческих умов.
Довольно быстро сложилось сообщество пользователей Minix, которых такое положение дел не устраивало. И система начала обрастать всякого рода доработками (патчами), превращавшими ее в среду для реального использования. Однако распространять такую модернизированную систему было нельзя - Minix не являлась Free Software в собственном смысле этого слова. Каждый пользователь должен был приобретать книгу Танненбаума, получая в придачу ОС, и в индивидуальном порядке накладывать на нее патчи.
Именно таким образом поступил в 1990 г. некий студент университета Хельсинки - Линус Торвальдс, - когда ему захотелось поизучать внутреннее устройство процессора своей новой машины (i386) и одновременно приобщиться к Unix, которую он изучал в своем ВУЗе: купил книгу Танненбаума вместе с Minix, скачал и установил соответствующие патчи.
Далее ему потребовался терминальный доступ к университетской машине, чтобы выходить в Сеть, не выходя из дома (как я его понимаю...). В Minix штатно подходящей программы не обнаружилось, и Линусу пришлось сочинить ее. Однако под управлением ядра Minix она работала плохо - так что волей-неволей потребовалось новое ядро. Его нужно было куда-то размещать - так родилась новая файловая система, ext (то есть Extended для файловой системы Minix. Для запуска терминальной программы не худо было иметь какую-то среду - для этой цели Линус портировал на свое ядро командную оболочку bash
, разработанную в недрах проекта GNU. Ну и все это хозяйство требовалось чем-то собирать - не перезагружаться же обратно в Minix каждый раз, как потребуется внести коррективы. Так что к bash
пришлось присоединить еще и единственный свободный из наличных компиляторов Си - GNU C Compiler (известный как gcc
). А итогом всего этого явилось объявление в августе 1991 г. о создании новой операционной системы. Видите, как все просто?
Новая ОС получила название Linux - в определенной степени случайно: так именовался домашний каталог Линуса на том ftp-сервере, на котором она впервые была выложена для свободного доступа. Сначала - под лицензией, сочиненной Торвальдсом собственноручно. Однако вскоре, не собираясь особо заморачиваться юридическим крючкотворством, с одной стороны, но желая оградить свое творение от враждебных посягательств - с другой, он изменил лицензию на GPL, под которой распространялись bash
и gcc
.
Впрочем, история создания Linux давно получила широкую известность - в том числе и в версии ее разработчика. И пересказывать ее я не буду - книга Линуса доступна на русском языке как в официальном бумажном издании, так и в нескольких онлайновых вариантах. Остановлюсь только на тех моментах, которые кажутся мне наиболее существенными.
Во-первых, следует подчеркнуть, что Линус не занимался адаптацией Minix (или какого-либо иного варианта Unix): в своей работе он руководствовался описаниями системных вызовов, данными в соответствующем стандарте POSIX (1003.1), не привязанными к какой-либо конкретной реализации. В результате Linux не является чистым клоном Unix: ее можно считать первой настоящей POSIX-системой в полном смысле этого слова. А черты ее сходства с какими-либо вариантами System V или BSD обусловлены только тем, насколько полно все они воплощают соответствующие стандарты.
Во-вторых, Linux создавался на машине с процессором i386 для архитектуры Intel и первоначально - только для нее. Более того, Линус вообще сомневался, что его система когда-либо сможет быть портирована на любую иную аппаратную платформу. И потому соответствие стандартам в данном случае преследовало целью не переносимость Linux самого по себе, а в первую очередь возможность компиляции в этой ОС всего ранее созданного программного ассортимента для Unix и POSIX-совместимых систем вообще.
В этой связи можно только порадоваться интуиции Линуса: если во время создания его системы стоял вопрос о возможности сборки сторонних программ в ней, то ныне более актуальна задача переноса Linux-софта на другие Unix-подобные платформы.
В третьих... а в третьих тесно связано со вторым: Linux оказался создателем уникального метода разработки масштабных проектов Open Sources, того самого, который Эрик Раймонд позднее назовет методом большого базара. Впрочем, справедливости ради следует отметить, что и в данном случае изобретался велосипед - аналогичный способ привлечения дармовой рабочей силы использовал Том Соейер в своих "Приключениях".
Ранее свободное программное обеспечение создавалось либо в рамках университетских проектов при правительственном финансировании, либо энтузиастами-одиночками, либо камерно организованными группами таких энтузиастов. Что было причиной их заведомо нестабильного состояния: прекращение госфинансирования, утрата интереса со стороны разработчиков и масса прочих привходящих факторов в любой момент могли если не остановить такой проект, то по крайней мере заморозить его на долгое время.
Линус же обеспечил своему проекту, помимо практического бессмертия, еще и непрерывность развития. Выложив свою систему в открытый доступ, он, кроме того, предложил всем желающим (и, конечно же, могущим) принять участие в ее дальнейшем совершенствовании. В том числе (и в первую очередь) тех ее фграментов, которые его лично мало интересовали. А соответствие системы стандартам гарантировало, что такой призыв встретит понимание со стороны многочисленных Unix-программистов - ведь в любом случае их усилия не пропали бы даром и могли быть использованы в любой иной POSIX-совместимой системе...
В результате деятельности аморфного, неорганизованного, "базарного" коллектива разработчиков, не имеющих первоначально никаких источников финансирования, ядро Linux очень быстро обросло такими функциями, как поддержка сетей, протокола TCP/IP, оконной системы X, на нее были портированы все аналоги классических Unix-утилит и приложений, разработанных в рамках проекта GNU и независимыми разработчиками. А затем настал черед и чисто пользовательских приложений, в том числе офисных, графических и мультимедийных. Следствием чего было привлечение не только новых разработчиков, но и конечных пользователей.
И ныне число пользователей Linux много превосходит таковое всех прочих POSIX-совместимых систем, вместе взятых. Причем если среди последних представлены почти исключительно разработчики программного обеспечения и администраторы компьютерных систем разного ранга, то Linux все больше проникает на десктопы тех юзеров, которых принято называть конечными - то есть профессионально не связанных с IT-индустрией.
Далее >>>