Ein Computer, ein Betriebssystem - diese Gleichung stimmt so schon länger nicht mehr. Moderne PC-Hardware ist darauf ausgelegt, ohne große Umstände mehrere Betriebssysteme zur gleichen Zeit auszuführen, bei Bedarf anzuhalten und wieder fortzusetzen. Der Schlüssel dazu ist Virtualisierung, die die erforderlichen Software-Voraussetzungen für mehrere gleichzeitig laufende Betriebssysteme auf der Hardware schafft. Obwohl die Technik dahinter nicht neu, sondern schon seit rund zehn Jahren auf Desktop-Rechnern und Servern im Einsatz ist, bleibt Virtualisierung ein heißes Thema.
Denn trotz sinkender Hardware-Preise haben virtuelle Maschinen bei steigenden Energie- und Lohnkosten einen Vorteil gegenüber dedizierten Rechnern: Ein leistungsfähiger Server kann mehrere virtuelle PCs beherbergen und den dort laufenden Systemen ganz nach Bedarf mehr oder weniger Systemressourcen zuweisen, um die Auslastung zu optimieren. Es ist auch kein Zufall, dass erste Virtualisierungstechnologien auf Großrechnern wie dem IBM S/370 entwickelt wurden. Auf dieser Mainframe liefen Anfang der 70er Jahre bereits mehrere virtuelle Maschinen auf der gleichen Hardware unter dem Betriebssystem VM/CMS.
Virtualisierung ist eine gute Methode, um die Zahl dedizierter Rechner zu reduzieren und die vorhandene Hardware optimal zu benutzen - dies spart Energie und Administrationsaufwand. In Firmennetzwerken und Rechenzentren gehört die Technologie schon länger zum Alltag. Für Heimanwender bieten Desktop-Virtualisierungslösungen eine ausgereifte Möglichkeit, ohne großen PC-Fundus verschiedene Betriebssysteme zu testen, Linux unter Windows zu nutzen oder auch Windows unter Linux, und um eigene, virtuelle Server aufzusetzen. Da die Festplatte(n) eines virtuellen Systems meist nur als Image-Dateien vorliegen, ist es ein Leichtes, den vorherigen Zustand eines virtuellen Systems wiederherzustellen.
Begriffe: Simulation, Emulation, Virtualisierung
Rund um das Thema Virtualisierung stößt man häufig auf die Begriffe Simulation und Emulation, die zwar Ähnliches, aber nicht dasselbe bedeuten. Fälschlicherweise werden die Begriffe noch oft synonym verwendet, obwohl sie nicht das Gleiche bedeuten. Zwar sind die Unterschiede zwischen Emulation und Virtualisierung häufig fließend, so haben zum Beispiel Virtualbox und Vmware stellenweise die Merkmale von Emulatoren, um virtuellen Gastsystemen das Leben zu erleichtern. Bei den Konzepten der Simulation, Emulation und Virtualisierung handelt es sich allerdings um ganz unterschiedliche, technische Ansätze mit jeweils anderen Zielen und Anwendungsgebieten. Die folgende Aufstellung bringt Licht ins Dunkel der grundlegenden Begriffe rund um das Thema Virtuelle PCs.
Simulation: In einer Simulation wird ein fremdes System mit seiner Hardware vollständig abgebildet. Das bedeutet, dass eine Simulation eine meist abgeschlossene Umgebung nachstellt, aus der kein direkter Hardware-Zugriff möglich ist, da alle Systemkomponenten mittels Software nachgebildet sind. Das besondere Merkmal ist, dass eine Simulation nicht nur Äußerlichkeiten nachbildet, sondern auch die interne Logik bis ins Detail nachstellt. Simulationen sind beispielsweise nützlich, um eine andere Prozessorplattform auf einem System nachzubilden sowie um Betriebssysteme oder einzelne Anwendungen zu entwickeln. So gibt es etwa Simulatoren von alten Großrechnern, wie etwa die PDP-8, oder Prozessorsimulatoren des Motorola 68000er, um alte Programme zu kompilieren. Der bekannteste Vertreter dieser Klasse ist das Linux-Programm Wine , dessen Name sinnigerweise "Wine Is Not an Emulator" bedeutet und das einen Windows-Simulator auf API-Ebene bereitstellt. Damit lässt sich Windows-Software unter Linux ausführen und Wine simuliert dabei mit eigenen Programmbibliotheken eine (unvollständige) Windows-Umgebung.
Emulation: Im Gegensatz zur Simulation geht die Emulation nicht so weit, die Interna eines Systems komplett abzubilden. Für die Emulation genügt es, die Äußerlichkeiten nachzuahmen, damit Programme kompatible Soft- und Hardware-Schnittstellen vorfinden. Ziel einer Emulation ist es, nur das definierte, sichtbare Verhalten nachzustellen, während die Interna aber ganz anders funktionieren. Ein aktuelles Beispiel für einen Emulator findet sich zum Beispiel in der offiziellen Android-Entwicklungsumgebung von Google: Um die Entwicklung von Apps zu erleichtern, ist hier ein Emulator enthalten, der sowohl das Hardware-Verhalten als auch die Bildschirmgrößen von Smartphones nachbildet.
Virtualisierung: Virtualisierungsumgebungen, die virtuelle Maschinen bereitstellen, sollen möglichst wenig simulieren oder emulieren. Stattdessen werden Hardware-Zugriffe möglichst immer an die tatsächlichen Systemkomponenten wie Prozessor, Grafikkarte und Festplatte durchgereicht und von der Virtualisierungsumgebung nur verwaltet. Zusätzlich jedoch emulieren Virtualisierungsumgebungen auch Hardware-Komponenten, um den idealen Betrieb von Gastsystemen sicherzustellen. So emulieren der Vmware Player und Virtualbox beispielsweise Netzwerkkarten, die mit den Standardtreibern von Gastsystemen funktionieren. Für den unproblematischen Zugriff auf virtuelle Festplatten kommt ebenfalls ein emulierter Standard-SATA- oder IDE-Chipsatz zum Einsatz, damit keine Extratreiber im Gastsystem erforderlich sind. Außerdem kann die Installation von Gasterweiterungen dabei helfen, vorhandene Hardware-Komponenten ohne Emulationsschicht besser zu nutzen. Aktuelle Prozessoren von AMD und Intel bieten zudem neue Befehlserweiterungen, damit VMs ihre CPU und Speicherzugriffe direkt auf Hardware-Ebene erledigen können, falls der Hypervisor das erlaubt. Virtualisierte Systeme (Virtuelle Maschinen) laufen aus diesem Grund mit Abstrichen bei der Grafikausgabe und Festplattenzugriffen nur minimal langsamer als nativ laufende Betriebssysteme.
Enge Verwandte von virtuellen Maschinen sind übrigens die virtuellen PCs sowie die Laufzeitumgebungen von Java und von .NET. In der Java Virtual Machine bekommt der zum Ausführungszeitpunkt kompilierte Programmcode automatisch eine eigene, virtuelle Maschine zugewiesen, aus der das Programm nicht ausbrechen darf und die den direkten Zugriff auf Hardware und Betriebssystem verwehrt. Alle Zugriffe müssen über diese Laufzeitumgebung und deren Bibliotheken gehen. Dies erfolgt nicht nur aus Sicherheitsgründen, sondern sorgt auch dafür, dass Java-Programme unabhängig von der physikalischen Hardware auf verschiedenen Plattformen laufen.