Linux kommt in den Browser: Der Kernel läuft in WebAssembly.

Linux kommt in den Browser: Der Kernel läuft in WebAssembly.

Zuerst Der Linux-Kernel kann direkt in einem Webbrowser ausgeführt werden.ohne Emulatoren oder virtuelle Maschinen. Dies Dies wurde durch eine Reihe von Patches ermöglicht. die implementieren Wasm-Architektur (WebAssembly) innerhalb des Kernels, wodurch es in Zwischencode kompiliert werden kann, der in Webumgebungen ausführbar ist. Obwohl Dies ist ein experimenteller Machbarkeitsnachweis., markiert einen Wendepunkt in der Konvergenz zwischen Betriebssystemen und Webtechnologien.

Das Projekt, das seit über zwei Jahren entwickelt wird, ermöglicht es Nutzern, Linux innerhalb eines Webbrowsers zu starten und Standardprogramme in einer auf BusyBox und musl basierenden Umgebung auszuführen, die vollständig in WebAssembly kompiliert ist. Xterm.js dient als Terminalemulator für die Benutzerinteraktion und stellt eine funktionale Konsole innerhalb des Browsers bereit.

Darüber hinaus gibt es eine öffentliche Demo, die mit Chromium-Browsern und teilweise mit Firefox kompatibel ist und den Wasm-Kernel auf modernen Computern in weniger als einer Sekunde laden kann.

Wie funktioniert Linux in Wasm?

Im Gegensatz zu herkömmlichen Architekturen WebAssembly erlaubt weder das Anhalten von Threads noch das Ändern des Codes. zur Laufzeit, Dies stellt eine Herausforderung für den Kernel-Task-Scheduler dar.Um diese Einschränkungen zu überwinden, wählten die Entwickler eine raffinierte Lösung: Jeder Task oder Thread läuft auf einer separaten virtuellen CPU, die von Web Workers verwaltet wird. des Browsers. Auf diese Weise wird Multitasking durch die Browser-Engine selbst implementiert, die als Host-Betriebssystem fungiert.

Die Folge ist ein Modell, bei dem der Linux-Kernel in einer isolierten Webumgebung läuftmit echtem Multitasking und Interprozesskommunikation über Nachrichtenkanäle (postMessage() und SharedArrayBuffer). Jedoch Die Unterbrechungs- und Signalfunktionen sind noch nicht voll funktionsfähig. und einige wichtige Funktionen, wie vfork() und longjmp(), werden weiterhin nicht unterstützt.

Unter den wichtigsten Zu den aktuellen Einschränkungen gehört das Fehlen einer MMU. (Speicherverwaltungseinheit), die Unfähigkeit, geladenen Code zu modifizieren, und sporadische Abstürze Nach wenigen Minuten Nutzung erscheint eine Fehlermeldung in der Konsole. Tests zeigen jedoch, dass das System grundlegende BusyBox-Befehle ausführen und Prozesse im Hintergrund aktiv halten kann, was das Potenzial dieses Ansatzes bestätigt.

Jenseits der Demonstration: Ein neuer Horizont für Wasm

Der Umfang des Projekts geht über das einfache Ausführen von Linux in Browsern hinaus. Die Wasm-Architektur für Linux könnte als Grundlage für die Erstellung plattformübergreifender WebAssembly-Anwendungen dienen. Mit integrierten Linux-Systemaufrufen, ohne auf einen vollständigen Kernel angewiesen zu sein. Dies ermöglicht die Ausführung isolierter Anwendungen mit WASI (WebAssembly System Interface) und die Entwicklung extrem portabler Sandbox-Systeme.

Entwickler Sie planen außerdem, die Unterstützung auf die grafische Umgebung auszuweiten und EGL und OpenGL ES zu implementieren. WebGL würde es ermöglichen, visuelle Benutzeroberflächen direkt im Browser auszuführen. Zusätzlich ist die Unterstützung des DWARF-Debugging-Formats geplant, wodurch das zeilenweise Debuggen von C-Code direkt über die Browser-Tools möglich wird.

Technische Herausforderungen und nächste Schritte

El Das Projekt hat weiterhin mit Stabilitätsproblemen zu kämpfen.wie beispielsweise zufällige Abstürze oder Speicherbeschädigungsfehler. Diese detailliert dokumentierten Nachteile spiegeln die inhärenten Schwierigkeiten wider, ein komplettes Betriebssystem an eine Umgebung anzupassen, die ursprünglich für Webanwendungen konzipiert wurde. Trotzdem Die für die Entwicklung Verantwortlichen sind zuversichtlich, dass zukünftige Erweiterungen Merkmale des WebAssembly-Standards, wie Thread-Suspension, Stack-Switching oder eine funktionale MMU, werden es uns ermöglichen, die aktuellen Einschränkungen zu überwinden.

Hinsichtlich der Leistung priorisiert die aktuelle Version das Debugging gegenüber der Geschwindigkeit. Es wird jedoch erwartet, dass zukünftige Optimierungen, wie beispielsweise das Versetzen des vorgestarteten Wasm-Systems in den Ruhezustand, das sofortige Laden eines Kernels ermöglichen könnten. Die Verwendung von `Atomics.waitAsync()` und die direkte Kommunikation zwischen den Workern versprechen zudem eine Reduzierung des Overheads zwischen JavaScript- und WebAssembly-Code.

Eine Einladung zum Erleben

Das Repository wasm-linux bietet Skripte und Build-Umgebungen Dies ermöglicht es jedem, diese Anpassung auszuprobieren, entweder lokal oder mit Docker. In wenigen Schritten lassen sich LLVM, der Kernel, BusyBox und musl kompilieren, wodurch eine voll funktionsfähige Linux-Umgebung im Browser entsteht.

Obwohl es noch weit von Stabilität und Sicherheit entfernt ist, eröffnet dieses Experiment eine Debatte über die Zukunft von Betriebssystemen im Web. Könnte Wasm sich zur universellen Plattform für die Ausführung von Linux auf beliebigen Geräten oder in isolierten Umgebungen entwickeln? Die kommenden Jahre werden es zeigen.

Demo-Website: https://joelseverin.github.io