Часть первая: мы вообще о чём?

В этой серии лабораторных записок я попытаюсь суммировать интересный опыт нескольких послерабочих вечеров: сборку маленького учебного unikernel’а на базе MirageOS.

Консольный вывод юникернела в эмуляции VM

Unikernel — это фреймворк для разработки приложения, которое будет запускаться в некоторой среде виртуализации по принципу “один компьютер — один процесс”. То есть, в некотором роде это возврат из мира многозадачных многопользовательских ОС общего назначения в мир “прошивок”. В ином роде — это выход на тот уровень создания приложений, когда роль ОС выполняет система управления гипервизорами/докерами и прочими виртуализаторами, а приложение живёт в своей маленькой очень-быстро-загружаемой, взломали-ну-и-ладно, упала-ну-и-не-жалко капсуле. Также unikernel можно себе представить как виртуальную машину, в которой “железо” редуцировано до нескольких очень простых управляемых гипервизором девайсов, а приложение является само себе операционной системой с “микроядром” — тоненьким загрузчиком/монитором на манер старинной MS-DOS.

В интернетах энтузиасты юникернелов тусуются вокруг сайта unikernel.org — там можно начать погружение в проблему, посмотреть ссылки и картинки и узнать, какие библиотеки и на каких языках используются для создания этих странных микросервисов. Например, там можно увидеть недвусмысленный намёк на то, что одна из основных “фишек” технологии — легко управляемая безопасность приложения — в случае пролома кульхацкер получит доступ к… бинарнику программы (а дальше как уж гипервизор разрешит). Специалисты называют это “малая площадь атаки”. Плюс, код одного приложения на высокоуровневом языке программирования гораздо проще отревизировать на предмет дырок и багов, чем код приложения, код шелла и код ядра ОС, где всё это изделие запущено.

Схема Unikernel vs. OS Guest VM с сайта mirage.io

Юникернелы пишутся на разных языках с соответствующими библиотеками. На приведённом сайте есть примеры проектов на C, Haskell, Erlang и, конечно, OCaml. Разработанная на OCaml MirageOS — едва ли не первый успешный проект полностью зрелой «library OS» (ещё одно прозвище юникернелов). Поучительно, что сайт проекта с сопутствующим блогом реализован как юникернел, что как бы внушает. А ещё я хорошо знаю OCaml, и потому эксперимент именно с продуктом на этом языке (функциональном, нативно-компилируемом, быстром, стриктовом, с сильной типизацией и выводом типов по Хиндли-Мильнеру и ваще) показался мне наиболее безболезненным.

Пример текста приложения

OCaml и MirageOS ещё вернутся, а я пошёл в магазин за едой.

--

--