Дмитрий Завалишин разказа за проекта за портирене на виртуалната машина на операционната система 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
