Четверть века операционной системы UNIX

С. Д. Кузнецов
Председатель Совета SUUG*)
e-mail: kuz@ivann.delta.msk.su

С чего все начиналось
UNIX сегодня и завтра
UNIX: коммерция и творчество

В 1994 году операционной системе UNIX исполнилось 25 лет. Это первая в истории операционная система, которая не только дожила до такого почтенного возраста, но и продолжает развиваться и привлекать новых сторонников. Отмечая этот знаменательный для всех программистов и пользователей компьютеров юбилей, многие специалисты пытаются проанализировать историю ОС UNIX и понять причины ее успеха. Свою скромную лепту вносим и мы.

С чего все начиналось

История ОС UNIX началась в недрах Bell Telephone Laboratories (теперь АТ&T Bell Laboratories) и связана с известными ныне всем именами Кена Томпсона, Денниса Ритчи и Брайана Кернигана (два последних имени знакомы читателям и как имена авторов популярнейшей книги по языку программирования Си, издававшейся в нашей стране на русском языке).

С 1965 по 1969 год компания Bell Labs совместно с компанией General Electric и группой исследователей из Массачусетского технологического института участвовала в проекте ОС Multics. Эта операционная система, хотя и не была полностью доведена до стадии коммерческого продукта, обогатила мировое сообщество системных программистов массой ценных идей, многие из которых сохраняют свою актуальность по сей день и используются применительно не только к операционным системам. Основным недостатком ОС Multics, который, по всей видимости, и помешал довести систему до уровня программного продукта, являлась ее чрезмерная сложность. Среди участников проекта Multics были и Кен Томпсон и Деннис Ритчи.

Решение о прекращении участия в проекте Multics было принято на самом верхнем уровне руководства Bell Labs, и сотрудники, по существу, оказались поставленными перед свершившимся фактом. Более того, руководство компании, разочарованное результатами весьма дорогостоящего проекта, вообще не желало больше иметь какие-либо работы, связанные с операционными системами.

Поэтому в самом своем начале то, что впоследствии превратилось в ОС UNIX, представляло собой всего лишь набор утилит, предназначенных для подготовки документации. Однако на использовавшемся компьютере PDP-7 практически отсутствовала операционная система, и немногочисленная группа сотрудников Bell Labs решила разработать простую операционную систему, пригодную для их собственных нужд. С этого и началась ОС UNIX.

Название UNIX было придумано Брайаном Керниганом для простейшей операционной системы, работавшей на PDP 7 (1970 год): очевидно желание и в названии противопоставить новую систему проекту Multics. Эта система была написана на языке ассемблера и мало походила на современный UNIX. сохранились только общие подходы к логической организации файловой системы и управлению процессами, а также некоторые утилиты для работы с файлами.

В следующем году система была переписана (все еще на языке ассемблера) для более мощной ЭВМ PDP 11/20. В первой версии ОС UNIX для PDP 11 воплощены уже почти все идеи, признаваемые теперь как основа UNIX. Отсутствовал только механизм взаимодействия процессов через программные каналы ("pipe"), но и этот механизм появился во второй версии системы.

Параллельно с этим велась разработка языка программирования, пригодного для написания операционных систем. На основе существовавшего к этому времени языка BCPL и был создан повсеместно используемый теперь язык С.

И, наконец, в 1973 году ОС UNIX была переписана на языке С. Основными разработчиками этого варианта системы были Томпсон и Ритчи. Широкое распространение получила шестая версия UNIX (1975 год), но наибольший эффект произвела разработка седьмой версии, которая стала первой по-настоящему мобильной версией системы. Это продемонстрировали прежде всего сами разработчики, осуществившие успешный перенос системы с 16-разрядной PDP 11 на 32-разрядную ЭВМ Interdata 8/32 (1977 год). С 1979 года операционная система UNIX Version 7 начала активно распространяться и была перенесена на множество разнообразных платформ.

Важным этапом в истории ОС UNIX явилась разработка версии системы для ЭВМ VAX 11/780 (UNIX 32V, 1978 год). Эта работа была выполнена сотрудниками Bell Labs Джоном Рейзером и Томом Лондоном и получила дальнейшее развитие в Калифорнийском университете (г. Веркли) в серии BSD UNIX (во многом благодаря способностям, энергии и энтузиазму Вилла Джоя, впоследствии - одного из основателей компании Sun Microsystems).

До середины восьмидесятых годов ОС UNIX развивалась в основном вследствие широкого некоммерческого участия программистов из различных компаний и университетов Америки, Европы и Австралии. Каждый пытался как можно лучше продумать и реализовать компонент, который был ему нужен и отсутствовал к этому времени в системе. Первые ассоциации пользователей ОС UNIX являлись, по существу, ассоциациями соразработчиков. Хотя для работы на уровне исходных текстов уже тогда требовалось приобретение лицензии Bell Labs, стоимость этой лицензии не создавала особых проблем даже для университетов.

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

Операционная система UNIX, безусловно, имела и имеет успех, и, по всей видимости, будет активно использоваться еще многие годы. Постараемся понять причины этого успеха.

Прежде всего, ОС UNIX идейно проста. Она основана на небольшом числе интуитивно ясных понятий (процесс, файл). Это особенно ощущается при переходе к ОС UNIX от таких традиционных ОС, как ОС IBM или VAX/VMS. Работа в среде UNIX осваивается достаточно легко и быстро, чему способствует наличие компактной и канонически организованной документации. Наконец, для того чтобы начать работать в среде ОС UNIX, достаточно ознакомиться только с самыми азами системы. Дальнейшую информацию можно получать по мере необходимости, пользуясь интерактивным доступом к документации и/или системой автоматизированного обучения.

Во-вторых, и это, видимо, более важно, пользователи получают приблизительно одинаковую среду на всех ЭВМ, оснащенных тем или иным вариантом ОС UNIX. Фактически, это приводит к отсутствию необходимости переучиваться при переходе на другую машину, что особенно актуально в современных условиях, когда парк ЭВМ обновляется очень быстро.

Наконец, самая важная причина по пулярности ОС UNIX состоит в том, что эта система первой стала поддерживать реальную возможность переноса прикладных программных систем с одной платформы на другую. Правда, в настоящее время, если программировать на языке С и использовать только стандартные библиотеки функций системы программирования С, можно добиться простоты переноса программ и из одной операционной системы в другую (например, из VAX/VMS в среду UNIX), но сама эта возможность появилась под влиянием ОС UNIX, и в любом случае проще переносить программы, оставаясь в среде UNIX.

UNIX сегодня и завтра

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

Наиболее старой и все еще не решенной полностью проблемой является стандартизация системы. После успешного выхода в свет седьмой версии системы фирмы Bell Labs началось бессистемное и неконтролируемое производство версий и вариантов системы, которые, естественно, стали отличаться по своим возможностям (анархия - это теневая сторона свободы).

Например, сейчас среди основных производителей UNIX и UNIX-подобных операционных систем находятся компании UNIX System Laboratories (с прошлого года - подразделение компании Novell - UNIX System V), BSDI (BSD UNIX), Santa Cruz Operation (SCO UNIX), Sun Microsystems (Interactive UNIX и Solaris), Open Software Foundation (OSF/1), IBM (AIX), Hewlett-Packard (HP-UX) и так далее (этот список далеко не полон).

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

После осознания этих проблем ведущие фирмы-разработчики ОС UNIX активизировали процесс стандартизации как языка С и соответствующих библиотек, так и самой ОС UNIX (точнее, интерфейсов системы с пользователями). Стандартизация вообще является нетривиальной задачей; в данном случае ситуация была особенно сложной из-за сталкивания интересов мощных фирм-производителей.

Для выработки стандарта языка С и системных библиотек был образован специальный комитет Американского национального института стандартов (American National Standard Institute - ANSI), которому в результате многолетней работы после выпуска и обсуждения нескольких проектов стандартов удалось создать стандарт, принятый и опубликованный в конце 1990 года. Вскоре после этого стандарт был принят Международной организацией по стандартизации (International Standard Organisation - ISO) в качестве междуародного. Теперь практически любая современная система программирования языка С поддерживает стандарт С (точнее, один из проектов стандарта, но они не слишком отличаются от заключительного документа), и проблему стандартизации языка С на данном этапе можно считать решенной.

Стуация со стандартизацией интерфейсов ОС UNIX более сложна. Наиболее серьезную работу проводит специально созданный для этих целей комитет IEEE, разрабатывающий набор стандартов под общим названием POSIX. Набор стандартов POSIX охватывает различные аспекты - от командного языка до интерфейсов с языками высокого уровня, однако работа еще далека от завершения (и, скорее всего, никогда не будет выполнена в полном объеме).

Тем не менее, уже можно говорить об отдельных положительных результатах работы комитета POSIX. Удалось выработать и принять стандарт интерфейса пользовательских программ с системой. Основой этого стандарта является набор системных вызовов (функций, обеспечиваемых ядром ОС UNIX), который должен поддерживаться в любой системе, объявляющей себя совместимой с UNIX. Наибольшее влияние на стандарт интерфейса программ с системой оказали UNIX System V и UNIX BSD 4.2. При выпуске всех известных последних версий системы было объявлено о соответствии систем этому стандарту POSIX.

Важной вехой в истории ОС UNIX явилось появление в ядре системы развитого набора средств межпроцессных взаимодействий (InterProcess Communications - IPC). именованные программные каналы, очереди сообщений, разделяемые сегменты и семафоры, программные гнезда (sockets), потоки (streams). Это позволило начать применять систему в прикладных областях, более близких к реальному времени. Программные гнезда и потоки стали основой построения взаимодействия процессов в локальной сети UNIX-компьютеров. Позднее были разработаны пакеты, реализующие механизм вызова удаленных процедур (Remote Procedure Call RPC), которые позволяют совместно использовать в сети разнородные компьютеры.

В самых последних версиях ОС UNIX появились возможности применения так называемых "легковесных" процессов (threads), работающих на общей виртуальной памяти. Их наличие позволяет более эффективно применения мультипроцессорные компьютеры с общей оперативной памятью ("симметричные" мультипроцессоры). Не все люди, стоявшие у истоков UNIX, согласны с тем, что это нововведение соответствует исходной природе ОС UNIX. Стандартизация этих механизмов пока происходит очень нелегко. Но, безусловно, они очень нужны на практике.

Следующей важной проблемой ОС UNIX является оснащение системы современными средствами интерфейса с конечным пользователем и предоставление средств разработки таких интерфейсов прикладным программистам. В основном это связано с использованием современных графических дисплеев с высокой разрешающей способностью.

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

В результате большинство современных вариантов ОС UNIX оснащено так называемыми оконными системами, позволяющими производить удобные и наглядные интерфейсы прикладных систем с использованием современных графических дисплеев. В разнообразных вариантах ОС UNIX использовались оконные системы Х Window, SunWindows, NeWS и т. д. К сегодняшнему дню безусловным победителем является Х Window.

Создавая комфортную среду для пользователей и позволяя им производить собственные прикладные системы с современными интерфейсами, оконные системы, вместе с тем, вновь порождают проблему стандартизации. Понятно, что увлекшись использованием каких-либо уникальных возможностей конкретной оконной системы легко утратить свойства мобильности своей прикладной системы. Поэтому в большинстве современных версий ОС UNIX стандартом де-факто инструментального средства разработки графических пользовательских интерфейсов является разработанный в OSF пакет Motif, хотя серьезным конкурентом является свободно распространяемый пакет Tcl/Tk, распространяющийся университетом Беркли.

Повышение уровня интерфейсов является характерной тенденцией современных UNIX-подобных операционных систем. Эта тенденция, безусловно, сохранится и в будущем.

Другой интересной тенденцией развития ОС UNIX является пересмотр внутренней организации системы (ядра ОС UNIX). Дело в том, что на протяжении многих лет после появления UNIX Version 7 (которая, как вы помните, была первым мобильным вариантом ОС UNIX) общая организация ядра ОС UNIX во всех вариантах системы оставалась примерно одной и той же. Ядро системы представляло собой и не слишком хорошо структурированную программу. В частности, использовался единый подход к буферизации обменов с блочными внешними устройствами в оперативной памяти, неизбежно вызывающий лишние переписи информации. Не так давно этот подход фактически считался стандартным для ОС UNIX.

Решающий шаг сделала компания OSF, разработавшая ОС OSF/1 с интерфейсом ОС UNIX, но с совершенно другой внутренней организацией. В качестве основы разработки было взято разработанное в университете Карнеги-Меллон ядро ОС Mach, в которой за счет активного использования аппаратных механизмов организации виртуальной памяти число переписей информации между разными областями оперативной памяти было сокращено до минимума. В результате ОС OSF/1, в которой функции ОС UNIX были реализованы над ядром Mach, оказалась более эффективной, чем работающие на тех же аппаратных средствах "чистые" реализации ОС UNIX. Кроме того, удалось добиться лучшей структуризации системы и четкого выделения машиннозависимых модулей.

Этот подход породил начало микроядерных организаций операционных систем. Успешный опыт OSF/1 побудил других разработчиков опробовать новый подход. В частности, в UNIX BSD 4А используется во многом похожий способ организации ядра системы. Эта тенденция кажется особенно важной, потому что открывает простор для дальнейшего развития ОС UNIX и, кроме того, возможно, наконец-то дает некоторые шансы на успех в будущем новым операционным системам. Это подтверждается тем, что практически все разрабатываемые сегодня новые ОС основаны на концепции микроядра (например, Microsoft Windows NT, IBM Workplace OS, Sun Spring и т. д.). Микроядерная организация ОС, помимо прочего, позволяет обеспечить в одной операционной системе несколько одновременно существующих базовых интерфейсов.

UNIX: коммерция и творчество

Успех ОС UNIX во многом связан с тем, что в первые годы в развитии системы участвовало множество талантливых людей, которым доставлял удовольствие прежде всего процесс творчества. Это было возможно по причине легальной доступности исходных текстов системы (как мы уже отмечали, стоимость лицензии не препятствовала ее приобретению даже университетами).

По мере распространения системы у владельцев исходных текстов возрастал коммерческий интерес, а стоимость лицензии повышалась и повышалась, пока не стала практически невозможной для тех людей, которые могли что-то сделать из творческого интереса. Как это бывает обычно, у этого процесса имеются и положительная, и отрицательная стороны. С точки зрения конечных пользователей, положительным моментом может считаться то, что в результате повысился уровень стабильности системы (тоталитаризм и свобода несовместимы, а значит, нет и анархии). Но любая форма тоталитаризма мешает развитию, и отсутствие возможности вносить творческий вклад в ОС UNIX нанесло урон и системе, и сообществу программистов.

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

Наиболее масштабным является проект GNU (GNU's Not Unix), выполняемый Фондом свободного программного обеспечения под руководством одного из наиболее способных программистов нашего времени Ричарда Столлмана (читатели могли общаться с ним на конференции SUUG весной 1993 года).

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

Цель проекта GNU - создание полной интегрированной программной среды, средства которой совместимы с возможностями ОС UNIX. Отечественным программистам отчасти знакомы программы GNU, например, система программирования GCC. Развитие GNU имеет плановый характер. Существует регулярно обновляемый список текущих задач, к выполнению которых могут подключиться все желающие.

К настоящему моменту завершены еще не все компоненты проекта GNU. Тем не менее, FSF распространяет много программ, часть которых написана непосредственно программистами FSF, часть передана в FSF для свободного распространения другими организациями и лицами. Список компонентов достаточно большой, вот только некоторые:

- Emacs - расширяемый, настраиваемый на разные типы терминалов и потребности пользователей редактор;
- GCC - переносимый оптимизирующий компилятор языков С, С++ и Objective С;
- GDB - отладчик программ для С, С++, Objective С и Фортран;
- Х11 - реализация MIT системы Х Windows.

Скоро ожидается появление ядра совместимой с ОС UNIX операционной системы Hurd. Это микроядерная операционная система, основанная на использовании свободно распространяемого микроядра Mach, университета Карнеги-Меллон. Все компоненты, реализуюшие стандартные возможности ОС UNIX, реализуются в режиме пользователя. Возможно программирование как в среде ОС UNIX, так и в "родной" среде Mach.

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

Другим активно используемым в России свободно распространяемым вариантом ОС UNIX является ОС Free BSD, распространяемая бывшими членами группы BSD университета г. Беркли, которые работают теперь в компании BSDI. Зта система является специализированной версией UNIX BSD 4.4 для использования на платформах Intel 386/486.

И, видимо, наиболее популярной вовсем мире является операционная система Linux, ядро которой было спроектировано и разработано Торвальдом Линном из Хельсинкского университета. Эта система также ориентирована на использование на платформах 38б/486. Она не является в полном смысле микроядерной, но очень удачно спроектирована. Система очень активно развивается благодаря вкладу молодых программистов. Ричард Столлман говорит, что до полного завершения проекта Hurd он считает Linux полноправным компонентом проекта GNU, позволяющим, наконец собрать полную среду ОС UNIX.

Разных людей могут привлекать разные операционные системы. Есть даже такие люди, которым нравилось программировать в среде OC/360. Но по нашему мнению, по-настоящему можно любить только ту систему, в которую внес что-то свое. И мы любим ОС UNIX!


*)SUUG - Soviet Unix Users Group - бывшая Советская ассоциация пользователей операционной системы Unix