UNIX: достоинства, недостатки и эмоции

Сергей Кузнецов

Зеленеет один,
Осеннему ветру наперекор,
Спелый каштан.

Мацуо Басе (1644-1694)

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

Люблю тебя (UNIX), но странною любовью... К сожалению, ее не победит рассудок мой. Вы же знаете, как бывает с любимой женщиной. Мы видим в ней массу недостатков. Мы знаем, какой бы она должна быть. Но она существует (какая она есть), и мы ее любим. Так и с UNIX. Неэмоциональный человек скажет, что это всего лишь программа. Пока она его устраивает, он ей пользуемся. Когда появляется лучшая операционная система (только вот где она?), он начинает пользоваться ей. Наверное, это правильно, но скучно, господа!

На мой взгляд, наиболее правильная комбинация человеческих качеств включает жизненный опыт, теоретические знания, практику, эмоциональный комплекс, привычки и способность критического отношения к себе и к миру (и конечно же, чувство юмора). Мой приятель злится, когда мы с коллегами начинаем эмоционально обсуждать достоинства UNIX и недостатки NT (другая точка зрения - выдающиеся достижения Билла Гейтса и застой и прострацию в мире UNIX). А что тут злиться? Главное, чтобы эмоции не перекрывали здравый смысл и смягчались юмором.

Могу привести два примера. Год назад на факультете ВМиК Московского университета мы со студентами проводили вечерний абсолютно неформальный семинар под условным названием "Операционная система UNIX". На самом деле, на этом семинаре обсуждались разнообразные вопросы архитектурной организации различных операционных систем, и иногда и систем управления базами данных. Хотя, конечно, основной состав семинара был заражен вирусом "UNIX". Так вот, двое моих студентов внимательно проштудировали одну из немногих хороших книг по архитектуре Windows NT и сделали развернутый доклад часа на четыре. Доклад сопровождался массой шуток и выкриков с места, но в результате все остались очень довольны, получив представление об NT изнутри.

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

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

Вы знаете, что и до и после появления ОС UNIX существовали гораздо более элегантные операционные системы: например, Miltics, Mach, Chorus и т.д. Красивые, основанные на единой идее, проектировавшиеся и разрабатывавшиеся выдающими специалистами. Мне нравятся эти ОС, я часто о них пишу, рассказываю студентам. Более того, некоторое время назад в Институте проблем кибернетики РАН, а затем в Институте системного программирования РАН в составе группы опытных специалистов в области операционных систем я участвовал в проектировании и разработки отечественной объектно-ориентированной операционной системы КЛОС. Тоже была очень красивая система.

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

Краткий перечень ответов на эти вопросы (возможно, неполный):

Прокомментируем этот список более подробно.

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

Базовый набор средств, опирающихся на эти понятия, оказался очень мощным. В частности, комбинируя средства, поддерживающие разработку программ, управление пользовательскими процессами, перенаправление ввода/вывода на основе абстрактной трактовки понятия файла, стало возможным динамически создавать сложные программы со внутренней асинхронностью из простых и небольших по размеру программных компонентов. Достаточно быстро в ядре ОС UNIX появилась поддержка взаимодействия независимо образованных процессов (именованные программные каналы, очереди сообщений, программные гнезда). Это позволило решать в среде ОС UNIX задачи, близкие по своему характеру к задачам "мягкого" реального времени. Разработка в университете Беркли стека сетевых протоколов TCP/IP, реализация этого стека в UNIX BSD.3 и стыковка TCP/IP с механизмом программных гнезд привели к тому, что ОС UNIX стала истинной сетевой операционной системой. Именно тогда Билл Джой произнес свою знаменитую фразу "Сеть - это компьютер". Протоколы TCP/IP положили основу Всемирной сети сетей Internet, а их комбинация с механизмом программных гнезд во многом способствовала становлению архитектурной концепции "клиент-сервер".

Удачной находкой явилась идея использования развитого командного языка в качестве базового интерфейса пользователя с операционной системой. Командные языки использовались и в предшествовавших ОС UNIX интерактивных операционных системах, но пользователи этих ОС всегда испытывали по меньшей мере неудобства при написании командных файлов (или, как принято называть их в теперешней молодежной программистской среде, скриптов). Семейство командных языков shell (Bourne-shell, C-shell, Korn-shell и т.д.) предоставляет пользователям мощные средства текстовой обработки, которые в сочетании с принятыми в ОС UNIX стандартными (и не обременительными) правилами написания новых команд позволяют, не выходя из сеанса взаимодействия с командным интерпретатором, создавать команды, комбинировать существующие команды и т.д. Конечно, по мере развития и удешевления аппаратуры графических видеотерминалов, в ОС UNIX не могли не появиться графические пользовательские интерфейсы. На сегодняшний день в основе большинства таких интерфейсов лежит разработанная в Массачусетском технологическом институте оконная система X (X Window System). Конечно, графический интерфейс удобнее строчного. Но тем не менее, значимость командных языков семейства shell от этого не уменьшилась. Каким бы убогим не было терминальное оснащение UNIX-компьютера, пользователь имеет все возможности взаимодействия с системой. Более того, трудно найти программиста, работающего в среде X, у которого хотя бы в одном окне экрана не был вызван традиционный строчный интерпретатор shell.

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

UNIX-сообщество не могло бы быть демократичным, если бы сама операционная система не была открытой. Под открытостью мы понимаем публичную доступность спецификаций интерфейсов, протоколов и даже внутренних алгоритмов работы системы. Открытость системы нужна пользователям (чтобы не испытывать неприятных потрясений при смене варианта ОС), разработчикам (чтобы иметь возможность внесения согласованных усовершенствований), продавцам (чтобы иметь возможность четко объяснить покупателю возможности его покупки). Спецификации интерфейсов и протоколов ОС UNIX публикуются в документах SVID, XPG, POSIX и частично приняты в качестве международных стандартов мобильных операционных систем. Открытость UNIX имела по меньшей мере два выдающихся последствия. Во-первых (это мое личное мнение), она способствовала становлению и внедрению в практику общей концепции Открытых Систем (грубо говоря и не вдаваясь в детали, я бы сформулировал ее так: следуй правильно подобранному набору признанных стандартов - и все будет хорошо). Во-вторых, именно открытость UNIX позволила одновременно существовать двум ветвям операционной системы: коммерческой ветви, развиваемой такими компаниями, как Santa Cruz Operation, Sun Soft, Digital Equipment, IBM, Hewlett Packard и т.д., и некоммерческой ветви, представленной разными вариантами UNIX BSD (FreeBSD, BSDNet и т.д.) и Linux. Феномен Linux вообще ошеломляет. Начиная с нуля, бывший студент Хельсинского университета Линус Торвальдс смог реализовать свое собственное ядро операционной системы, которое привлекло к коллоборации (как любят говорить физики) громадное число заинтересованных людей в Internet. Сегодня Linux - это качественная, развитая ОС, способная конкурировать с коммерческими вариантами ОС UNIX. Конференции по Linux собирают тысячи людей, а Линус не менее популярен в мире UNIX, чем Деннис Ритчи.

Переносимость следует понимать в двух смыслах. Во-первых, правильно написанное ядро ОС UNIX само обладает свойством простоты переноса на другую аппаратную платформу. Это стало возможным благодаря применению двух технологических приемов. (1) Большая часть ядра (и все дополнительное программное обеспечение) написана на машинно-независимом языке Си и сама является машинно-независимой. (2) Та часть ядра, которая не может быть машинно-независимой (включающая, например, компоненты, связанные с управлением виртуальной памятью на аппаратном уровне) обладает небольшими размерами и спроектирована в весьма модульной манере. Перепись этой части с учетом особенностей аппаратуры целевого компьютера не представляет собой неподъемную задачу. В результате, фактически, стало возможным иметь одну и ту же операционную среду (здесь я несколько идеализирую) на абсолютно разных аппаратных платформах. Во-вторых, даже при наличии на разных аппаратных платформах различающихся реализаций UNIX, которые соответствуют открытым спецификациям, можно сравнительно просто обеспечить переносимость прикладного программного обеспечения. Для этого нужно всего лишь не выходить за пределы специфицированных средств. Причем эти возможности распространяются даже на такие сложные "над ядерные" системы как СУБД. СУБД Oracle, предназначенная для использования на UNIX-платформах, имеет (почти) один и тот же исходный текст для любой конкретной платформы. Тексты СУБД Oracle, работающей в среде NT, существенно отличаются.

Как всегда, я готов хвалить UNIX как угодно долго, и обычно у меня не хватает желания, времени, места и сил, чтобы поругать эту операционную систему. Все-таки попробую.

Имеется две возможности ругать ОС UNIX. В каждом конкретном варианте можно найти массу дефектов. Например, если говорить о классических реализациях (например, ранних выпусках System V), можно найти недостатки в организации механизма общесистемной буферизации, управлении файлами и т.д. Но дело в том, что в каждом следующем выпуске эти недостатки смягчаются или удаляются вовсе. Так что анализ этих недостатков - это дело скорее историков ОС UNIX, и мы на этом останавливаться не будем. Вторая возможность сказать "гадость" по поводу UNIX относится к некоторым абсолютным новшествам этой системы. Лично для меня соответствующим основанием является внедрение в ОС UNIX механизма "легковесных процессов" (в просторечии "threads"), т.е. процессов, которые совместно выполняются в общей виртуальной памяти. Не люблю я LWP (Light Weight Processes). Программисты среднего и старшего поколения все это проходили. Программирование с использованием LWP порождает многочисленные трудности, хотя и является на сегодняшний день единственным способом использования возможностей симметричных мультипроцессорных архитектур (SMP - Symmetric Multi Processors).

Ну вот, я похвалил и немного поругал UNIX, не сказав ни одного плохого слова про Microsoft. Да и нет в NT ничего плохого, кроме того, что эта система не обладает

(Не давайте мне много говорить про NT, я слишком эмоционален!)

Каково будущее UNIX? Я оптимист, и надеюсь, что в недалеком будущем мы увидим 64-разрядные, высокомобильные, стандартизованные, надежные реализации системы, наличие которых позволит дожить операционной системе (надеюсь, вместе с нами) до 50 лет.