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

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).

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.

ZDNet.de Redaktion

Recent Posts

Studie: Ein Drittel aller E-Mails an Unternehmen sind unerwünscht

Der Cybersecurity Report von Hornetsecurity stuft 2,3 Prozent der Inhalte gar als bösartig ein. Die…

3 Tagen ago

HubPhish: Phishing-Kampagne zielt auf europäische Unternehmen

Die Hintermänner haben es auf Zugangsdaten zu Microsoft Azure abgesehen. Die Kampagne ist bis mindestens…

4 Tagen ago

1. Januar 2025: Umstieg auf E-Rechnung im B2B-Geschäftsverkehr

Cloud-Plattform für elektronische Beschaffungsprozesse mit automatisierter Abwicklung elektronischer Rechnungen.

4 Tagen ago

Google schließt schwerwiegende Sicherheitslücken in Chrome 131

Mindestens eine Schwachstelle erlaubt eine Remotecodeausführung. Dem Entdecker zahlt Google eine besonders hohe Belohnung von…

4 Tagen ago

Erreichbarkeit im Weihnachtsurlaub weiterhin hoch

Nur rund die Hälfte schaltet während der Feiertage komplett vom Job ab. Die anderen sind…

5 Tagen ago

Hacker missbrauchen Google Calendar zum Angriff auf Postfächer

Security-Experten von Check Point sind einer neuen Angriffsart auf die Spur gekommen, die E-Mail-Schutzmaßnahmen umgehen…

6 Tagen ago