Login
Newsletter
Werbung

Mi, 18. Mai 2011, 08:10

Software::Emulatoren

jsLinux: PC-Emulator in JavaScript

Fabrice Bellard hat einen einfachen PC-Emulator vorgestellt, der in modernen Browsern wie Firefox 4 und Chrome läuft.

CPU-Informationen in jsLinux

Hans-Joachim Baader

CPU-Informationen in jsLinux

Fabrice Bellard dürfte einer der produktivsten und kreativsten Hacker überhaupt sein. Sein Werk umfasst unter anderem den ersten EXE-Packer für DOS (lzexe), dann machte er die freie OpenGL-Implementierung Mesa SMP-fähig. Er schrieb den kleinen und schnellen C-Compiler tcc, der auch als Quasi-C-Interpreter eingesetzt werden kann, und den Emulator Qemu, der nicht nur Systeme verschiedener Architekturen emulieren kann, sondern auch als Frontend diverser Virtualisierungslösungen populär wurde. Außerdem startete er das ffmpeg-Projekt. In neuester Zeit machte er noch einmal von sich reden, indem er mit einer speziellen Software die Kreiszahl Pi auf fast 2,7 Billionen Stellen berechnete und damit einen neuen Rekord aufstellte.

Bellards neuester Streich ist jsLinux, ein PC-Emulator in JavaScript. jsLinux ist gerade so weit implementiert, dass es ein minimales Linux-System mit FPU-Emulator ausführen kann. Bellard verwendete als Kernel Linux 2.6.20, da diese Version noch alte CPUs ohne Gleitkommaeinheit unterstützt. Der Emulator gaukelt der Software neben der CPU einen Interrupt-Controller, einen Timer und eine serielle Schnittstelle vor. Ausgaben erfolgen im Textmodus auf ein Terminal.

jsLinux greift teilweise auf Konzepte von Qemu zurück, ist aber deutlich einfacher gehalten. Es besteht aus zwei JavaScript-Dateien, von denen eine in gut 6 KB die Terminal-Emulation besorgt und die andere, weniger als 88 KB groß, den PC-Emulator enthält. Das gestartete Linux-System mit Busybox enthält lediglich eine Ramdisk als Festplatte. Der C-Compiler tcc und ein Emacs-Klon sind zusätzlich enthalten.

Wie Bellard schreibt, nutzt er in jsLinux eine relativ neue Errungenschaft von JavaScript, die Typisierten Arrays, in denen sich native Binärdaten speichern und verarbeiten lassen. Sein Code enthält einige Einschränkungen, darunter das bereits erwähnte Fehlen einer FPU-Emulation. Einige wenig benutzte x86-Instruktionen sind ebensowenig implementiert wie Vektorerweiterungen (MMX, SSE) oder der Real Mode. Diese Einschränkungen sollen leicht zu beheben sein.

Nach Bellards Messungen läuft jsLinux unter Firefox 4 doppelt so schnell wie in Chrome 11, was darauf hinweist, dass die JavaScript-Engine JaegerMonkey doch in einigen Punkten Vorteile gegenüber V8 von Google besitzt. jsLinux zeigt dem Autor zufolge, dass JavaScript mittlerweile schnell genug für komplizierte Aufgaben sind. Mögliche Anwendungen von jsLinux könnten neben dem Geschwindigkeitsvergleich der Engines die Verarbeitung von x86-Code auf anderen Plattformen, vielleicht für Verschlüsselung, und mit entsprechenden Erweiterungen das Ausführen von alten DOS-Programmen und -Spielen sein.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung