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.
Malware SmokeLoader wird weiterhin von Bedrohungsakteuren genutzt, um Payloads über neue C2-Infrastrukturen zu verbreiten.
Bankhaus Metzler und Telekom-Tochter MMS testen, inwieweit Bitcoin-Miner das deutsche Stromnetz stabilisieren könnten.
Mit 1,7 Exaflops ist El Capitan nun der dritte Exascale-Supercomputer weltweit. Deutschland stellt erneut den…
Der deutsche Hyperscaler erweitert sein Server-Portfolio um vier Angebote mit den neuen AMD EPYC 4004…
Beim Online-Gaming kommt es nicht nur auf das eigene Können an. Auch die technischen Voraussetzungen…
Fast jedes zweite Unternehmen bietet keinerlei Schulungen an. In den übrigen Betrieben profitieren oft nur…