Wer den ganzen Tag am Linux-Computer arbeitet, freut sich nach getaner Arbeit auf ein kleines Spielchen zur Entspannung. Wem dann Linux-Klassiker wie Mahjongg oder Frozen Bubble nicht reichen, stößt schnell an die Grenzen eines freien Betriebssystems (Abbildung 1). Ähnlich beschränkt zeigt sich Linux beispielsweise auch beim Ausfüllen der Steuererklärung oder bei der Arbeit mit hochauflösenden Grafiken. Wer solches tun möchte, muss Linux verlassen, seinen Rechner neu starten und ein auf derselben Festplatte installiertes Windows booten. Da wäre es doch viel schöner, wenn man dasselbe System direkt von Linux aus starten könnte, ohne sein Lieblingsbetriebssystem verlassen zu müssen: wie eine Puppe in der Puppe bei den berühmten russischen Matroschkas.
So schön das klingt, so schwer ist es in der Praxis zu realisieren, denn beide Betriebssysteme unterscheiden sich recht drastisch voneinander. Wer als Betreiber von Linux mit einem anderen Betriebssystem arbeiten möchte, muss so tun, als sei Linux dieses andere Betriebssystem.
Emulation: Wetteifern und nachahmen
Vor mehr als 40 Jahren, lange bevor es Linux gab, sah sich IBM schon einmal einem ganz ähnlichen Problem gegenüber: Das neue System/360 funktionierte vollkommen anders als der beliebte, aber in der Zwischenzeit veraltete 7070-Computer. Um potentiellen Kunden den Umstieg zu erleichtern, sollten sich die alten Anwendungen auch auf dem neuen System weiter nutzen lassen. Nach einigen Tests entschied sich IBM schließlich für die Idee ihres Ingenieurs Larry Moss, der eine Kombination aus Software und einer speziellen Hardwareerweiterung vorschlug: Einmal gestartet, überwachte die Kombi jeden Schritt der alten Anwendung und übersetzte deren Befehle bei Bedarf in die des neuen System/360. So verhielt sich der neue Computer exakt wie sein Vorgänger [1].
Dieses geschickte Täuschungsmanöver von Maschine zu Maschine versetzte die Käufer des neuen Modells in die Lage, ihre alten 7070-Anwendungen weiter zu nutzen. Da die Software einen fremden Computer nachahmte, bezeichnete Larry Moss seine Entwicklung als Emulator.
Moderne Emulatoren bilden einen kompletten Computer ausschließlich auf der Software-Ebene nach. Das gelingt mittlerweile so perfekt, dass man mit ihnen ein komplettes Gast-Betriebssystem samt der dafür entwickelten Anwendungen starten kann. Auf diese Weise erhält man einen virtuellen PC oder, allgemeiner: eine virtuelle Maschine (siehe Abbildung 2).
Beispiele für bekannte und kostenlose Emulatoren sind QEMU [2] und Bochs [3]. Wie Abbildung 3 zeigt, leiten sie einfach die Bildschirmausgabe in ihr eigenes Anwendungsfenster um. Das unter dem virtuellen PC installierte Betriebssystem glaubt dagegen, einen Standard-Monitor zu nutzen.
Ein Emulator bietet gleich mehrere Vorteile: Zunächst einmal lässt sich das in ihm laufende System recht einfach klonen. Da der Emulator einen ganzen PC als Software nachbaut, kann man dessen aktuellen Zustand leicht einfrieren, in einem Snapshot archivieren oder auf einem anderen Computer fortsetzen.
Da die simulierte Hardware sich nicht ändert, funktioniert dieser Transfer sogar unabhängig von der real existierenden Hardware. Auf diese Weise lassen sich neue Programme gefahrlos ausprobieren und testen: Sie speichern einfach den aktuellen Emulatorzustand, installieren die gewünschten Anwendung und stellen bei Nichtgefallen den alten Stand wieder her.
Neben solchen reinen Software-Lösungen gibt es auch Hardware-Emulatoren. Wie im Fall des historischen System/360 findet man aber auch Mischlösungen. Ein aktuelles Beispiel dafür bietet die Spielkonsole Playstation 3 von Sony. In der ersten Fassung enthielt sie noch eine Hardwarekomponente, mit der auch Playstation-2-Spiele auf der Konsole liefen. In der aktuellen europäischen Version übernimmt diese Aufgabe ein reiner Software-Emulator.
Dieses Beispiel zeigt ein weiteres Haupteinsatzgebiet von Emulatoren: Mit diesen Programmen erwecken Sie nicht mehr erhältliche Hard- und Software zu neuem Leben. So verrichten plötzlich etwa die gute, alte Buchhaltung aus DOS-Zeiten oder die legendäre WordPerfect-Textverarbeitung aus gleicher Epoche wieder ihre Dienste.
Im Fokus solcher Emulationen stehen besonders die Videospielkonsolen und Heimcomputer des vorigen Jahrhunderts. Fans bilden die alten Schätzchen bis aufs Bit genau in Software nach. Auf diese Weise kommen Klassiker wie Commodore Amiga [4], Atari ST [5] oder der C=64 [6] auf Linux-PCs wieder zu neuen Ehren (Abbildung 4).
Emulatoren verursachen systembedingt aber auch Probleme: Da sie sämtliche Hardwarekomponenten des Computers möglichst exakt simulieren müssen, schlucken sie eine Menge Rechenleistung. Als Faustregel gilt: Je älter ein Betriebssystem, desto schneller lässt es sich in einem Emulator betreiben. Dagegen arbeitet ein blutjunges Ubuntu unter Qemu, als würde man es auf einem längst in die Jahre gekommenen Rechner betreiben.
Unbekannte virtuelle Maschinen
Virtualisierungslösungen findet man auch dort, wo man sie eigentlich nicht vermutet. So steckt hinter der BIOS-Alternative OpenFirmware ebenfalls eine virtuelle Maschine [16]. Die in den Computer eingebaute Hardware kann dort eigene Erweiterungen zur Basiskonfiguration installieren – und zwar unabhängig von der Hardware-Plattform.
Einige Prozessoren oder Computer lassen sich in einen Kompatibilitätsmodus versetzen. Alle heutigen x86-Prozessoren beispielsweise können immer noch Programme für ihre wesentlich älteren Vorgänger ausführen. Der Prozessor-Hersteller Transmeta geht sogar noch einen Schritt weiter: Um mit den Intel- und AMD-Prozessoren kompatibel zu bleiben, übersetzen Transmeta-Produkte einfach alle Befehle vor der Ausführung in ihr eigenes Format.
Ein weiteres Beispiel für Virtualisierungen ist der Commodore 128 aus den 80er Jahren des vergangenen Jahrhunderts. Der Heimcomputer hatte seinen eigenen Betriebsmodus, konnte aber zusätzlich auch Anwendungen seines Bruders C=64 sowie von CP/M, dem damals aktuellen PC-Betriebssystem, verarbeiten.
Virtualisierung: So tun, als ob
Bei näherem Hinsehen entpuppt es sich allerdings als unsinnig, eine komplette Intel-CPU nachzubilden, wenn sie sowieso im Computer steckt: Stattdessen könnte man den Prozessor doch einfach direkt nutzen und bräuchte nur den Rest des gewünschten Zielsystems zu simulieren. Diese Idee lässt sich auf alle weiteren Komponenten ausdehnen: Man bildet nur noch die gerade notwendigen Teile der Hardware durch Software nach. In einem solchen Fall spricht man nicht mehr von einer Emulation, sondern von Virtualisierung.
Entfernt man aus einer Emulation einfach die Prozessorsimulation, spricht man von einer Hardware- oder Systemvirtualisierung. Qemu lässt sich beispielsweise mit der Erweiterung KQemu [2] auf diese Arbeitsweise ein, und auch das kommerzielle VMware [7] verzichtet auf die Nachbildung des Prozessors. Das so erzielte Plus an Geschwindigkeit bezahlt der Anwender allerdings mit einer Bindung an einen speziellen Prozessortyp. So funktionieren die beiden genannten Lösungen beispielsweise nicht ohne weiteres mit einem PowerPC.
Von Wirten und Gästen
Wer sich mit Virtualisierung beschäftigt, stößt unweigerlich auf die Begriffe Host und Guest. Als Host (Wirt) bezeichnet man den Rechner, der eine simulierte Computerumgebung bereitstellt. In dieser startet und verwaltet der Host weitere Betriebssysteme, die so genannten Guests (Gäste). Linux ist zum Beispiel der Wirt, wenn Qemu eine virtuelle Maschine bereitstellt. Das unter Qemu gestartete Windows ist in diesem Fall der Gast.


