среда, 17 ноября 2010 г.

Легко ли написать операционную систему?

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

Давайте попробуем расставить точки над Ё. Не претендуя на историческую точность, попробуем рассмотреть аспекты подобных поползновений.

Существует три возможности написать собственную операционную систему.

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

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

Третья - самая простая и наименее затратная, поскольку зачастую позволяет практически в одиночку достичь некоего результата (оставим пока в покое качество этого самого результата). Взять Линукс, добавить к нему пару-тройку самолично придуманных костылей, или перекрасить мордашку при неизменном ядре, добавить поддержку марсианского языка и марсианской криптографии, или залезть в ядро и внести в него свои изменения (с блэкджеком и шлюхами). Обозвать это гордым именем XyzOS и вывалить на всеобщее использование как прорыв в IT.

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

Помимо того, каждый анонимус, едва научившись писать на Си Hello, world! кидается ваять свой собственный дистрибутив. Зачем - нормальному человеку не понять никогда.

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

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

В общем-то, ежу ясно, что для написания действительно оригинальной и полной ОС нужны огромные усилия, идеи и ресурсы. В том числе человеческие.

Просто смеха для - не точности ради - давайте взглянем, какие компоненты ОС нужны по минимуму:

1. Ядро. От нескольких миллионов до десятков миллионов строк кода.
2. Драйверы устройств. Для поддержки даже минимального количества оборудования драйверы должны быть написаны или позаимствованы у вендоров в виде блобов. Количество кода исчисляется примерно такими же порядками, что и у ядра.
3. Юзерспейс, или, как часто говорят, мир. В зависимости от того, какого масштаба среду мы представляем конечным пользователям, объем кодирования не лимитируется.

В идеале, все три части написаны в едином ключе, с едиными архитектурными подходами, следуют определенным стандартам, используют единый внутренний API, имеют единообразный подход в пользовательских интерфейсах, имеют совместимость на большей части уровней с существующими структурами итп.

Но все это в идеале. Как я и говорил, проделать такую работу в одиночку не представляется возможным.

А как же Линус?

А Линус не писал систему с нуля. Если уж быть совсем точным. Он видел ядро миникс и отталкивался уже от написанного кода. Им самим было написано лишь ядро. Все барахло, которым потом облепили это ядро и гордо обозвали GNU/Linux суть лишь коллекция объедков со стола промышленных UNIX разнородных утилит, функционал которых позаимствован сообществом GNU и воспроизведен в меру своих скромных способностей.Ах да, еще X11 и гуй. Точнее, гуи, количество которых зашкаливает за все разумные пределы.

Ничего подлинно революционного Линукс не содержит физически. Если уж руководствоваться критериями оригинальности.

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

Все без исключения форки BSD - позаимствовали кодовую базу Университета Беркли.
Solaris - построен на кодовой базе AT&T (System V). Справедливости для заметим, что Солярис прошел большой путь и был переписан процентов на сто. Практически, сейчас это самостоятельная ОС.
HP/UX - построен на кодовой базе AT&T.
IRIX - кодовая база AT&T. Благополучно померла в пользу RHEL.
AIX - построен на кодовой базе AT&T System V.
Windows (NT) - частично оригинальная разработка от создателей VMS. Что и позволило ей стать настоящим хитом на фоне тогдашнего десктопного бардака.

Следует заметить, что самых последовательных, логичных, непротиворечивых и внятных результатов достигают те команды (даже пользующиеся не собственной кодовой базой), которые имеют авторитарное управление, в стиле Тео де Раадта. Это, кстати говоря, является причиной, по которой OpenBSD имеет архитектурную стройность, целостность и завершенность, в противовес FreeBSD, которая монструозно разрастается, постепенно воспроизводя путь Линукс (про сообщество Линукс лучше не говорить ничего, потому что ежу ясно - не самому сообществу - что сто миллионов обезъян "Сон в летнюю ночь" не напишут ни случайно, ни целенаправленно. Лучший способ угробить неплохую, в общем-то, операционку - отдать ее полные исходники в лапы сообщества. По моему скромному ИМХО. После чего будет наклепано несколько сотен версий и версиек, отличающиеся иногда только логотипом - например, пингвином в бронежилете. Как говаривал еще В.И. Ленин, "Лучше меньше да лучше". Потому что лично мне культ компьютинга глубоко чужд. Я хочу выбрать одну ОС и пользоваться ей очень долго. Установки и перустановки ОС с целью занять себя - да и с любой другой целью - не являются моим национальным видом спорта).

Возвращаясь к нашему первоначальному тезису.

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

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

Ага, щаз. Нам еще национальных дистров линуксовых до кучи не хватает. Уже есть дистры медицинских работников, на очереди сборки работников образования, ну и далее пошло поехало.

Это называется экстенсивное развитие. Говоря простым языком, развитие в ширину. Линуксы превращаются в несуразную, архитектурно неоднородную коллекцию портов и пакетов, до которой становится далеко всеми оплеванной Windows! "И эти люди запрещают мне ковырять в носу!"

На фоне всего этого циклопического зоопарка, Windows выглядит настоящим ангелочком. С крылышками. По-крайней мере, в нее не вносят "улучшения" все, кому не лень. И слава богу.

Каким чудом сотни дистрибутивов хотя бы частично работают относительно стабильно - мне непонятно.

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

PS. Последней действительно прорывной системой последнего десятилетия, по моему личному мнению, стала Solaris 10. Этому способствовало и частичное (Не полное!) раскрытие кода, и достаточно четкий и жесткий процесс внесения инноваций из опенсурса в основное дерево исходников, и желание ведущих разработчиков действительно внести ряд кардинальных изменений. Все другие системы если и развивались - то никак не революционно. Некоторые так и остались в двадцатом веке.