Die Geschichte von Computern ist eng verknüpft mit den Geschichten ihrer Software und der Art, wie diese genutzt wird. Ein wichtiger Teil dieser Historie sind Emulatoren, die es ermöglichen, alte Systeme auf moderner Hardware zu betreiben. Einer der bekanntesten Emulatoren für klassische Macintosh-Computer ist Basilisk II. Im Jahr 2017 gelang eine bemerkenswerte Portierung dieses Emulators direkt in den Webbrowser. Diese Innovation brachte nicht nur Nostalgie auf eine neue Ebene, sondern verdeutlichte auch die erstaunlichen Fortschritte im Bereich der Webtechnologien und der Emulation.
Basilisk II, ursprünglich als Native-Emulator für klassische Macintosh-Systeme entwickelt, war lange Zeit ein fester Bestandteil der Retro-Computing-Community. Die Herausforderung bestand darin, diese komplexe Software, die tief mit der Hardwarearchitektur der damaligen Apple-Computer verbunden ist, so zu transformieren, dass sie in einer Browserumgebung lauffähig bleibt und gleichzeitig eine flüssige Benutzererfahrung bietet. Die Portierung, verantwortet von James Friend, markiert einen Meilenstein im Bereich der webbasierten Emulation. Die Basis für dieses Projekt ist die Nutzung von Emscripten, einem Compiler, der C- und C++-Code in JavaScript umwandelt, welcher wiederum in Browsern ausgeführt werden kann. Diese Technologie ermöglicht es, traditionelle Software, die ursprünglich für Desktop-Computer geschrieben wurde, in eine Form zu bringen, die moderne Webplattformen verstehen.
Die Schwierigkeit bei Basilisk II bestand darin, dass der Emulator nicht nur einfache Befehle ausführen, sondern auch anspruchsvolle Aufgaben wie Grafik- und Audio-Ausgabe sowie Eingabeverarbeitung in Echtzeit bewältigen muss. Ein Kernstück der Umsetzung ist der Einsatz von Web Workern. Diese ermöglichen die Ausführung von JavaScript-Threads im Hintergrund, ohne die Hauptthread - und damit das Benutzerinterface - zu blockieren. Indem die Hauptsimulateurschleife des Emulators in einem Web Worker läuft, kann die Emulation kontinuierlich und performant ablaufen. Dabei kommuniziert der Web Worker mit dem Hauptthread via SharedArrayBuffers.
Diese Struktur erlaubt es, Daten effizient und ohne viele Kopiervorgänge zwischen Threads zu teilen, was zur Glätte der Simulation beiträgt. Die Videodarstellung stellte eine besondere Herausforderung dar, da Basilisk II ursprünglich SDL (Simple DirectMedia Layer) für die plattformübergreifende Grafik- und Audioausgabe verwendete. SDL als Bibliothek ist zwar auch in Emscripten implementiert, jedoch nicht für den Einsatz in Web Workern optimiert. James Friend entwickelte daher einen Trick, um die Videoausgabe von der SDL-Bibliothek weg auf SharedArrayBuffers umzuleiten. So wird der Framebuffer des emulierten Macintosh-Displays im SharedArrayBuffer abgelegt und der Hauptthread liest diesen kontinuierlich aus, um die Bildschirmausgabe auf einem HTML5-Canvas-Element in Echtzeit darzustellen.
Diese Arbeitsweise birgt einige technische Kompromisse. So kommt es gelegentlich zu geringfügigen „Tearing“-Effekten, einem visuellen Artefakt, das entsteht, wenn der UI-Thread eine Bildaktualisierung liest, während der Emulator noch neue Daten schreibt. Positiv daran ist aber, dass diverse Ansätze zur Synchronisierung wie das Sperren des Framebuffers durch Locking die Leistung verschlechterten und somit nicht praktikabel waren. Die Lösung entspricht daher einem pragmatischen Kompromiss, der die Balance zwischen Performance und optischer Qualität wahrt. Die Eingabeverarbeitung wurde ebenfalls mithilfe von SharedArrayBuffers realisiert.
Maus- und Tastaturereignisse werden im Hauptthread gesammelt und in einen gemeinsamen Speicherbereich geschrieben, den der Emulator-Web Worker bei Bedarf ausliest. Ein nennenswertes Detail besteht darin, dass die Emulation die Umwandlung der üblichen JavaScript-Tastencodes in das ADB (Apple Desktop Bus)-Tastaturlayout vornimmt. Diese Übersetzung ist essenziell, da die Tasteneingaben so vermittelt werden müssen, wie sie ein originaler Macintosh erwartet, um präzise Steuerung zu gewährleisten. Auch in Sachen Audio musste Innovation betrieben werden. Beim nativen Betrieb des Emulators laufen Audiofunktionalitäten oft in einem eigenen Thread, um Verzögerungen und Aussetzer effektiv zu vermeiden.
Da der Browser allerdings keinen einfachen Zugriff auf separate Threads im selben Umfang wie native Anwendungen bietet, wurde in der Portierung eine Lösung implementiert, die Audiopuffer in SharedArrayBuffers verwaltet. Diese werden vom Emulator befüllt und im UI-Thread mittels Web Audio API abgespielt. Mehrere Audiopuffer sorgen für ein stetiges Abspielen auch bei möglicher Systembelastung. Die Fokussierung auf hohe Performance ist ein zentraler Aspekt. Ohne die Verwendung von SharedArrayBuffers und Web Workern müsste der Emulationsprozess ständig mit dem Ereignis-Loop des Browsers konkurrieren, was zu spürbaren Einbußen bei Bildrate und Eingabelatenz führen würde.
Die Portierung erreicht demgegenüber eine flüssige Bedienung, bei der Tastatur- und Mausbewegungen nahezu verzögerungsfrei auf die Emulation übertragen werden. Diese technische Leistung demonstriert, dass mathematisch anspruchsvolle Anwendungen wie Emulatoren auch im Browserumfeld konkurrenzfähig sein können. Die Portierung des Basilisk II in den Browser zeigt zudem das Potenzial zukünftiger Verbesserungen auf. Die Nutzung von Emscripten-Pthreads könnte es ermöglichen, mehrere Threads direkt im C-Code zu spawnen, was eine noch organischere Nutzung von parallelen Ausführungssträngen erlaubt. Dies würde nicht nur die Audioverarbeitung weiter optimieren, sondern auch allgemeine Performancegewinne mit sich bringen.
Allerdings ist diese Funktionalität derzeit noch durch Einschränkungen in Browsern wie Chrome limitiert, die keine Web Worker unterstützen, die wiederum neue Web Worker starten. Neben der technologischen Innovation besitzt die Browser-Portierung des Basilisk II auch eine kulturelle Dimension. Indem klassische Macintosh-Systeme nun ohne Installation zusätzlicher Software in Webbrowsern genutzt werden können, wird der Zugang zu einem wichtigen Stück Computer- und Softwaregeschichte erleichtert. Die Archivierung und der einfache Zugriff auf alte Systeme erhalten so eine neue Bedeutung und können Bildungs- und Forschungszwecken dienen. Abseits technischer Herausforderungen ist es bemerkenswert, wie die Entwicklung dieser Browser-Version von Basilisk II auch auf den kontinuierlichen Lernprozess des Entwicklers James Friend zurückzuführen ist.
Sein Anfangsversuch in 2013 scheiterte noch an den damaligen Grenzen der Browsertechnik und eigenen Erfahrungsdefiziten im Bereich Emulation. Durch jahrelange Weiterentwicklung und Kenntnisse im Aufbau eines eigenen Simulationscomputers konnte er 2017 eine Lösung präsentieren, die stabil läuft und beeindruckende Performance liefert. Das Projekt zeigt exemplarisch, wie technische Beharrlichkeit und der Fortschritt in Webstandards zusammenwirken können. Abschließend lässt sich sagen, dass die Portierung des Basilisk II Classic Macintosh-Emulators in den Browser ein eindrucksvolles Beispiel für die Leistungsfähigkeit moderner Browserumgebungen ist. Sie eröffnet neue Möglichkeiten für Retro-Computing und digitale Archivierung, während sie gleichzeitig Fragen zur optimalen Nutzung von Web-Technologien im Bereich der Emulation aufwirft.
Für Enthusiasten und Technologen gleichermaßen eröffnet sich eine spannende Welt, in der klassische Systeme nicht nur bewahrt, sondern neu erlebt werden können. Die Zukunft hält mit Sicherheit weitere Verbesserungen bereit, die dieses Browser-Emulator-Projekt noch leistungsfähiger und vielseitiger machen werden.