Что нам стоит ОС построить?..

За последние десятилетия сильно упростился не только процесс работы на компьютере, но и процесс создания новых приложений. Современные средства визуальной разработки позволяют практически любому продвинутому пользователю создавать довольно-таки сложные программы. Ну а появление «конструкторов игр» сделало создание какого-нибудь платформера, квеста или 2D-шутера не более сложным, чем создание нового документа в Word'е. Впрочем, у сторонников «истинного программирования» остался последний бастион — операционные системы. Создание оригинальных ОС, не основанных ни на одной из уже существующих, по-прежнему остаётся уделом настоящих программистов. Тем не менее, на свете есть много людей, которые готовы взяться за сей титанический труд. Данная статья посвящена именно им — мечтающим о лаврах Билла Гейтса и Линуса Торвальдса. Мы разберём основные аспекты создания операционных систем, а также представим вашему вниманию несколько готовых ОС, которые можно использовать в качестве «стартовой площадки».

Перед тем, как начать...
Итак, вы решили создать свою собственную «операционку». Первым делом, задайте себе вопрос: зачем вам это? Если вы хотите заработать много денег или получить всемирную известность, — одумайтесь! Как показывает история, проекты, которые создаются исключительно ради достижения подобных алчных целей, мертворождены (если, конечно, речь не идёт о разработках, инициированных крупными софтверными компаниями). И наоборот: такие популярные системы, как Linux или MenuetOS, создавались без какого-либо расчёта на будущий успех или возможность «срубить бабла». К тому же не стоит забывать, что в наше время просто невозможно создать оригинальную ОС, которая смогла бы конкурировать с ведущими мировыми системами, тем более в одиночку. Ну а если вы планируете создать операционную систему лично для себя, например, для совершенствования своих познаний в программировании или для решения каких-либо специфических задач — можете смело приступать к разработке.
Кстати, о знаниях: не стоит наивно полагать, что умея создавать несложные программы на Visual Basic, вы имеете право гордо называться «программистом» и браться за создание целой ОС (а этим, к сожалению, грешит большинство «системных разработчиков»). Как уже было сказано ранее, проектирование и разработка операционных систем требуют знания низкоуровневых языков, таких как ассемблер и C (знание последнего, правда, необязательно, однако оно поможет существенно сэкономить время, потраченное на разработку). И никаких «изучу во время работы»: начинать разработку ОС без уже накопленного багажа знаний так же нелепо, как пытаться сочинить стихотворение на английском языке, не зная ни одного слова по-английски.
Кроме того, человек, желающий создать операционную систему, обязан досконально знать внутреннее устройство ПК, ну а наличие свободного времени и целеустремленность являются вообще чуть ли не наиболее важными факторами, влияющими на успех проекта.

Система изнутри
Из чего состоит операционная система? Если рассматривать наиболее простой вариант, то в ОС можно выделить три основные части: ядро, загрузчик и оболочку.
Ядро (kernel) — основная и наиболее важная часть операционной системы. Его можно сравнить с двигателем автомобиля: без него всё прочее бесполезно. Ядро обеспечивает связь программной составляющей компьютера с аппаратной, обеспечивает работу приложений и распределяет между ними системные ресурсы.
Однако от ядра самого по себе, как ни странно, тоже невелика польза. Начнём хотя бы с того, что ядро не может загрузить само себя в оперативную память компьютера. Этим занимается загрузчик (bootloader или bootstrap) — небольшая низкоуровневая программа, располагающихся в первых секторах системного диска. Продолжая аналогию с автомобилями, загрузчик — это стартер: казалось бы, небольшая деталь, однако какую же важную роль она играет! Кроме того, загрузчик, помимо выполнения своей основной функции, обеспечивает работу других приятных мелочей (взять хотя бы вывод на экран загрузочной заставки или надписи «Starting OS...»).
И, конечно же, не стоит забывать об оболочке (shell) — «руле» и «педалях» операционной системы. Именно оболочка отвечает за взаимодействие ОС и пользователя, и именно её мы представляем себе в первую очередь, когда слышим слово «система». Практически во всех современных операционных системах оболочки имеют графический интерфейс, однако в некоторых специализированных системах, а также в ОС прошлого (таких как MS-DOS) используются текстовые оболочки, которые ещё называют «командными интерпретаторами». В качестве исключения можно привести псевдографические оболочки, которые хоть и используют элементы графических интерфейсов (меню, окна и тому подобное), однако фактически работают в текстовом режиме, однако их доля так мала, что их обычно и не принимают в расчёт.

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

Кто меня научит?
«Если хочешь научиться программировать, посмотри, как это делают другие» — эту фразу знает, пожалуй, каждый, кто хоть раз сталкивался с разработкой программ. Данное изречение как нельзя кстати подходит к теме этой статьи: существует целый ряд операционных систем, которые не иначе как «учебными ОС» назвать не получается. Сами посудите: с одной стороны, эти системы малофункциональны, в основном загружаются с дискеты и почти не имеют сторонних приложений, однако, с другой стороны, они имеют открытые исходные коды, несложную внутреннюю структуру и толково составленную документацию. Эти ОС созданы как раз для того, чтобы любой желающий мог научиться системному программированию и создать собственную «операционку». Давайте рассмотрим несколько наиболее известных учебных операционных систем.

В первую очередь обратим наше внимание на проект MikeOS. Эта любительская операционная система может похвастаться наличием аж двух оболочек — текстовой и псевдографической, — а также относительно большим количеством дополнительных программ, среди которых есть и интерпретатор BASIC. MikeOS невероятно неприхотлива: её можно без проблем запускать даже на машинах с процессором 80386, а в оперативной памяти она занимает около мегабайта. Подобные системные требования позволяют запускать MikeOS через эмулятор чуть ли не на всем, что имеет процессор, начиная от старого КПК и заканчивая планшетом. Система написана на ассемблере NASM, а приложения для неё можно писать не только на «асме» и BASIC, но и на C. У MikeOS есть множество клонов, наиболее развитый из которых — Atom Core OS — имеет даже поддержку некоторых DOS-приложений и игр.

MikeOS

MikeOS

А вот BareMetal OS от группы разработчиков Return Infinity — проект совершенно другого рода. Когда попадаешь на официальную страницу проекта, понимаешь, что систему разработали и поддерживают серьёзные люди, и сама она служит для серьёзных целей. Действительно, обучение — всего лишь побочная цель проекта BareMetal OS, а основным назначением этой системы является работы в высокопроизводительных вычислительных системах. Функционал этой крохотной ОС (BareMetal OS занимает немногим более 16 Кбайт) поражает: она имеет поддержку многоядерности, многопроцессорности и даже позволяет работать с некоторыми сетевыми картами! Несмотря на то, что на момент написания статьи через сеть можно было лишь обмениваться сырыми данными, разработчики пообещали в будущем внедрить в систему поддержку протоколов TCP и UDP, и, судя по их твиттеру, у них уже кое-что получается. Что интересно, как такового образа диска с этой системой на сайте нету, а вместо этого предлагается скачать исходные коды и самому скомпилировать её — по мнению автора, весьма удачный ход, призванный отпугнуть «чайников» и подтолкнуть всех остальных к созданию своих модификаций BareMetal OS.

BareMetal OS

BareMetal OS

Напоследок расскажем о Flop OS, отечественной разработке, которая, несмотря на преклонный возраст и многолетнее отсутствие апдейтов, всё ещё может сослужить верную службу желающим создать свою операционную систему. Фактически, Flop OS является единственной учебной системой с полной поддержкой русского языка, причём как при редактировании файлов, так и в приложениях. Если вы хотите, чтобы ваша ОС поддерживала киррилицу, тогда вам нужно в любом случае бросить свой взгляд на «флопа». Кстати, если Flop OS вас заинтересовала, обратите внимание и на операционную систему GIOS — форк «флопа», отличающийся от оригинала наличием более функционального файлового менеджера.

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


Рекомендуем почитать: