Алексей Федорчук
[email protected]
С легкой руки Михаила Тузикова, задавшего в Linuxshop-форуме невинный, казалось бы, вопрос - А зачем тебе Linux дома?, топик этот стал ареной дискуссий на самые разные темы. Здесь обсуждались и проблемы сравнительной совместимости Linux и Windows с различным оборудованием, и их сравнительная, опять же, устойчивость, и многое другое. А недавно всплыла новая тема для дискуссии - А что же такое операционная система?. Которая и подвигла меня на сочинение этой заметки.
Вопрос этот возник, разумеется, на примере Linux'а. И в этом контексте тянет за собой ряд других. Например: а является ли Linux операционной системой? И не правильнее ли называть его GNU/Linux? А что имеется в виду, когда говорят об устойчивости ОС? На все эти вопросы я постараюсь дать ответ в этой заметке. Для чего сначала остановлюсь на обзоре существующих, явно или неявно, мнений по сему предмету.
А распространенных мнений по сему поводу - два: минималистское и максималистское. Согласно первому, операционная система - это программа, именуемая ядром ОС (в данном случае, ядро Linux). А все, что существует в составе любого Linux-дистрибутива помимо ядра, суть приложения.
Понятно, что ядро в очень большой степени определяет своеобразие ОС. Однако если подходить с точки зрения пользователя, само по себе ядро - пресловутая вещь в себе, так как не способно не только функционировать, но даже само себя загрузить. И без соответствующего системного окружения пользователь никогда не узнает о его несравненных достоинствах.
Не менее важно и то, что на основе одного и того же (или сходного) ядра могут быть созданы системы, которые все признают полноценными (и самостоятельными) операционками. Типичный пример - ядро mach, на коем базируются или базировались и Next, и MacOS X, и Darwin, и Hurd, и перманентно находящиеся в состоянии вялотекущей разработки Xmach и Yamitt (но тем не менее реально существующие - Xmach я однажды даже смог запустить:-)). Вряд ли у кого повернется язык отнести все перечисленные имена к одной операционной системе. Даже MacOS X и Darwin с их практически идентичным ядром...
Если обратиться к BSD-миру, то в основе ядра и FreeBSD, и NetBSD, и OpenBSD, и даже коммерческой BSDi (интересно, какова сегодняшняя судьба последней?) лежит одно и то же ядро BSD. И хотя в дальнейшем все они развивались самостоятельно, но их взаимовлияние - факт неоспоримый: многие прогрессивные штуки, реализованные в FreeBSD 5 (в частности, касающиеся многопроцессорности) пришли в нее из BSDi. Однако никому ведь не приходит в голову считать клоны BSD одной операционкой (хотя - в подтверждение высказанного в предыдущем абзаце - с точки зрения пользователя разницы между ними меньше, чем между Mandrake и Slackware).
Linux, благо, избег этой участи - сепарации по разновидностям ядра. Однако значит ли это, что ядро идентично во всех его дистрибутивах? Отнюдь. Конечно, любой (любой ли?) Linux-дистрибутив теоретически может функционировать на каноническом ядре Линуса (том, что берется с www.kernel.org). Однако практически все крупные разработчики дистрибутивов патчат свои умолчальные ядра почем зря собственными разработками. Или включают в них достижения независимых патчестроителей, о количестве которых можно получить представление, просмотрев на том же www.kernel.org каталог people. Однако на этом основании никто (за одним исключением, о котором я скажу ниже) не утверждает, что Red Hat и Gentoo - разные операционные системы.
Максималистская точка зрения на трактовку понятия "операционная система" последовательно проводится Microsoft с ее Windows. Согласно ей, ОС - это не только ядро, но и все его системное окружение, и графический интерфейс, и даже программы, которые испокон веков относились к категории пользовательских приложений. Вспомним недавнюю тяжбу по поводу того, является ли Internet Explorer неотъемлемой частью MS Windows, которая так и не получила однозначного разрешения. А согласно сегодняшней политике MS, версий IE как отдельного приложения вообще более не будет - все его новые реализации жестко привязываются к грядущим реализациям самой Windows. В том числе - к механизмам безопасности, по всей видимости, встраиваемым в ядро (а где им еще быть?). То есть неявным образом утверждается, что ядро ОС и ее приложения - едины, как народ и партия при социализме...
Парадоксально, но такая же позиция поддерживается с крайнего фланга противоположной линии фронта - со стороны Ричарда Столлмена и его саратников по проектам GNU и Debian. Если обратиться к интервью со Столлманом, взятым Максимом Отставновым специально для тематического выпуска "Домашнего компьютера" (#12 за 2002 год), то там можно в явном виде встретить утверждения о том, что emacs - часть операционной системы, и графический интерфейс (сиречь, в данном случае, Иксы) - часть операционной системы, и (sic!) браузер - тоже часть операционной системы. Прямо по Биллу Гейтсу...
Некоторый резон во второй точке зрения имеется. Что особенно ясно видно на примере той же (вернее, любой) Windows. Во-первых, с теоретических позиций: вычленить из этих операционок их ядро - задача нетривиальная (а в современных версиях, похоже, и невозможная). А практически - что останется от Windows 85/98/ME (о линии NT ничего не скажу за незнанием), если такое удастся? Не голый ли получится DOS?
Хотя нужно заметить, что попытки освобождения ОС Windows от ее якабы неотъемлемых компонентов (того же IE) предпринимались неоднократно, и попытки успешные. А еще я имею информацию от людей, которые изъяли из Windows практически все окружение, заменив его самосборными программами на базе Cygwin'а. Подвиг, ИМХО, по масштабам далеко превосходящий сборку собственно Linux-системы...
Если же вернуться к Linux'у, то суть точки зрения Столлмена и апологетов Debian'а сводится к тому, что именно системное окружение, механизм управления пакетами и прикладные программы (то есть своего рода инфраструктура) и являют собой собственно операционную систему. А уж поверх какого ядра все это хозяйство функционирует - дело десятое. И иллюстрацией такой точки зрения является сам Debian (то самое обещанное исключение). Если обратиться к разделу портирования на www.debian.org, то там можно обнаружить информацию о портировании ОС (!) GNU Debian не только на ядро Hurd, но и на ядро Net- или FreeBSD.
Однако достаточно минутного размышления, чтобы понять: принятие второй точки зрения, в трактовке ли Microsft или в интерпретации RMS, приводит к полному размыванию самого понятия - операционная система. Действительно, с субпозиции MS состав операционной системы определяется исключительно произволом производителя оной. "Ну а вздумается, скажем, ихнему цеху" объявить завтра неотъемлемым компонентом ОС не только IE, но и MS Word с Excell'ем? И получится, чтот кроме ОС, и программ-то других не бывает...
Ну а продолжая логику RMS: если мы объявили emacs частью операционной системы, то на каком основании должны отказывать в этой чести Vim? И если браузер - неотъемлемый компонент ОС, то какой из них? Любимый RMS lynx, mozilla, galeon или все сразу? И как быть с графическим метаинтерфейсом, представленным оконной системой X, который по определению разрабатывался для работы поверх любых операционок? А ведь другой общепринятой графической системы нет ни в GNU Debian, ни вообще в Linux.
В сущности, за кадром высказывания Столлмена стоит утверждение, что в состав ОС входит весь GPL-софт. Или, паче того, весь софт с лицензиями, не вполне определенно называемыми GPL-compatible (те же Иксы, например, распространяются на условиях лицензии X-консорциума). Но в таком случае понятие операционки из худо-бедно технологического становится сугубо юридическим - ведь технологического способа определить степень "совместимости" лицензий до сих пор не придумано.
Благо, наряду с двумя перечисленными точками зрения существует и третья. Формулировки ее в явном виде мне не встречалось (хотя в неявном, то есть на практике, ее придерживаются разработчики ОСей BSD-клана). И потому возьму на себя смелость такую формулировку дать: операционная система - это ядро и самодостаточный комплекс средств, необходимых для ее функционирования на благо пользователя. То есть пользователь любой ОС, загрузив оную, должен иметь возможность в первую очередь устанавливать, не обращаясь ни к каким сторонним инструментам, необходимое ему программное обеспечение и работать с ним. А теперь попробую дать развернутое обоснование третьей позиции.
То, что любая ОС не способна фунционировать без ядра - очевидно. Однако для этого ядро необходимо тем или иным способом загрузить. И потому, говоря языком Столлмена, загрузчик оказывается неотъемлемой частью операционной системы. Конечно, существует достаточное количество мультисистемных загрузчиков. Однако ставить от них в зависимость само существование ОС было бы не правильно - на худой конец, операционка должна иметь штатное средство загрузить саму себя. Другое дело, что средство это не обязано быть уникальным: Linux можно загрузить с помощью Lilo и GRUB, FreeBSD - с помощью собственного loader'а и того же GRUB, и так далее. И потому GRUB имеет все шансы стать надсистемным загрузчиком в мире Open Sources. Что, тем не менее, не мешает развитию ни Lilo, ни FreeBSD Loader'а...
Для функционирования системы недостаточно просто загрузить ядро - необходимо, чтобы оно запустило некий стартовый процесс. В Unix-системах он имеет имя init, однако реально это могут быть разные программы. И в процессе загрузки следует выполнить некий комплекс мероприятий, определеяемый набором стартовых сценариев. То есть все это - также необходимые составляющие ОС.
Далее, ядро должно взаимодействовать с файловой системой на каких-либо носителях - иначе откуда будут браться данные для работы системы (да и самому ядру размещаться где-то нужно). А отсюда - третий непременный компонент операционки, включающий средства монтирования накопителей, создания на них разделов и файловых систем, их проверки и т.д. А если ядро (подобно ядру Linux) предусматривает поддержку нескольких файловых систем в качестве нативных - к каждой из них должен прилагаться свой комплекс обслуживающих утилит.
Все перечисленные выше компоненты необходимы для самообеспечения системы. Но ведь цель ее, в конечном счете, - выполнение пользовательских задач. А потому ОС должна включать - нет, не прикладные программы, это отдельная история, а средства их установки. А в мире Unix-существует один универсальный способ распространения программ - в виде архивов исходников, и единственный столь же универсальный метод их установки - компиляция оных. И тут выявляется абсолютная необходимость, с одной стороны, средств для работы с архивами, с одной стороны, и компилятора с сопутствующим инструментарием (линкером ассемблером и т.д.).
Процесс сборки программ неизбежно влечет потребность в системных библиотеках - библиотеке функций Си (в контексте Unix-систем) и библиотеке свойств терминала, как минимум. Это - во-первых. Во-вторых же, в процессе сборки программ задействуется некоторое количество утилит для работы с файлами и текстами, которые можно было бы отнести к категории прикладных. Но в этом контексте они оказываются членами необходимого системного окружения.
Кроме того, для самодостаточности система должна иметь средства получения программ, а универсальным источником их выступает Интернет. Следовательно, базовый набор сетевого инструментария - столь же необходим, как и компилятор или библиотеки. Благо, Unix - изначально сетевая система...
Наконец, любые действия в любой системе (даже в Windows) выполняются, прямо или косвенно, путем отдачи соответствующих командных директив. И потому интегрирующей надстройкой над всем описанным богачеством выступает командная оболочка, она же - интерпертатор языка команд, по простому - шелл.
Таковы предельно минималистские требования к комплектации самодостаточной системы. Конечно, в ее базовый набор неплохо включить текстовый редактор для правки конфигурационных файлов, да и еще кое-какие программы. Однако мы говорим именно о незаменимых вещах, а редактор (для указанных целей) вполне подменяется набором текстовых утилит (в Unix-системах, например, cat, awk, sed), без которых действительно нельзя обойтись. И потому, вопреки мнению Столлмена, ни редактор, ни браузер не являются неотъемлемыми частями операционки. А вот средства коннекта (например, PPP) и ftp-клиент - являются (или вы знаете другой способ подключения к Сети и скачивания из нее программ?).
И что мы получаем, если соберем вместе все перечисленное выше? А получаем мы практически то, что во FreeBSD охватывается понятием Distributions, вернее, той его частью, которая именуется Base и является единственным компонентом, обязательным при минимальной установке. А есть ли возможность вычленить нечто подобное из какого-либо многодискового дистрибутива Linux'а? Или, напротив, прикрутить к Linux-ядру некое подобие такой самодостаточной целостности?
Есть, и это - ни что иное, как тот самый Base Linux, о котором столько говорилось на этих страницах, и примерный состав которого можно перечислить попакетно. Почти все компоненты этого набора а) абслютно необходимы (и незаменимы) для загрузки и функционирования системы, б) связаны друг с другом зависимостями, и в) являются уникальными именно для Linux'а. Хотя многие программы поименно могут совпадать с классическими Unix-утилитами или своими функциональными аналогами из BSD-систем, но это - именно самостоятельные программы, не заимствованные ни из Unix'ов любого рода, ни из Free- или прочих BSD (для примера достаточно сравнить more из Linux и одноименную прогграмму из FreeBSD, более сходную с Linux'овой less). А потому сочетание ядра Linux с этим базовым комплексом вполне заслуживает звания операционной системы.
Таковы мои варианты ответов на вопросы, что такое операционная система, и отвечает ли Linux этому понятию. Теперь - о том, не GNU ли он, этот Linux.
Действительно, большинство наиболее важных компонентов Base Linux, такие, как компилятор gcc, общесистемная библиотека glibc или командная оболочка bash, были разработаны до Linux'а, независимо от него, и - в рамках проекта GNU. Которому, по выражению Столлмена, не хватало только ядра :-) (смайлик мой - ибо ядро Hurd на момент появления Linux'а работоспособным не являлось; да и ныне, после недавней его гальванизации, вряд ли пригодно к практическому применению) для превращения в полноценную, противостоящую Unix, операционку. Так что, казалось бы, термин GNU/Linux имеет право на существование.
Однако лично мне он не нравится. Во-первых, он оскорбляет мой литературный вкус - так и предвижу появление дистрибутивов с названиями типа "Гнутикс". Во-вторых, и это важнее, он не вполне правилен по существу. Ведь, если обратиться к истории, не проект GNU ухватился за столь недостающее ему ядро. Напротив, это Линус для обеспечения работы своего ядра использовал отдельные компоненты из GNU-арсенала. В полном, к слову сказать, соответствии с духом и буквой GPL и движения FSF. Так что заслуга построения Linux'а как цельной, самостоятельной и самодостаточной системы принадлежит Линусу. Ну и тому множеству разработчиков, которые приняли в этом участие - никто из них ведь не настаивал на том, чтобы в названии системы фигурировало его имя или название программы, которую он написал.
Кроме того, и это важно, особенностью Base Linux (в отличие от Base Distributions из FreeBSD) является его альтернативность. О возможности выбора загрузчика или инструментария для работы с файловыми системами, про изобилие, скажем, консольных ftp-клиентов - и говорить нечего. Но выбор альтернатив возможен даже для самых ключевых компонентов вазовой системы. Так, пакет binutils (то есть необходимые утилиты для сборки программ) даже официально существуют в двух вариантах - проекта GNU и Kernel.org. Попытки заменить gcc на другие компиляторы (pgcc, egcc) также предпринимальсь (хотя и не очень успешно). Ну а вместо bash вполне можно прикрутить любую shell-совместимую оболочку, от облегченного ash (что часто делается в мини-дистрибутивах) до могучего zsh (у меня, например, в качестве общесистемной выступает именно он). Даже для glibc оказывается, можно подобрать замену (такая информация была на нашем форуме).
Так что Linux - это не только ядро и набор базовых программ. Это, на мой взгляд, в первую очередь алгоритм для построения такого набора. Видимо, именно этим он и привлекает определенную категорию пользователей - возможностью соучастия в построении основы основ системы, недостижимую не то что в Windows, но даже в мире BSD с его камерным стилем разработки. Не зря дедушка русского линуксописания, Владимир Водолазкий, отметил, что быть просто пользователем Linux- скучно...
И последний из поставленных в начале заметки вопросов - об устойчивости. Один из завсегдатаев Linuxshop-форума, известный там под ником Kot, в вышеупоянутом топике со свойственным ему сарказмом выразился в таком духе: когда линуксоид сталкивается зависанием Иксов, он говорит о крахе X-сервера, а Linux тут ни причем. Тогда как падение Photoshop'а рассматривает в качестве признака нестабильности Windows.
Однако, по моему мнениею, для таких формулировок есть все основания. Ведь понятие стабильности ОС имеет две стороны - стабильность ее базового комплекта, и устойчивость системы к внешним воздействиям (со стороны приложений, выходящих за пределы базиса). Так что разрушение файловой системы под воздействием утилиты ее проверки (типа fsch) - безусловный огрех операционки. Но часто ли с такого рода явлениями приходится сталкиваться? Мне за последние года два-три - так ни разу.
А вот крах X-сервера или зависание KDE - это их сугубо личное дело, не имеющее отношения к Linux как операционки. Если, конечно, падение Исков не имело следствием полный down ее самой. Но и такого я за последнее время не припомню - как правило, после (по моим недавним впечатлениям очень редкого) вылета Иксов система не только продолжает нормально функционировать, но и позволяет запустить Иксы по новой. А часто ли удается перезапустить в том же сеансе зависший Corel, даже если его падение не привело к мертвому курсору мыши или синему экрану смерти?
Так что если отделить стабильность базовой системы от стабильности приложений (многие из которых, как те же Иксы, написаны не только для Linux'а и даже не столько для него), то мы имеем все основания рассматривать Linux как систему стабильную. Если иметь ввиду устойчивость Linux'а по отношению к воздействию тех же нестабильных приложений - вывод будет аналогичный. Ну а то, что эти нестабильные приложения суть часть Linux'а - верно только в одном смысле: да, они работают (в том числе и) в Linux'е. И при желании пользователя доступны ему под этой ОС. Однако считать StarOffice (еще недавно - супер-кросс-платформенный офис из всех офисов) исконно Linux'овым приложением было бы опрометчиво. Задачи, решаемые в Windows или MacOS с помощью офисных пакетов, выполнимы в Linux'е совершенно иными средствами, на стабильность которых жаловаться не приходится...