Насколько сложно написать свою операционную систему?

Концептуальная плата REX и простой процессор WRAMP
Концептуальная плата REX и простой процессор WRAMP разработаны специально для обучения студентов компьютерной архитектуре, системному программированию и ассемблеру

Десять лет назад ходили анекдоты про Дениса Попова, который долго и упорно настаивал, что написал свою операционную систему «с нуля». Это считалось своеобразным синонимом «изобрести велосипед», то есть совершенно бессмысленной тратой времени. Анекдотизм ситуации состоял в том, что школьник из Нижнего Тагила скопировал Ubuntu, но был искренне убеждён в уникальности своего проекта.

Но действительно честная попытка написать свою операционку — не такое уж и бесцельное занятие (кстати, как сконструировать велосипед с нуля). По ходу дела может оказаться, что некоторые казавшиеся «очевидными» детали современных ОС спроектированы совсем не оптимально. Или вовсе не нужны. 

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

Человек, которого до сих пор вспоминают

Наверное, на фразе «новая операционная система с нуля» линуксоиды со стажем тепло и ласково улыбаются, вспоминая легендарную BolgenOS.

История началась с поста на ЛОРе от 31 декабря 2009 года, который впоследствии разошёлся на мемы:

«Привет всем кто пользуется системой Linux! Я пишу систему (точнее собираю для нее дистрибутив, вскоре будет готова). Назвал ее Bolgenos. Дописал на qt4 программы для GNOME (пока это основная среда рабочего стола), добавил апплеты для панелей и переписал модуль загрузки на свой лад. Систему я делаю с нуля (не переделывая Debian или Ubuntu). В качестве шелла Bash, а загрузчик GRUB. Установщик для системы я написал, и работает он в графическом режиме. Будет ориентирована на российских пользователей (но английский я оставил).

Уважаемые пользователи Linux пишите то что Вы хотите увидеть в этой системе или как говорится ваши пожелания. По возможности постараюсь включить всё в дистрибутив и сделать его как можно удобнее, обещаю его онлайн поддерживать :-)»

Как выяснилось впоследствии, автор не шутил. «Гениальным» программистом оказался Денис Попов, ученик 11-го класса школы №55 из Нижнего Тагила. На некоторое время «российский умелец» стал звездой теленовостей, презентация своей сборки Ubuntu он провёл на форуме «Юные интеллектуалы Среднего Урала».

В вышеупомянутом треде Денис пожаловался на недоброжелателей: «Такие люди как вы постоянно пишут, что у меня это не получится. Я докажу всем, что мой проект станет лучше, чем Debian».

Анонс BolgenOS долгое время занимал 1-е место среди самых заминусованных топиков на Хабре (?268), пока не убыл удалён создателем (карму опустили до ?641).

Денис Попов - создатель BolgenOS

Хотя имя Дениса Попова со временем стало нарицательным, как сама BolgenOS, «Антивирус Попова» (ClamAV) и «нескучные обои», однако всей компьютерной тусовке школьник убедительно доказал: синдром Даннинга-Крюгера существует. Как заявил Денис на форуме: «Когда я чего-то хочу, то я добьюсь это с такой скоростью, с какой вам это не снилось!» Здесь комментарии излишни.

Концепция научного прогресса

Предполагаемое метакогнитивное искажение у российского школьника не должно отвлекать от важного факта — неизбежности научного прогресса.

Ведь никто не будет спорить, что появление новых операционных систем и браузеров неизбежно. Да, стоимость таких проектов в трудозатратах с каждым годом растёт. Но это не отменяет фундаментальный закон о неизбежности научного прогресса. В современной науке распространена идея, что научное знание аккумулируется со временем. Поэтому прогресс часто считается «объективным законом реальности». Другими словами, многие учёные современности уверены в том, что учёные будущего будут знать больше их. И чем дальше в будущее — тем больше их знание. Кто-то может сделать вывод, что если прогресс стремится к бесконечности в случае линейного накопления знаний, то современные знания о мире стремятся к нулю.

Так или иначе, но желание создавать глобальные проекты «с нуля» кажется вполне естественным следствием концепции научного прогресса.

«Улучшенный Unix»

Создатели Unix — Деннис Ритчи, Кен Томпсон и их коллеги из Bell Labs — гениальные люди. Естественно, они понимают, что никакая программа по определению не может быть идеальна. Многое зависит от контекста, в котором создаётся проект.

Другими словами, если бы ядро Unix писали сегодня, оно бы выглядело иначе. Это довольно важный факт, учитывая статус *nix-подобных систем в современном мире как самого популярного семейства ОС практически на всех типах компьютеров, кроме десктопов.

Сами создатели Unix в 80-е годы реализовали альтернативный дизайн операционной системы, которую в шутку назвали Plan 9. Эта система должна была преодолеть принципиальные недостатки Unix. В частности, дизайн базируется на трёх основных принципах:

  • Все ресурсы представлены как файлы и доступны в иерархической файловой системе.
  • Локальные и удалённые ресурсы не различаются, для доступа к ним реализован стандартный протокол 9P.
  • У каждой группы процессов собственное пространство имён, собранное из файловых иерархий, предоставленных различными ресурсами.

В отличие от современных операционных систем, в которых пользователь получает доступ к конкретному компьютеру, в Plan 9 он получает доступ к распределённой вычислительной среде. Например, в оригинальной статье «Использование пространств имён в Plan 9» (Роб Пайк, Дэйв Пресотто, Кен Томпсон, Говард Трики, Фил Уинтерботтом) приводится такой пример: файл /dev/mouse на компьютере содержит последний 1 байт состояния кнопки и 4 байта состояния каждой из координат курсора мыши, причём это может быть не тот компьютер, к которому физически подключена мышь. Наверное, формулировка звучит немного странно для пользователей, привыкших к терминам централизованной вычислительной среды. По факту в Plan 9 команда cpu запускает удалённую сессию на вычислительном сервере, куда экспортируется локальное пространство имён, включая мышь и дисплей. Таким образом, удалённые программы могут нормально взаимодействовать с мышью на локальном терминале, словно это их мышь.

Впоследствии некоторые идеи Plan 9 были частично реализованы в других ОС:

  • концепция служб через файловую систему частично реализована в Linux;
  • минималистский дизайн оконной системы Plan 9 многократно воспроизведён в разных ОС;
  • кодировка символов UTF-8, повсеместно используемая сегодня в браузерах, была изобретена и впервые реализована в Plan 9;
  • дизайн Plan 9 предвосхитил сегодняшние микросервисные архитектуры более чем на десятилетие.

Другие идеи распределённого дизайна, возможно, будут реализованы в будущем.

Мини-Unix

Одна из современных попыток создания новых ОС — Winix. Минималистичная ОС, написанная исключительно в образовательных целях для микропроцессорной архитектуры Waikato RISC Architecture Microprocessor (WRAMP). Процессор сам про себе разработан в образовательных целях, с кастомным ассемблером, похожим на MIPS. Автор говорит, что в разработке вдохновлялся идеями ОС Minix (сокращение от mini-Unix).

Winix включает в себя полнофункциональное ядро с управлением процессами и памятью, файловую систему в памяти (in-memory file system, типа ramdisk) с почти полной поддержкой стандарта POSIX, контроль исключений и оболочку Bourne с интерактивным терминалом, поддержкой конвейеров из нескольких команд с перенаправлением ввода-вывода и т.д.

Запустить систему можно в программном симуляторе платы REX с процессором WRAMP. И эта плата, и симулятор разработаны специально для обучения студентов архитектуре компьютерных систем. Подробнее см. в научной статье.

В него загружаем бинарник Winix (кнопка Quick Load). Терминал работает через Serial Port 1:

Serial Port 1
Serial Port 1

Список поддерживаемых команд см. здесь. Например, вот snake.c, игра «Змейка». 

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

Winix разработана для платформы RISC, а сейчас стремительно набирает популярность открытая архитектура RISC-V. Всё больше компаний начинают выпускать совместимое оборудование, да и разные ОС начинают поддерживать RISC. 

В наше время появление новой операционной системы — вовсе не уникальное событие. Например, из последних концептуальных ОС можно назвать BarrelfishUnikraftRedLeaf, ту же Fuchsia, хотя она ориентирована на мобильные устройства. Активность на конференциях вроде SOSPOSDIEuroSys и HotOS демонстрирует, что в системной разработке в последние годы идут очень бурные и интересные исследования. Хотя 20 лет назад Роб Пайк пессимистично высказался о застое в данной области, но сейчас это точно не так. Может быть, количество новых операционных систем на конференциях даже вернулось на пиковый уровень 1980-х годов (6-7 в год). Но остаётся некое ощущение, что академические разработки в сфере системного программирования получают недостаточно внимания со стороны бизнеса и государства, поэтому учёные уходят в другие области computer science вроде дата-майнинга и аналитики, где финансирование куда лучше.