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.
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.
Erstmals liegen Preise für Verbraucher vor. Sie zahlen weniger als Geschäftskunden. Dafür beschränkt Microsoft den…
Die Entwickler arbeiten noch an weiteren „Verfeinerungen“. Windows Insider erhalten nun wohl eine erste Vorschau…
Laut Bitkom-Umfrage werden in jedem dritten Unternehmen in Deutschland private KI-Zugänge genutzt. Tendenz steigend.
2023 erlitten neun von zehn Unternehmen in der DACH-Region Umsatzverluste und Kurseinbrüche in Folge von…
Der Report „Pacific Rim“ von Sophos beschreibt Katz-und-Maus-Spiel aus Angriffs- und Verteidigungsoperationen mit staatlich unterstützten…
NVIDIA DGX SuperPOD soll voraussichtlich Mitte 2025 in Betrieb genommen und für Forschungsberechnungen genutzt werden.