Nach anderthalb Jahren Entwicklung wurde die Version 4.0 des Projekts MirageOS veröffentlicht, die es ermöglicht, Betriebssysteme für eine einzige Anwendung zu erstellen, wobei die Anwendung als eigenständiger "Unikernel" bereitgestellt wird, der ohne Betriebssysteme, separate Betriebssystemkerne und jegliche Schichten ausgeführt werden kann. Für die Anwendungsentwicklung wird die Sprache OCaml verwendet. Der Code des Projekts wird unter der freien ISC-Lizenz verbreitet.
Alle niederleveligen Funktionen, die für ein Betriebssystem typisch sind, werden in Form einer Bibliothek umgesetzt, die an die Anwendung angehängt wird. Die Anwendung kann in jedem Betriebssystem entwickelt und danach zu einem spezialisierten Kernel (Unikernel-Konzept) kompiliert werden, der direkt über die Hypervisoren Xen, KVM, BHyve und VMM (OpenBSD), auf mobilen Plattformen, als Prozess in einer POSIX-kompatiblen Umgebung oder in Cloud-Umgebungen wie Amazon Elastic Compute Cloud und Google Compute Engine gestartet werden kann.
Die generierte Umgebung enthält nichts Überflüssiges und interagiert direkt mit dem Hypervisor ohne Treiber und Systemschichten, was zu einer erheblichen Reduzierung der Overheadkosten und einer Erhöhung der Sicherheit führt. Die Arbeit mit MirageOS besteht aus drei Phasen: der Vorbereitung der Konfiguration mit der Definition der im OPAM-Paket verwendeten Umgebungen, dem Zusammenbauen der Umgebung und dem Starten der Umgebung. Die Runtime, die für den Betrieb über Hypervisoren verantwortlich ist, basiert auf dem Kernel Solo5.
Obwohl Anwendungen und Bibliotheken in der Hochsprache OCaml erstellt werden, zeigen die endgültigen Umgebungen eine recht gute Leistung und eine minimale Größe (zum Beispiel benötigt ein DNS-Server nur 200 KB). Auch die Wartung der Umgebungen wird vereinfacht, da bei der Notwendigkeit einer Aktualisierung des Programms oder einer Änderung der Konfiguration, es ausreicht, eine neue Umgebung zu erstellen und zu starten. Es werden mehrere Hundert Bibliotheken in der Sprache OCaml unterstützt, um Netzwerkoperationen (DNS, SSH, OpenFlow, HTTP, XMPP, Matrix, OpenVPN usw.), die Arbeit mit Speichern und die parallele Datenverarbeitung zu ermöglichen.
Wesentliche Verbesserungen:
- Der Prozess der Kompilierung von Projekten und Unikernels wurde geändert. Anstelle des zuvor verwendeten Build-Systems ocamlbuild kommt jetzt das Tool dune und lokale Repositories (Monorepo) zum Einsatz. Um solche Repositories zu erstellen, wurde das neue Tool opam-monorepo hinzugefügt, das die Verwaltung von Paketen von der Kompilierung aus dem Quelltext trennt. Das Tool opam-monorepo führt Aufgaben wie das Erstellen von Lock-Dateien für projektbezogene Abhängigkeiten, das Herunterladen und Entpacken von Code-Abhängigkeiten und das Einrichten der Umgebung zur Verwendung des Build-Systems dune durch. Die eigentliche Kompilierung erfolgt mit dem Tool dune.
- Ein reproduzierbarer Build-Prozess wurde bereitgestellt. Die Verwendung von Lock-Dateien sichert die Bindung an Abhängigkeitsversionen und ermöglicht es jederzeit, den Build-Prozess mit demselben Code vollständig zu reproduzieren.
- Ein neuer Prozess für die Cross-Kompilierung wurde eingeführt, der die Cross-Kompilierung für alle unterstützten Zielplattformen aus einer gemeinsamen Build-Umgebung ermöglicht, in der auch die Cross-Kompilierung von Abhängigkeiten und Bibliotheken, die C-Bindings haben, erfolgt, ohne dass diese Bindungen im Hauptpaket hinzugefügt werden müssen. Die Cross-Kompilierung wird mithilfe von Workspaces organisiert, die von dem Build-System dune bereitgestellt werden.
- Die Unterstützung neuer Zielplattformen wurde hinzugefügt, beispielsweise wurde die experimentelle Möglichkeit geschaffen, eigenständige Anwendungen für die Verwendung auf Raspberry Pi 4-Platinen zu erstellen.
- Es wurde an der Integration von Teilen von MirageOS in Ökosysteme gearbeitet, die mit der Entwicklung in OCaml in Verbindung stehen, um das Erstellen von Anwendungen in Form von Unikernels zu erleichtern. Viele Paket von MirageOS wurden für das Build-System dune portiert. Das Tool opam-monorepo ist über den Paketmanager opam verfügbar und kann in Projekten verwendet werden, die das Build-System dune nutzen. Zur Unterstützung von Patches, die Probleme mit der Abhängigkeitskompilierung in dune lösen, wurden zwei Repositories dune-universe/opam-overlays und dune-universe/mirage-opam-overlays erstellt, die standardmäßig bei der Verwendung des CLI-Tools mirage enthalten sind.
- Die Integration von MirageOS mit Bibliotheken in C und Rust wurde vereinfacht.
- Ein neuer OCaml-Runtime wurde vorgeschlagen, der ohne libc auskommt (libc-free).
- Die Möglichkeit zur Nutzung des Merlin-Dienstes wurde bereitgestellt, um die Integration mit typischen integrierten Entwicklungsumgebungen zu ermöglichen.
Quelle: opennet.ru
