Die Veröffentlichung des Projekts Asterinas 0.18 wurde vorgestellt, das einen auf Rust geschriebenen Kern entwickelt, der für den Einsatz in allgemeinen Betriebssystemen vorgesehen ist. Der Kern bietet eine ABI (Application Binary Interface), die mit dem Linux-Kernel kompatibel ist und an dessen Stelle verwendet werden kann. Gleichzeitig wird die Asterinas NixOS-Distribution weiterentwickelt, die den Asterinas-Kern mit dem NixOS-Systemumfeld kombiniert. Der Quellcode des Projekts wird unter der MPL (Mozilla Public License) lizenziert.
Aktuell sind im Kernel etwa 240 Systemaufrufe von Linux implementiert. In der Asterinas NixOS-Distribution wurde die Funktionalität von über 100 Paketen aus NixOS auf dem Asterinas-Kernel verifiziert. Zu den unterstützten Paketen gehören: Xfce, Firefox, bash, systemd, Podman, QEMU, rsync, Apache httpd, nginx, SQLite, Redis, Clang, GCC, Go, Lua, Node.js, OpenJDK, Perl, PHP, Python, Ruby, Rust, Git, FFmpeg, PyTorch, TensorFlow, Ollama und Codex.
Im Kernel wird volle Unterstützung für die x86-64-Architektur, teilweise Unterstützung für RISC-V 64 und x86-64 mit Isolation auf Intel TDX-Basis sowie erste Unterstützung für die LoongArch 64-Architektur gewährleistet. Zu den priorisierten Anwendungsbereichen zählen Systeme, die auf Linux ABI angewiesen sind, jedoch ein höheres Schutzniveau erfordern. Asterinas wird beispielsweise empfohlen, um Systemumgebungen zu schaffen, die geschützt sind, virtuelle Maschinen, wobei Technologien wie ARM CCA, AMD SEV und Intel TDX zur Isolation verwendet werden, sowie auf der Host-Systemseite zur Ausführung von Containern.
Um die Wahrscheinlichkeit von Speicherfehlern, die die Hauptursache der gefährlichsten Sicherheitsanfälligkeiten darstellen, zu verringern, wurde bei der Entwicklung von Asterinas die Programmiersprache Rust und die Taktik der begrenzten Verwendung von unsafe-Blöcken verwendet. Der Kernel basiert auf der framekernel-Architektur, die versucht, die Isolationsfähigkeiten von Mikrokernen mit der Effizienz monolithischer Kerne zu kombinieren.
Die Komponenten des Kernels in Asterinas sind im gemeinsamen Adressraum angeordnet, und die Sicherheit wird durch logische Trennung von sicherem Code und Code, in dem Sicherheitsprobleme auftreten können, erreicht. Der Kernel ist in zwei Teile unterteilt, die in Rust geschrieben sind: OS Framework und OS Services. In OS Services ist die Verwendung von unsafe-Blöcken untersagt, und alle niedrigstufigen Operationen, die die Ausführung von Code in unsafe-Blöcken erfordern, wurden in das OS Framework ausgelagert und sind nur über eine hochgradig abstrahierte API zugänglich. Alle Systemaufrufe, Dateisysteme und Treiber werden auf der Ebene von OS Services umgesetzt und dürfen keine unsafe-Blöcke enthalten.
Für die Entwicklung von Systemdiensten und Kernmodulen wird das OSDK (Operating System Development Kit) bereitgestellt, das das Werkzeug cargo-osdk zur Erstellung, Kompilierung, Testung und Ausführung von Komponenten des Betriebssystems bietet. Für Entwickler steht eine Sammlung von Bibliotheken OSTD (Operating System Standard Library) zur Verfügung, die eine Anpassung der Standardbibliotheken von Rust (crate std) für die Nutzung in Betriebssystemkomponenten umfasst.
Zu den Änderungen in Version 0.18:
- Im Rahmen der Arbeiten zur Unterstützung des Starts von Asterinas als Gastbetriebssystem in VM-Containern wie Kata Containers und Confidential Containers wurde Unterstützung für IPC-Namensräume und cgroup, nsfs (/proc/[pid]/ns), cgroups, virtio-fs (für den Zugriff auf das gemeinsame Dateisystem mit dem Host-System), virtio-rng (/dev/hwrng für Entropie zu einem Pseudo-Zufallszahlengenerator) und vsock (für die Interaktion zwischen Host- und Gästebetriebssystemen) implementiert.
- Der Systemaufruf ptrace sowie Debugging-Möglichkeiten im Benutzerspace mit GDB und strace wurden implementiert.
- Eine neue Implementierung des Dateisystems ext2 wurde vorgeschlagen, und ein NVMe-Treiber wurde hinzugefügt. Im VFS wurde ein Dentry (Directory Entry)-Mechanismus hinzugefügt und die Implementierung des Seiten-Caches überarbeitet.
- Im Asterinas-NixOS-Distribution wurde die Möglichkeit implementiert, Codex, QEMU und Firefox zu starten.
- Systemaufrufe pidfd_getfd, pidfd_send_signal, pivot_root wurden hinzugefügt.
- Eine erste Implementierung IPv6-Unterstützung.
- Ein System von Berechtigungen wurde für die Delegierung einzelner privilegierter Operationen implementiert.
- Eine erste Implementierung des Frameworks LSM (Linux Security Modules) wurde hinzugefügt.
Quelle: opennet.ru
