Дмитрий Завалишин разказа за проекта по портироване на виртуална машина на операционната система Phantom, за да работи в среда на микроядрена ОС Genode. В интервюто се отбелязва, че основната версия на Phantom вече е готова за пилотни проекти, а версията базирана на Genode ще бъде доведена до готовност за приложение в края на годината. В момента на сайта на проекта е заявен само работещ концептуален прототип, чиято стабилност и функционалност не са доведени до ниво, подходящо за индустриална употреба, а сред близките планове се споменава формирането на алфа-версия, подходяща за експерименти от трети разработчици.
Кодът на проекта се разпространява под лицензия LGPL, но последното изменение в основното хранилище е датирано от ноември 2019 година. Свързаната с проекта публична активност е съсредоточена в хранилище с форк за Genode, който от декември 2020 година се поддържа от Антон Антонов, студент от университета Иннополис.
Операционната система Phantom от началото на 2000-те години се развиваше като личен проект на Дмитрий Завалишин, а от 2010 година беше прехвърлена под крилото на компанията Digital Zone, създадена от Дмитрий. Системата се отличава с ориентация към висока надеждност и използване на концепцията „всичко е обект“ вместо „всичко е файл“, което позволява да се заобиколи употребата на файлове чрез запазване на състоянието на паметта и непрекъснат цикъл на работа. Приложенията в Phantom не се завършват, а само се спират и възобновяват работата си от прекъснатата точка. Всички променливи и структури от данни могат да се съхраняват толкова време, колкото е необходимо на приложението, като в същото време программистът не трябва да се грижи специално за запазването на данните.
Приложения в Phantom се компилират в байткод, който се изпълнява в стекова виртуална машина, подобна на Java виртуалната машина. Виртуалната машина осигурява персистентност на паметта на приложенията — системата периодично записва моментни снимки на състоянието на виртуалната машина на постоянен носител. След изключване или аварийно завършване, работата може да бъде продължена от последната запазена моментна снимка на паметта. Моментните снимки се създават асинхронно и без спиране на работата на виртуалната машина, но в моментната снимка се фиксира едновременен момент, сякаш виртуалната машина е била спряна, запазена на диск и отново стартирана.
Всички приложения се изпълняват в общо глобално адресно пространство, което позволява да се избегнат превключвания на контекста между ядрото и приложенията, а също така значително опростява и ускорява взаимодействието между приложенията, изпълнявани във виртуалната машина, които могат да обменят обекти чрез предаване на референции. Разделянето на достъпа се извършва на ниво обекти, референции към които могат да се получат само чрез извикване на съответните методи (аритметика на указатели отсъства). Всякакви данни, включително числени стойности, се обработват като отделни обекти.
За приложението работата изглежда непрекъсната и не зависи от рестартирания на ОС, аварийни завършвания и изключвания на компютъра. Моделът на програмиране за Phantom се сравнява с стартиране на приложения, които никога не спират. сървър Приложения за обектен език за програмиране. Като един от основните методи за разработка на приложения се разглежда портингът на приложения за Phantom на Java, което е улеснено от сходството на виртуалната машина Phantom с JVM. В допълнение към компилатора на байткод за Java, проектът планира създаването на компилатори за Python и C#, както и реализиране на транслатор от междинен код WebAssembly.
За операции, изискващи висока производителност, като обработка на видео и звук, е предвидена възможност за стартиране в отделни потоци на бинарни обекти с нативен код (за компилация на бинарните обекти се използва LLVM). За достъп до нискоуровневите услуги на ядрото, част от класовете VM ("вътрешни" класове) са реализирани на ниво ядрото на ОС. За стартиране на Linux-приложения е предвиден POSIX-слой, който извършва емуляция на извиквания, необходими за работата на Unix-процеси (персистентността за приложения в POSIX-слоя все още не е осигурена).

Традиционната ОС Phantom, освен виртуалната машина, включва и собствено ядро с реализация на потоци, мениджър на паметта, събирач на боклук, механизми за синхронизация, система за вход/изход и драйвери за работа с хардуера, което значително усложнява довеждането на проекта до готовност за широко приложение. Отделно се развиват компоненти с мрежов стек, графична подсистема и интерфейс за потребителя. Забележително е, че графичната подсистема и мениджърът на прозорци работят на ниво ядро.
За повишаване на стабилността, преносимостта и сигурността на проекта е направен опит за пренос на виртуалната машина Phantom да работи с компоненти на отворена микроядрена операционна система Genode, чиято разработка се ръководи от германската компания Genode Labs. За желаещите да експериментират с Phantom на базата на Genode е подготвена специална сборна среда на базата на Docker.
Използването на Genode ще даде възможност за използване на вече проверени микроядра и драйвери, а също така да се изнесат драйверите в пространството на потребителя (в текущия си вид драйверите са написани на C и се изпълняват на ниво ядро на Phantom). Включително ще се появи възможност за използване на микроядро seL4, преминало математическа верификация на надеждността, потвърдваща, че реализцията напълно съответства на спецификациите, зададени на формален език. Разглежда се възможността за подготовка на подобно доказателство за надеждност и за виртуалната машина Phantom, което ще позволи постигане на верификация на цялата среда на ОС.
Основната сфера на приложение на порта на базата на Genode е разработката на приложения за различни индустриални и вградени устройства. В момента вече е подготвен набор от промени за виртуалната машина и добавени работещи над Genode обвивки за осигуряване на персистентността на компонентите на ядрото и основните нискоуровневи интерфейси. Отбелязва се, че виртуална машина Phantom вече може да работи в 64-битова среда Genode, но все още предстои да се реализира работата на VM в режим на персистентност, да се преработи подсистемата за драйвери и да се адаптират компонентите с мрежов стек и графична подсистема за Genode.



Източник: opennet.ru
