Dmitrij Zavalishin berichtete über das Projekt zur Portierung der virtuellen Maschine des Betriebssystems Phantom für den Einsatz in der Umgebung des Mikrokernel-Betriebssystems Genode. In einem Interview wird festgestellt, dass die Hauptversion von Phantom bereits für Pilotprojekte bereit ist, während die Version auf der Basis von Genode bis Ende des Jahres einsatzbereit gemacht werden sollte. Derzeit ist auf der Projektwebsite nur ein funktionsfähiger konzeptioneller Prototyp angegeben, dessen Stabilität und Funktionalität jedoch nicht das Niveau erreicht haben, das für den industriellen Einsatz geeignet ist. Zu den nächsten Plänen gehört die Entwicklung einer Alpha-Version, die für Experimente durch externe Entwickler geeignet ist.
Der Code des Projekts wird unter der LGPL-Lizenz verbreitet, aber die letzte Änderung im Hauptrepository stammt aus dem November 2019. Die öffentliche Aktivität im Zusammenhang mit dem Projekt konzentriert sich auf ein Repository mit einem Fork für Genode, das seit Dezember 2020 von Anton Antonov, einem Studenten der Universität Innopolis, unterstützt wird.
Das Betriebssystem Phantom hat sich seit Anfang der 2000er Jahre als persönliches Projekt von Dmitrij Zavalishin entwickelt und wurde 2010 unter das Dach des Unternehmens Digital Zone gebracht, das von Dmitrij gegründet wurde. Das System zeichnet sich durch eine hohe Zuverlässigkeit und die Verwendung des Konzepts "Alles ist ein Objekt" anstelle von "Alles ist eine Datei" aus, was es ermöglicht, ohne Dateien auszukommen, indem der Zustand des Speichers erhalten bleibt und ein kontinuierlicher Arbeitszyklus gewährleistet wird. Anwendungen in Phantom werden nicht beendet, sondern nur angehalten und setzen ihre Arbeit an dem unterbrochenen Punkt fort. Alle Variablen und Datenstrukturen können so lange gespeichert werden, wie es die Anwendung benötigt, ohne dass der Programmierer sich speziell um die Datenspeicherung kümmern muss.
Anwendungen in Phantom werden in Bytecode kompiliert, der in einer Stack-basierten virtuellen Maschine ausgeführt wird, die der Java Virtual Machine ähnlich ist. Die virtuelle Maschine sorgt für die Persistenz des Anwendungspeichers – das System erstellt regelmäßig Snapshots des virtuellen Maschinenstatus auf einem permanenten Medium. Nach einem Herunterfahren oder einem unerwarteten Abbruch kann die Arbeit fortgesetzt werden, beginnend mit dem letzten gespeicherten Speicherstatus. Die Snapshots werden asynchron und ohne Unterbrechung der Funktionalität der virtuellen Maschine erstellt, aber im Snapshot wird ein gleichzeitiger Schnitt festgehalten, als ob die virtuelle Maschine angehalten, auf die Festplatte gespeichert und dann wieder gestartet worden wäre.
Alle Anwendungen werden im gemeinsamen globalen Adressraum ausgeführt, was einen Kontextwechsel zwischen dem Kernel und den Anwendungen überflüssig macht und die Interaktion zwischen den in der virtuellen Maschine laufenden Anwendungen erheblich vereinfacht und beschleunigt, da diese Objekte durch Referenzübergabe austauschen können. Der Zugriff wird auf Ebene der Objekte getrennt, auf die Referenzen nur durch den Aufruf der entsprechenden Methoden erhalten werden können (Pointerarithmetik ist nicht vorhanden). Alle Daten, einschließlich numerischer Werte, werden als eigenständige Objekte behandelt.
Für die Anwendung erscheint die Arbeit kontinuierlich und unabhängig von Systemneustarts, unerwarteten Abbrüchen oder dem Herunterfahren des Computers. Das Programmiermodell für Phantom wird mit einem nie haltenden Programm verglichen. Server Anwendungen für die objektorientierte Programmiersprache. Eines der Hauptverfahren zur Entwicklung von Anwendungen wird die Portierung von für Phantom geschriebenen Programmen in der Programmiersprache Java betrachtet, was durch die Ähnlichkeit der virtuellen Maschine Phantom mit der JVM begünstigt wird. Neben dem Bytecode-Compiler für die Programmiersprache Java plant das Projekt die Erstellung von Compilern für Python und C# sowie die Implementierung eines Translaters aus Zwischenkodierung nach WebAssembly.
Um Operationen auszuführen, die eine hohe Leistung erfordern, wie z. B. die Verarbeitung von Video und Audio, besteht die Möglichkeit, separate Threads für binäre Objekte mit nativen Code zu starten (zur Erstellung der binären Objekte wird LLVM verwendet). Für den Zugriff auf die Low-Level-Dienste des Kernels sind einige Klassen der VM ("interne" Klassen) auf der Ebene des Betriebssystemkerns implementiert. Eine POSIX-Schicht, die die erforderlichen Systemaufrufe für die Ausführung von Unix-Prozessen emuliert, wurde für den Start von Linux-Anwendungen vorgesehen (Persistenz für Anwendungen in der POSIX-Schicht wird derzeit noch nicht gewährleistet).

Das traditionelle Betriebssystem Phantom umfasst neben der virtuellen Maschine einen eigenen Kern mit der Implementierung von Threads, einem Speichermanager, einer Garbage Collection, Synchronisierungsmechanismen, einem Eingabe-/Ausgabesystem und Treibern zur Anbindung an die Hardware, was die Fertigstellung des Projekts für den breiten Einsatz erheblich erschwert. Komponenten mit Netzwerk-Stack, grafischer Subsystem und Benutzeroberfläche werden separat entwickelt. Bemerkenswert ist, dass das grafische Subsystem und der Fenstermanager auf der Ebene des Kernels arbeiten.
Zur Verbesserung der Stabilität, Portabilität und Sicherheit des Projekts wurde der Versuch unternommen, die virtuelle Maschine Phantom für die Nutzung von Komponenten des offenen Mikrokernel-Betriebssystems Genode zu portieren, dessen Entwicklung von dem deutschen Unternehmen Genode Labs geleitet wird. Für diejenigen, die mit Phantom auf der Basis von Genode experimentieren möchten, wurde eine spezielle Build-Umgebung auf der Basis von Docker vorbereitet.
Die Verwendung von Genode ermöglicht den Einsatz bereits erprobter Mikrokernel und Treiber sowie die Auslagerung von Treibern in den Benutzermodus (in der aktuellen Form sind die Treiber in C geschrieben und werden auf der Ebene des Phantom-Kernels ausgeführt). Zudem wird die Möglichkeit eröffnet, das mathematisch verifizierte Mikrokernel seL4 zu nutzen, dessen Zuverlässigkeit bestätigt, dass die Implementierung vollständig den auf einer formalen Sprache festgelegten Spezifikationen entspricht. Es besteht die Aussicht, ein ähnliches Zuverlässigkeitsnachweis für die virtuelle Maschine Phantom vorzubereiten, was die Verifizierung der gesamten Betriebssystemumgebung ermöglichen würde.
Als Hauptanwendungsbereich des Genode-Port wird die Entwicklung von Anwendungen für verschiedene industrielle und eingebettete Geräte genannt. Derzeit wurde bereits ein Satz von Änderungen für die virtuelle Maschine vorbereitet, und funktionsfähige Bindungen wurden für Genode hinzugefügt, die die Persistenz der Kernelkomponenten und grundlegenden Low-Level-Schnittstellen gewährleisten. Es wird festgestellt, dass eine virtuelle Maschine Phantom bereits in der 64-Bit-Umgebung von Genode betrieben werden kann, aber es bleibt noch, die VM im Persistenzmodus zum Laufen zu bringen, das Treibermodul zu überarbeiten und die Komponenten mit Netzwerk-Stack und grafischem Subsystem für Genode anzupassen.



Quelle: opennet.ru
