суббота, 30 мая 2015 г.

Alternative OS - Part 5: Fiasco.OS, Genode, L4Linux, etc...

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



На сегодняшний день существует достаточно большое количество клонов L4, из-за этого я не в силах описать каждый в отдельности. Поэтому в этой главе я опишу только те что попробовал собрать и главное запустить (правда не все получилось и не все заработали так как и планировалось разработчиками).
Хочется предать отдельный привет разработчикам GCC, т.к. без их стараний мне бы не пришлось проводить часами за кодом который "вдруг" перестал работать на более новой версии ихнего тулчейна.

Итак начнём, для начала мы будем рассматривать чистые форки и клоны L4, затем плавно перейдём к гибридам и в завершении я расскажу о том что планируется далее.

Fiasco.OS
Являясь продолжателем традиции L4:Ka эта ос принесла в себе много нового. Во первых была пересмотрена архитектура планирования в угоду совместимости с современным оборудованием. Язык написания такой же как у оригинала - С++ (с применением шаблонов, макросов и ассемблерных вставок). Также основным нововведением стал изменённый набор поддерживаемых архитектур: х86, х86_64, ARM (ARMv4, ARMv5, ARMv6, ARMv7). (PPC убрали из-за того, что отсутствует пользователи этой архитектуры). Что говорит о том что произошла смена ориентации в первую очередь на мобильные решения. Также можно добавить что перенос на новую платформу в рамках любой архитектуры не составляет больших проблем и не занимает много времени:
На скриншоте можно наблюдать запуск Fiasco.OS в виртуальной машине, с поддержкой графической оболочки и с наличием ускорения графики.

Существенным нововведением стала возможность запуска Fiasco.OS из под Linux в режиме программы пользователя - Fiasco-UX. Данное решение позволяет наиболее быстро и качественно отлаживать основные приложения и системы без сборки виртуальной машины и без реального аппаратного решения:
На прилагаем скриншоте видно как происходит запуск простейшего приложения Hello World на ядре Fiasco-UX. Также по нажатию Ctrl+C, Esc также доступен ядерный отладчик. У Fiasco.OS свой собственный репозиторий приложений и библиотек в том числе и полноценная библиотека С/С++ для запуска обычных приложений пользователя.
В целом за небольшими исключениями это полноценный наследник L4:Ka имеющий более продуманную архитектуру загрузки системы и спокойно собираемый большинством тулчейнов (в том числе и GCC 4.9.2).

Genode
Это не совсем ОС а скорее фреймворк который может быть развернут в том числе и поверх ОС c архитектурой L4. Я не буду заострять на нем внимание так как текущая версия этого фреймворка показала свою несостоятельность в виде дистрибутива (мне не удалось собрать сколь угодно стабильную версию ПО, которое бы можно было запустить). Сильно переработанный архив библиотек (по сравнению с Fiasco.OS), затруднил сборку сделав её невозможной. Да и на современном тулчейне GCC 4.9.2 половина утилит либо не собралась, либо не заработала.
В итоге мне нечего даже показать касательно этого ПО.

L4Linux
Это не другое ядро, это адаптационные дополнения к основному ядру Linux Kernel, позволяющие запускать его в качестве процесса или сервиса в окружении ОС с L4 API.
Уровень абстракции таков, что позволяет ядру Linux работать и обмениваться сообщения с остальными потоками запущенными в L4 ядре, также существует возможность доступа к физическим устройствам через регионы безопасности, что позволяет не терять производительность на различных уровнях.
Запуск системы не сопровождается ничем сверхъестественным и возможен после непродолжительного изучения документации:
Как видно из скришнотов я попытался запустить ядро L4Linux в Fiasco-UX, получилось не очень успешно, т.к. в режиме пользователя не доступна блокировка процессора.
Однако в виртуальной машине данный запуск возможен:
При этом запуск возможен как консоли так и графического интерфейса пользователя (на базе графического сервера X.org):
Данное решение зарекомендовало себя как надёжное и имеет ответвление L4Android, участники которого занимаются запуском дистрибутива Android на ядре Fiasco.OS.

В этой главе я умышленно не стал рассматривать другие ответвления L4 API, т.к. они требуют к себе особого внимания. Также из обзора были исключены те решения которые я ещё не пробовал собирать и запускать как в виртуальном окружении так и на реальном железе.

В заключении этой главы хочется добавить что следующая глава будет посвящена запуску различных модификаций L4 ОС, на не x86 архитектуре.

На этом всё.