Зеленеет один,
Осеннему ветру наперекор,
Спелый каштан
Мацуо Басе (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 4.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, SunSoft, 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).
Ну вот, я похвалил и немного поругал UNIX, не сказав ни одного плохого слова про Microsoft. Да и нет в NT ничего плохого, кроме того, что эта система не обладает простотой, демократичностью и открытостью Unix.
Каково будущее UNIX? Я оптимист и надеюсь, что в недалеком будущем мы увидим
64-разрядные, высокомобильные, стандартизованные, надежные реализации системы, наличие которых позволит дожить операционной системе (надеюсь, вместе с нами) до 50 лет.
С Сергеем Кузнецовым можно связаться по телефону: (095) 932-9212.
Сергей Кузнецов
Трудно различать демократичность ОС UNIX и демократичность UNIX-сообщества