Im Rahmen des Kerla-Projekts wird der Kern eines Betriebssystems entwickelt, der in der Programmiersprache Rust geschrieben ist. Der neue Kern ist zunächst auf die Gewährleistung der Kompatibilität mit dem Linux-Kernel auf ABI-Ebene ausgerichtet, wodurch es möglich wird, unmodifizierte ausführbare Dateien, die für Linux erstellt wurden, in einer Kerla-basierten Umgebung auszuführen. Der Code wird unter den Lizenzen Apache 2.0 und MIT verbreitet. Das Projekt wird von dem japanischen Entwickler Seiya Nuta vorangetrieben, der bekannt ist für die Erstellung des Mikrokernel-Betriebssystems Resea, das in der Programmiersprache C geschrieben ist.
In der aktuellen Entwicklungsphase kann Kerla nur auf Systemen mit x86_64-Architektur betrieben werden und implementiert grundlegende Systemaufrufe wie write, stat, mmap, pipe und poll, unterstützt Signale, anonymen Pipes und Kontextwechsel. Für die Prozessverwaltung stehen Aufrufe wie fork, wait4 und execve zur Verfügung. Die Unterstützung für tty und Pseudoterminals (pty) ist ebenfalls vorhanden. Momentan werden unter den Dateisystemen initramfs (verwendet zum Mounten des Root-Dateisystems), tmpfs und devfs unterstützt. Ein Netzwerk-Stack mit Unterstützung für TCP- und UDP-Sockets, der auf der Bibliothek smoltcp basiert, ist ebenfalls vorhanden.
Der Entwickler hat eine Boot-Umgebung vorbereitet, die in QEMU oder in virtuellen Maschine Firecracker mit dem virtio-net-Treiber gestartet werden kann, zu dem bereits eine SSH-Verbindung hergestellt werden kann. Als Systembibliothek wird musl verwendet, und für die Benutzerwerkzeuge wird BusyBox eingesetzt.

Auf Basis von Docker wurde ein Build-System eingerichtet, das die Erstellung eigener Boot-initramfs mit dem Kerla-Kernel ermöglicht. Separat wird eine auf fish basierende Shell namens nsh und der GUI-Stack Kazari auf Basis des Wayland-Protokolls entwickelt.

Die Verwendung der Programmiersprache Rust in einem Projekt reduziert die Anzahl der Fehler im Code durch die Anwendung sicherer Programmierpraktiken und eine verbesserte Effizienz bei der Identifizierung von Problemen im Umgang mit Speicher. Die sichere Speicherverwaltung in Rust wird zur Compile-Zeit durch Referenzprüfungen, Verfolgung des Objektbesitzes und Berücksichtigung der Lebensdauer von Objekten (Gültigkeitsbereich) sichergestellt, sowie durch die Bewertung der Korrektheit des Zugriffs auf den Speicher zur Laufzeit des Codes. Darüber hinaus bietet Rust Mittel zum Schutz gegen Überläufe bei Ganzzahlen, verlangt die zwingende Initialisierung von Variablenwerten vor ihrer Verwendung, wendet das Konzept der Unveränderlichkeit (immutable) für Referenzen und Variablen standardmäßig an und bietet eine starke statische Typisierung zur Minimierung logischer Fehler und erleichtert die Verarbeitung von Eingabewerten durch Musterübereinstimmungsmechanismen.
Für die Entwicklung von Low-Level-Komponenten, wie beispielsweise dem Betriebssystemkernel, bietet Rust Unterstützung für raw-Zeiger, Struktur-Packing, Inline-Assembler-Einfügungen und das Einbetten von Assembler-Dateien. Für die Nutzung ohne Bindung an die Standardbibliothek gibt es separate crate-Pakete zur Durchführung von Operationen mit Strings, Vektoren und Bitflags. Zu den Vorteilen gehören auch integrierte Werkzeuge zur Bewertung der Codequalität (Linter, rust-analyzer) sowie die Erstellung von Unit-Tests, die nicht nur auf realer Hardware, sondern auch in QEMU ausgeführt werden können.
Quelle: opennet.ru
