Das Kerla-Projekt entwickelt einen Linux-kompatiblen Kernel in Rust

Das Kerla-Projekt entwickelt einen in Rust geschriebenen Betriebssystemkernel. Der neue Kernel ist zunächst darauf ausgerichtet, auf ABI-Ebene Kompatibilität mit dem Linux-Kernel zu gewährleisten, wodurch für Linux erstellte unveränderte Binärdateien in einer Kerla-basierten Umgebung ausgeführt werden können. Der Code wird unter den Lizenzen Apache 2.0 und MIT vertrieben. Das Projekt wird vom japanischen Entwickler Seiya Nuta entwickelt, der für die Entwicklung des in C geschriebenen Mikrokernel-Betriebssystems Resea bekannt ist.

Im aktuellen Entwicklungsstadium kann Kerla nur auf x86_64-Systemen ausgeführt werden und implementiert grundlegende Systemaufrufe wie write, stat, mmap, Pipe und Poll, unterstützt Signale, unbenannte Pipes und Kontextwechsel. Für die Prozessverwaltung stehen Aufrufe wie fork, wait4 und execve zur Verfügung. Es gibt Unterstützung für TTY und Pseudo-Terminals (PTY). Von den Dateisystemen werden weiterhin initramfs (zum Mounten des Root-FS), tmpfs und devfs unterstützt. Es wird ein Netzwerk-Stack mit Unterstützung für TCP- und UDP-Sockets bereitgestellt, der auf Basis der smoltcp-Bibliothek implementiert ist.

Der Entwickler hat eine bootfähige Umgebung vorbereitet, die in QEMU oder in der virtuellen Firecracker-Maschine mit dem virtio-net-Treiber läuft, zu der man sich bereits per SSH verbinden kann. Musl wird als Systembibliothek und BusyBox als Benutzerdienstprogramm verwendet.

Das Kerla-Projekt entwickelt einen Linux-kompatiblen Kernel in Rust

Basierend auf Docker wurde ein Build-System vorbereitet, das es ermöglicht, eigene Boot-Initramfs mit dem Kerla-Kern zu erstellen. Die fischähnliche NSH-Shell und der auf dem Wayland-Protokoll basierende Kazari-GUI-Stack werden separat entwickelt.

Das Kerla-Projekt entwickelt einen Linux-kompatiblen Kernel in Rust

Durch die Verwendung der Rust-Sprache in einem Projekt wird die Anzahl der Fehler im Code durch die Anwendung sicherer Codierungstechniken reduziert und die Effizienz bei der Identifizierung von Problemen bei der Arbeit mit dem Speicher verbessert. Die speichersichere Handhabung wird in Rust zur Kompilierzeit durch Referenzprüfung, Verfolgung des Objektbesitzes und der Objektlebensdauer (Umfang) sowie durch die Bewertung der Korrektheit des Speicherzugriffs während der Codeausführung gewährleistet. Darüber hinaus bietet Rust Schutz vor Ganzzahlüberläufen, erfordert eine obligatorische Initialisierung von Variablenwerten vor der Verwendung, wendet standardmäßig das Konzept unveränderlicher (unveränderlicher) Referenzen und Variablen an, bietet starke statische Typisierung zur Minimierung logischer Fehler und vereinfacht die Verarbeitung von Eingabewerten dank Mustervergleichsfunktionen. .

Für die Entwicklung von Low-Level-Komponenten wie dem Betriebssystemkernel bietet Rust Unterstützung für Rohzeiger, Strukturpackung, Assembler-Inline-Einfügungen und Assembler-Datei-Inlining. Um ohne Bindung an die Standardbibliothek arbeiten zu können, gibt es separate Crate-Pakete zum Ausführen von Operationen an Strings, Vektoren und Bit-Flags. Zu den Vorteilen zählen auch integrierte Tools zur Bewertung der Codequalität (Linter, Rust-Analyzer) und zur Erstellung von Unit-Tests, die nicht nur auf echter Hardware, sondern auch in QEMU ausgeführt werden können.

Source: opennet.ru

Kommentar hinzufügen