ОС без наркоза

Сразу предупреждаю: речь не про это. Набившее оскомину противостояние одинокого гиганта Microsoft своре ближних и дальних родственников Unix подходит к концу. С выходом Windows 8 стало понятно: это агония. На рынке операционных систем Microsoft больше не игрок. Задрали медведя — и радуйтесь.

Но сначала все-таки об этом.

Лично я большой разницы между Windows/DOS и любыми вариантами Unix/Linux так и не усмотрел. И то, и другое одинаково годится для решения типичных задач в области информационных технологий, равно как и большинства задач прикладного характера. Просто делается это разными способами в разных системах — причем различия между отдельными представителями клана Unix иной раз куда значительнее, чем их общее отличие от MS DOS. Насчет удобства — это дело личных пристрастий. Люди по большей части ленивы, и кто привык к одному — не хочет привыкать к другому. Опять же, по личному опыту, неудобств всюду хватает — это приятности еще поискать... Какие-то вещи, которые под Windows делаются легким движением мыши, в юниксах становятся неимоверно громоздкими, даже при наличии графической оболочки, а уж тем более без таковой. И наоборот, что-то под юниксом делается влет, а винду надо еще поуговаривать. Но проблемы тут, скорее, субъективного порядка — просто работать в юниксах как под Windows нежелательно, и наоборот.

Много спорят об эффективности и безопасности. Опять же — никакой разницы. Хорошо написать приложение можно под любую ОС. А если тупо переносить алгоритмы из одной в другую — ничего кроме тупости и не поиметь. Что качается безопасности — дырявость Linux уже давно стала притчей во языцех, а другие родственники остаются относительно безопасными исключительно из-за малой распространенности, так что взломщикам просто нет интереса с ними возиться. К тому же в любой ОС основные угрозы безопасности возникают не от глюков в системе, и даже не из-за корявостей в приложениях, — на 99% и более это человеческий фактор. Если оператор страшно конфиденциальной базы данных будет где-нибудь в кафе громко диктовать по телефону свои учетные данные кому-то из сослуживцев, чтобы те зашли в базу и что-то сделали от его имени... Я молчу.

А вообще, система доступов в Windows куда изощреннее, чем в юниксах, и допускает сколь угодно тонкие настройки. Только заниматься этим администраторам лень, а рядовому пользователю и подавно. Более того, стоит кому-то из айтишников всерьез заняться раздачей слонов — тут же валится начальственное возмущение и требование вернуть все как было. Чайнику, из которого поступают деньги, неудобно, когда чего-то нельзя. В одной организации, например, заместитель исполнительного директора считал себя большим знатоком компьютерного дела — и требовал дать ему администраторские права ко всем базам данных, чтобы он мог с ними свободно играть. Легко представить, чем потом приходилось заниматься информационному отделу!

Ходят легенды о несравненной стабильности юниксовых систем, об их способности работать без сбоев многие годы... Но если урезать функциональность Windows до той же степени, оставить небольшое количество простых задач, — завалить систему будет столь же трудно. В моей практике были примеры, когда Windows Server работал более десяти лет — и хоть бы что. При полноценной графической оболочке и с установкой нескольких сторонних приложений. На практике сервера падают чаще всего от проблем с питанием или кондиционированием — иногда из-за чьих-то программных корявостей или несовместимости. Перезагрузка реально требуется только при установке некоторых приложений, или после критических обновлений — так, ведь, и юниксы приходится перезагружать при настройке ядра.

Ну, какие еще могут быть различия? Разные файловые системы? Чепуха. Под Windows есть возможность работать с файловыми системами Unix/Linux, и наоборот, файловые системы Windows запросто монтируются в юниксах. Существующие несовместимости связаны не с принципиальной невозможностью сделать правильно, а с отсутствием желания что-то делать. Получается, что способы работы с файлами не привязаны к какой-то ОС, это всего лишь надстройки — каждое устройство требует подходящего драйвера.

Кстати, насчет устройств.

Непонятно почему, поклонники юниксов считают великим их преимуществом трактовку устройств как файлов, в отличие от DOS/Windows, где устройство — это устройство, а воспринимать его как файловую систему, вообще говоря, не обязательно. Единообразие? Это еще как посмотреть. Например, интернет-адреса начинаются с названия протокола, двоеточие, потом путь. Но именно это реализовано в Windows: название устройства (которое только для жестких дисков сводится к одной букве, и то не всегда) означает, по сути, ссылку на протокол доступа, и вполне логично отделять его двоеточием от последующего пути. А использовать прямой или обратный слэш — совершенно без разницы.

Отождествление устройств с файлами — пережиток первобытной эпохи, когда в качестве устройств выступали в основном клавиатура и терминал, изредка внешние накопители с такого же рода функциональностью. Но, например, представлять мышь файлом — это, положа руку на сердце, просто извращение, хотя технически ничего сверхъестественного. Куда разумнее здесь, например, парадигма потока, когда каждое устройство связывается с определенным протоколом обмена. Это годится и для будущих компьютеров, которые смогут считывать что-то прямо из мозга. Адресация типа "контейнер : путь" универсальна; она, например, хорошо согласуется с функциональным подходом, отвечая обычной схеме "функция : параметры", где в числе параметров могут быть и другие функции. Аналогично устроены ссылки на свойства и методы объектов, на поля и записи в базах данных и т. д. Уподобить объектную базу данных файловой системе можно — однако это ограничивает диапазон возможностей. Если в качестве контейнера (устройства) выступает оперативная память — мы возвращаемся (на новом уровне) к старой схеме адресации "регистр : смещение", где регистр уже не связан с физическим блоком, а задает некоторую логическую область (например, память, выделенная задаче или процессу; кстати, такая схема позволила бы значительно снизить риски сбоев в работе системы, вызванных утечками памяти). Устройство может быть реальным или виртуальным, оно может быть распределенным и т. д. Путь от этого никак не зависит, он связан лишь с организацией данных в пределах устройства.

Для пользователя ОС чаще всего представлена какой-то командной оболочкой. Традиция Unix явно оговаривает свободу в использовании таких оболочек и принципиальную возможность выбирать то, что больше нравится. Но, как ни странно, значительная часть критики Windows направлена именно против оболочки — хотя никому не возбраняется ее при желании поменять. Например, есть возможность загружать Windows в режиме DOS, и работать в режиме командной строки, вообще без графики. Есть возможность загружать в качестве оболочки Total Commander или иную программу (например, клиент базы данных). В конце концов, можно полностью скопировать ходовые оболочки Unix, обозвать устройства /dev/что-то-там — даже настройку при помощи конфигурационных файлов можно воспроизвести. Проекция системы доступов Windows на такую оболочку просто вырежет часть возможностей. Различия если и будут, то лишь при выходе за пределы собственно оболочки, при вмешательстве в работу системы. Значительная часть этой программы реализована под Windows в оболочке PowerShell, воспроизводящей многие черты юниксовых оболочек, вплоть до названий команд.

Операционная система — это просто набор программ (служб), занимающихся распределением ресурсов и запуском задач. Этот набор совершенно одинаков для Windows и Unix, с точностью до реализации, — а дальше все зависит от того, что мы делаем. Исторически эти ОС использовались по-разному, отсюда и кажущиеся расхождения; однако ничто не мешает и в той, и в другой решать одни и те же задачи.

Типичный образчик критики: вытаскивают на свет какую-нибудь команду Unix (типа grep) — и торжественно заявляют: вот видите, Windows этого не умеет!

Ну, во-первых, Windows это умеет, если написать соответствующую программу. Такого рода команды Unix — чисто оболочечное явление, от самой ОС никак не зависящие.

С другой стороны — зачем это уметь? Значительная часть возникающих в юниксах задач порождена особенностями традиционных надстроек над операционной системой. Unix появился на свет, когда практически все системные задачи сводились к обработке текста — а пользовательские приложения в основном занимались математическими расчетами. Логика системных оболочек приспособлена именно к этому. Для более сложных задач — требуется что-то изобретать, обходить ограничения. Так появляются платформы разработки типа Perl, Python, Ruby или PHP. В принципе, использование таких расширений не обязательно — достаточно уметь программировать на C и запускать специализированные программы с нужными параметрами. Минимализм — это в духе Unix; к сожалению, иной раз приходится всю жизнь расплачиваться за грехи молодости. Но не всегда. Например, чукотский язык прекрасно выражает опыт чукчи, оленевода или охотника. Можно говорить на нем и на отвлеченные темы, и даже есть примеры подобной литературы, — но зачем? Сподручнее выучить другой язык — пусть даже какие-то чукотские реалии на нем передать непросто...

Переключение консолей в Unix — наследие примитивности древних терминалов, умевших отображать только текст. Кичиться этим — все равно что с гордостью заявлять о врожденном заболевании. Много окон — гораздо удобнее, можно даже на одном экране параллельно работать с несколькими консолями. В принципе, ничто не мешает и под Windows связать с каждым окном свои права доступа — но опять же, зачем? Достаточно запустить свой сеанс для другого пользователя и переключаться при необходимости. Или запустить несколько виртуальных машин с разными системами. Кстати, еще до массового распространения графических оболочек под MS DOS существовали реально многооконные программы, и система управления окнами хорошо обкатана еще тогда. В системных приложениях Unix это почти не прижилось, там логика осталась на уровне одномерности командной строки. В наши дни графические оболочки — обязательное условие удобства и эффективности. На одном графическом экране можно отобразить объемы информации многократно превышающие возможности текстовой консоли. В частности, можно одновременно видеть разные срезы состояния сервера. Традиционно считают, что это излишне нагружает сервер, и особенно вредно в условиях интенсивного доступа по сети. Но чего стоит ОС, которая не в состоянии справиться со сколько-нибудь нетривиальной операцией, помимо пересылки байтов из одного места в другое?

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

Разумеется, можно написать красиво оформленную книгу в чисто текстовом режиме — например, есть такое гениальное изобретение как TeX. В конце концов, Web-страницы часто удобнее проектировать в обычном текстовом редакторе (без назойливой подсветки тегов), не привязываясь к благонамеренно встроенной кем-то куда-то методологии. Однако сколько-нибудь сложное форматирование требует в таком раскладе хорошо развитого воображения — или возможности постоянно контролировать, что получится. В итоге оказывается все же удобнее использовать полнофункциональный текстовый процессор — и здесь пока никто не переплюнул MS Word, подобно тому как Adobe Photoshop остается эталоном и пока недостижимым идеалом для остальных графических редакторов.

Массовая (пакетная) обработка текста возможно только там, где исходные данные устроены единообразно. Где просто невозможно задать их по-разному. Много ли таких ситуаций? Даже при администрировании серверов Unix каждый администратор вырабатывает свой стиль именования пользователей и компонент, свои правила размещения файлов. Подобная гибкость может, например, использоваться для повышения безопасности, ибо нестандартную конфигурацию труднее взломать. Однако в реальной жизни администраторы приходят и уходят, правила рождаются и умирают, — и в результате в конфигурации накапливается достаточное количество хаоса, чтобы сделать массовые единообразные замены занятием по меньшей мере рискованным. Попробуйте скачать с веба (из разных источников) пару сотен книг — и привести их названия к единообразному формату. Никакие регулярные выражения тут не спасут — остаются только крепкие выражения по поводу... Можно, конечно, потратить в несколько раз больше времени и написать универсальный преобразователь. Однако при скачивании очередной книги его универсальность тут же рухнет, и все придется начинать сначала. А полагаться на автоматику при изменении конфигурации серверов или рабочих станций — слишком дорогое развлечение.

Первобытные базы данных представляли собой особым образом организованный текст; точно так же создавались первобытные документы. В этих условиях автоматическая обработка текста была эффективна — она была и способом управления данными, и языком построения отчетов. С появлением более мощных движков и повсеместного перехода к двоичным форматам появились иные, более удобные средства. Хотя и здесь можно усмотреть пережитки далекого прошлого: например, реляционная идеология — это минимальное обобщение текстовых баз древности, только поля теперь могут быть и двоичными. Но, по большому счету, современная ОС есть программа работы с системными базами данных — и когда-нибудь именно это станет основной парадигмой в системном программировании. Разумеется, с учетом печального новаторства той же Microsoft и неуклюжести ссылок в "хороших" браузерах, вроде Firefox.

Затянувшийся экскурс в историю великого противостояния завершим маленьким идеологическим наблюдением. На самой заре компьютерной эры оператор, программист и пользователь компьютера совмещались в одном лице. Потом эти функции разделились, и для рядового пользователя использование компьютера свелось к небольшому набору типовых действий — при этом компьютер неизбежно приобрел черты загадочности и непостижимости, а для укрощения этой глюкавой уродины требовался шаман-системщик. Такова идеология Unix: компьютер — божество, а человек создан для того, чтобы молиться на него и приносить ему жертвы; сисадмин — великий жрец у алтаря.

Основатели Microsoft предприняли романтическую попытку научить компьютер делать наоборот: то, что нужно человеку, и в том стиле, как это удобно человеку. Отсюда особое внимание к интерфейсу. К сожалению, они не учли, что человек, на которого все это было рассчитано, к рядовому пользователю имеет минимальное отношение. Безрогие двуногие не хотели и пальцем пошевелить ради собственного удобства, им надо было все сразу на блюдечке. Куда проще свалить ответственность на потусторонние силы — кому-то о чем-то помолиться, кого-то о чем-то попросить... На этом стояли и стоят все религии. Например, агрессивность приверженцев Unix — в книгах по технологиям Microsoft меньше глупого самодовольства, они спокойно-информативны. Можно уважать специалистов Microsoft за то, что в атмосфере откровенной травли они серьезно работали, используя чей угодно опыт, в том числе и опыт Unix.

В Apple все начиналось на той же идее: компьютер для человека — но под человеком они понимали безмозглое существо, неспособное самостоятельно что-либо объяснить машине. В результате компьютеры Apple стали вещью в себе, которую нужно просто принимать как есть, без попыток что-либо подстроить и приспособить. Маки, айфоны и айпады очень удобны — для тех, кому нужно именно такое удобство. Включил — и доволен.

Сухой остаток: есть разные ОС, все они делаю примерно одно и то же, и любые предпочтения — дело сугубо личное. Сравнивать одно с другим совершенно бесполезно. Это просто разные инструменты, и грамотный админ должен уметь пользоваться и тем, и другим.

И вот тут мы переходим к сути вопроса.

А суть такова: все эти юниксы, винды, макоси, андроиды и прочее — только верхушка айсберга, то, что видно каждому. А операционных систем значительно больше, многие сотни или даже тысячи. Чуть ли не всякая железяка в наши дни имеет встроенную ОС, и конфигурирование железа уже давно не сводится к перестановке джамперов — можно запустить специальную настроечную программу, или просто открыть страницу в браузере. Иногда производители не заморачиваются выпуском своих операционок, а просто ставят какой-нибудь урезанный клон Unix и настраивают под себя. Для того, чтобы энное количество байтов направить из одного места в другое, этого вполне достаточно.

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

Таким образом, есть не одна изолированная операционная система — а иерархия операционных систем. Как водится, уровни этой иерархии начинают перемешиваться, перенимать функции друг у друга — и возникают новые иерархические структуры, которые иначе делают то же самое. Это так называемые обращения иерархии. Появляются также механизмы коммутации разных иерархических структур — тоже разновидность ОС, —иерархическая система. Как и во всякой иерархии, разделение уровней относительно. Несколько ОС разных уровней могут образовать устойчивую комбинацию, которая работает как одно целое — иерархия свертывается. С другой стороны, на одном уровне можно выделить ряд задач в особую подструктуру, которая будет играть роль ОС по отношению к части приложений. Так происходит развертывание иерархии. Например, сервер Domino может быть установлен поверх Unix или Windows — при этом он берет на себя часть системных функций, определяемую его собственной конфигурацией, независимо от конфигурации ОС. В свою очередь, поздние версии Domino надстраиваются над платформой Eclipse, а, например, управлять генерацией Web-страниц Domino может либо напрямую — либо через любую систему интерпретации скриптов CGI (например, PHP). В какой-то мере, разные оболочки в рамках одной ОС могут считаться операционными системами промежуточного уровня; тем более это справедливо по отношению к виртуальным машинам вроде Erlang, Python или Ruby. В индустриальном программировании широко используются разного рода стандартные библиотеки (платформы разработки) — это еще один пример развертывания иерархий. Наконец, на аппаратном уровне есть иерархия микропрограмм как переходное звено от собственно железа к BIOS и ОС высокого уровня.

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

Когда одна система пытается противопоставить себя всем остальным — это сепаратизм. А сепаратизм — явление сугубо экономическое, орудие конкурентной борьбы. Вот и выходит, что полезное многообразие вырождается в бессмысленное противостояние, а любая ценная находка опошляется, становится оружием в экономической войне. Но войны — для дикарей. Разумным людям воевать незачем. Они все делают вместе, для общего блага, а не против друг друга.


[Компьютеры] [Наука] [Унизм]