Zum Hauptinhalt Zur Navigation

Läuft im Browser: Entwickler portiert Linux für Webassembly

Nach Mikrocontroller und PDFs läuft Linux auch nativ im Browser. Allerdings hat die Webassembly -Portierung eine Reihe von Einschränkungen.
/ Johannes Hiltscher
5 Kommentare News folgen (öffnet im neuen Fenster)
Nach wenigen Sekunden ist der Linux-Kernel im Browser gestartet. (Bild: Screenshot: Golem.de)
Nach wenigen Sekunden ist der Linux-Kernel im Browser gestartet. Bild: Screenshot: Golem.de

Rund zwei Jahre hat Entwickler Joel Severin nach eigener Angabe an einer Portierung des Linux-Kernels für Webassembly (Wasm) gearbeitet. Das schreibt er in einem Beitrag auf der Mailingliste des Linux-Kernels(öffnet im neuen Fenster) (via Phoronix(öffnet im neuen Fenster) ). Hier verlinkt er auch die Projektseite seines Github-Repositorys(öffnet im neuen Fenster) , über die das Linux im Browser ausprobiert werden kann.

Allzu viel lässt sich damit allerdings nicht machen, da die Busybox-Umgebung nur wenige Programme mitbringt. An deren Code musste Severin, wie ein kurzer Blick in die Patch-Dateien in seinem Repository zeigt, einige Änderungen vornehmen. Auch das eigene Binärformat von Wasm machte Änderungen erforderlich, da der Linux-Kernel eigentlich das ELF (Executable and Linking Format) erwartet. Hinzu kommt eine Javascript-Laufzeitumgebung.

Wasm sorgt dabei für einige Einschränkungen: Da keine Memory Management Unit (MMU) emuliert wird, laufen Anwendungen und Betriebssystem-Kernel im gleichen Adressraum. Programmierfehler können letzteren so korrumpieren. Für Anwendungen müssen die Compiler-Flags angepasst werden, zudem wird die C-Funktion longjmp(öffnet im neuen Fenster) nicht unterstützt. Sie erlaubt Sprünge an zuvor festgelegte Stellen im Aufruf-Stack eines Programms.

An einigen Stellen sind daher Workarounds erforderlich, auch weil Wasm Programme nicht unterbrechen kann. Damit ist präemptives Multitasking, bei dem das Betriebssystem reihenweise verschiedene Anwendungsprozesse auf einem Prozessor ausführt, unmöglich. Umgangen wird dies, indem für neue Threads und Prozesse jeweils ein neuer Prozessor gestartet wird – Linux unterstützt schließlich 8.192.

In erster Linie Proof of Concept

Auch wenn Severin einige mögliche Anwendungsfälle aufzählt, scheint es wahrscheinlich, dass seine Portierung eine weitere Kuriosität bleiben wird. Hierfür spricht auch, dass es auf der Kernel-Mailingliste bislang keinerlei Reaktion auf seinen Beitrag gab. Ein wenig erinnert das Wasm-Linux an Linux im PDF oder Dmitry Grindbergs Portierungen des Betriebssystems für Mikrocontroller . Auch bei denen ist der Hintergrund eher die Machbarkeit als ein praktischer Nutzen.

Das Browser-Linux nutzt aktuell mit Kernel 6.4.16 nicht nur eine recht alte Version des Betriebssystemkerns, es enthält zudem noch einige Bugs. So endete ein Neustart bei uns mittels Reboot mit einem korrumpierten Stack, die Konsole reagierte verlässlich nach einiger Zeit nicht mehr. Severin ist der zweite Bug bekannt, eine Idee, was ihn auslöst, hat er allerdings noch nicht. Dafür hat er allerdings eine Wunschliste für die künftige Entwicklung von Wasm zusammengestellt – seine Ideen würden viele Workarounds überflüssig machen.


Relevante Themen