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

Alphabet übertrifft die Erwartungen im ersten Quartal

Der Umsatz steigt um 15 Prozent, der Nettogewinn um 57 Prozent. Im nachbörslichen Handel kassiert…

2 Tagen ago

Microsoft steigert Umsatz und Gewinn im dritten Fiskalquartal

Aus 61,9 Milliarden Dollar generiert das Unternehmen einen Nettoprofit von 21,9 Milliarden Dollar. Das größte…

2 Tagen ago

Digitalisierung! Aber wie?

Mehr Digitalisierung wird von den Unternehmen gefordert. Für KMU ist die Umsetzung jedoch nicht trivial,…

2 Tagen ago

Meta meldet Gewinnsprung im ersten Quartal

Der Nettoprofi wächst um 117 Prozent. Auch beim Umsatz erzielt die Facebook-Mutter ein deutliches Plus.…

3 Tagen ago

Maximieren Sie Kundenzufriedenheit mit strategischem, kundenorientiertem Marketing

Vom Standpunkt eines Verbrauchers aus betrachtet, stellt sich die Frage: Wie relevant und persönlich sind…

3 Tagen ago

Chatbot-Dienst checkt Nachrichteninhalte aus WhatsApp-Quellen

Scamio analysiert und bewertet die Gefahren und gibt Anwendern Ratschläge für den Umgang mit einer…

3 Tagen ago