Linux als Browser-App: Fabrice Bellard entwickelt Emulator in Javascript

Er simuliert einen fast vollständigen 80486-Prozessor sowie notwendige Hardwarebausteine. Damit lässt sich der Linux-Kernel in der Version 2.6.20 booten. Die Emulation unterstützt Chrome 11 und Firefox 4. Safari 5 und IE9 hält Bellard für "zu alt".

Fabrice Bellard hat einen PC-Emulator auf Basis eines 80486-Prozessors entwickelt, der komplett in Javascript realisiert ist und mit einem modernen Browser wie Firefox 4 oder Chrome 11 von einer Website aus aufgerufen werden kann. Um seinen Emulator zu demonstrieren, zeigte Bellard, wie sich ein vollständiger Linux-Kernel booten lässt.

Neben dem Prozessor simuliert er einen 16450-Chip, der als virtuelle serielle Schnittstelle zur Bildschirmausgabe dient. Darüber hinaus emuliert er den Timer-Baustein 8254 und den Interrupt-Controller 8259. Das reicht aus, um einen unmodifizierten Linux-Kernel 2.6.20 zu booten und eine Shell zu starten. Bellard nutzte lediglich einen Patch, der die ständigen Warnmeldungen unterdrückt, dass der verwendete 16450-Baustein wegen fehlender FIFO-Unterstützung sehr langsam sei. Ferner enthält seine Distribution „jslinux“ (Javascript Linux) den von Bellard selbst entwickelten C-Compiler tcc (Tiny C Compiler) mit dem er es 2004 schaffte, den Linux Kernel in 15 Sekunden zu kompilieren und zu booten.

Mit dem Emulator von Fabrice Bellard läuft Linux als Javascript-App im Browser (Screenshot: ZDNet).
Mit dem Emulator von Fabrice Bellard läuft Linux als Javascript-App im Browser (Screenshot: ZDNet).

Bellards 486-Emulation ist allerdings nicht vollständig: Wie beim Original ist keine FPU-Unterstützung enthalten. Der Linux-Kernel nutzt zwar in geringem Umfang x87-Befehle, emuliert sie jedoch selbst, wenn der FPU-Support fehlt. Neuere Befehlssätze wie MMX, SSE und AVX, die Intel erst mit dem Pentium oder später eingeführt hat, beherrscht der Emulator ebenfalls nicht.

Ferner fehlen Bellards Software einige Features, die der Original-80486 meistert: Segmentierte Adressierung mittels der Register CS, DS, ES und SS wird nicht unterstützt. Auch überprüft sie die Limits von Segmenten nicht. Da moderne Betriebssysteme virtuellen Speicher über Page Tables und nicht über Segmente realisieren, werden diese Features nicht benötigt.

Linux verwendet jedoch die Register FS und GS zur Verwaltung von Thread Local Storage, also Hauptspeicher, der jedem Thread eines Prozesses exklusiv zugeordnet ist. Daher ist Segmentierung mittels FS und GS implementiert. Aufgrund dieser Restriktionen lassen sich Real-Mode-Betriebssysteme wie MS-DOS oder 16-Bit-Protected-Mode-Betriebssysteme wie OS/2 1.x in Bellards Emulator nicht booten.

Außerdem fehlen dem Emulator einige selten verwendete Befehle wie BOUND oder BCD-Befehle. Alle diese Einschränkungen lassen sich Bellard zufolge mit etwas Aufwand ohne Probleme beseitigen. Es sei ihm in erster Linie darum gegangen, die technischen Möglichkeiten einer modernen kompilierenden Javascript Engine zu demonstrieren. Obwohl er den Emulator in erster Linie zum Spaß entwickelt habe, gebe es doch sinnvolle Einsatzmöglichkeiten, etwa um die Geschwindigkeit von Javascript Engines zu benchmarken.

Die Software kann jeder ausprobieren, indem er Bellards Website ansurft. Im ZDNet-Kurztest zeigt sich, dass der Emulator mit Chrome 11 und Firefox 4 funktioniert. Safari 5.05 und Internet Explorer 9 melden, dass der Browser zu alt sei. Die aktuelle Developer-Version von Chrome 13 bootet zwar, lädt aber keine Shell. Ebenfalls erfolglos bleiben Versuche mit Android 2.3.3 und iOS 4.3.3.

Die Geschwindigkeit ist durchaus beachtlich. Die Bedienung mittels Kommandozeile ist flüssig. Auch das Kompilieren von hello.c mit tcc bereitete keine Probleme. Eine Netzwerk-Emulation ist nicht vorhanden. Man ist auf das lo-Interface mit der IP-Adresse 127.0.0.1 beschränkt. Generell ist jedoch eine TCP/IP-Unterstützung implementiert.

Themenseiten: Browser, Linux, Open Source, Prozessoren, Software, Virtualisation, Virtualisierung

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

ZDNet für mobile Geräte
ZDNet-App für Android herunterladen Lesen Sie ZDNet-Artikel in Google Currents ZDNet-App für iOS

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Linux als Browser-App: Fabrice Bellard entwickelt Emulator in Javascript

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *