Anwendungsvirtualisierung
# Anwendungsvirtualisierung

Anwendungsvirtualisierung (engl. application virtualization) ist eine Softwaretechnologie, die die Anwendung vom ausführenden Betriebssystem isoliert und eine Schicht zwischen Anwendung und Betriebssystem als Laufzeitumgebung zur Verfügung stellt.

Eine vollständig virtualisierte Anwendung wird nicht mehr im herkömmlichen Sinne auf einem Betriebssystem installiert, obwohl sie immer noch auf dessen Basis ausgeführt wird. Die Anwendung verhält sich so, als wenn sie herkömmlich direkt auf dem Betriebssystem installiert wäre, wird aber tatsächlich in einer je nach Ausprägung teilweise oder vollständig isolierten und nur für sie erstellten, virtuellen Umgebung (manchmal auch als Sandbox bezeichneten) ausgeführt.

In diesem Kontext beschreibt der Begriff "virtualisiert" also die Isolierung der Anwendung vom darunterliegenden Betriebssystem, während sich der Begriff im Kontext der virtuellen Maschine mehr auf die Abstraktion von der darunterliegenden Hardwareschicht bezieht.

## Beschreibung

Betriebssysteme wie Microsoft Windows oder Linux enthalten bereits (zum Teil sehr funktionsbegrenzte) Mechanismen zur Anwendungsvirtualisierung. Beispielsweise stellt Windows 7 den sogenannten „Windows-XP-Modus“ zur Verfügung, der eine isolierte Windows-XP-Laufzeitumgebung zur Verfügung stellt, die die Ausführung älterer Anwendungen, die nicht mehr mit Windows 7, wohl aber mit Windows XP kompatibel sind, erlaubt.

Vollständige Anwendungsvirtualisierung erfordert eine Virtualisierungsschicht, die Teile der normalerweise durch das Betriebssystem bereitgestellten Laufzeitumgebung ersetzt. Beispielsweise werden alle Dateioperationen und in Windows Zugriffe auf die Windows-Registry durch diese Schicht abgefangen und aus Sicht der Anwendung transparent durch einen Zugriff auf die isolierte Laufzeitumgebung ersetzt. Für die Anwendung selbst ist der gesamte Vorgang der Virtualisierung vollständig transparent, d. h. auch alle Ressourcen werden durch die Virtualisierungsschicht entsprechend behandelt. Alle Konfigurationen der virtuellen Laufzeitumgebung werden an einem zentralen Ort verwaltet (meist sogar in einem einzigen File), so dass die gesamte Umgebung inklusive der Anwendung sehr leicht auf einen anderen Rechner übertragen und dort mit der gleichen Konfiguration ohne Änderungen am eigentlichen Betriebssystem ausgeführt werden kann.

Dieses Verfahren wird beispielsweise von den Anwendungsvirtualisierungssystemen AppZero, BoxedApp, Cameyo, Ceedo, AppliDis, Evalaze, InstallFree, 2X Software, Citrix XenApp, Systancia, Novell ZENworks Application Virtualization, Numecent Application Jukebox, Microsoft Application Virtualization, Software Virtualization Solution, Spoon (früher Xenocode), Symantec Workspace Virtualization und Workspace Streaming, VMware ThinApp, P-apps und Oracle Secure Global Desktop auf der Windows-Plattform realisiert.

## Verwandte Techniken

Techniken, die häufig mit Anwendungsvirtualisierung kombiniert werden oder mit ihr verwandt sind, umfassen:

* Applikationsstreaming: Teile des Anwendungscodes, Daten und Einstellungen werden erst über eine Netzwerkverbindung geliefert, wenn sie benötigt werden (d. h. spätestens beim Start der Anwendung), anstatt die Anwendung bereits zuvor vollständig auf dem Rechner aufzuspielen. Meist wird nur eine minimale Clientanwendung vorinstalliert, die dann die Ausführung der über das Netzwerk gelieferten Anwendung übernimmt und ggf. auch eine gekapselte Laufzeitumgebung zur Verfügung stellt. Ein Beispiel für eine Kombination von Anwendungsstreaming und vorinstallierter, gekapselter Laufzeitumgebung ist Java Web Start, ein weiteres Citrix XenApp.
* Remote Desktop Services (manchmal auch Terminal Server genannt) sind Dienste, die es mehreren Benutzern gleichzeitig in unterschiedlichen Laufzeitumgebungen erlauben, denselben Rechner über das Netzwerk zu bedienen. Dabei werden lediglich bestimmte Ein- und Ausgaben über das Netzwerk an den steuernden Rechner umgeleitet (wie z. B. der Bildschirminhalt oder Tonausgaben), während sämtliche Aktionen auf dem entfernten Rechner ausgeführt werden. Beispiele für solche Dienste sind Secure Shell, Telnet oder Microsofts Remote Desktop Protocol, die es mehreren Benutzern erlauben, sich auf demselben Rechner anzumelden und unabhängig voneinander Anwendungen auszuführen.
* Desktop-Virtualisierung ist ein Sammelbegriff, der Softwareverfahren beschreibt, die die Portierbarkeit, Verwaltbarkeit und Kompatibilität mit Anzeigegeräten für die Desktopumgebung eines PCs erhöhen, indem die Ausführung von Anwendungen vom physischen Anzeigegerät getrennt wird. Eine verbreitete Implementierung ist es, mehrere Desktopsysteme auf einer leistungsfähigen Serverhardware mit Hilfe eines Hypervisors auszuführen und zum Zugriff und zur Anzeige der Bildschirminhalte verschiedene Anzeigegeräte (zum Beispiel sog. Thin-Clients, Desktop-PCs oder mobile Geräte) zu verwenden. Die Infrastruktur zur Bereitstellung solcher Umgebungen wird in der Regel als Virtual Desktop Infrastructure, kurz VDI, bezeichnet.

## Vorteile

* Anwendungen können in Betriebssystemumgebungen ausgeführt werden, für die sie ursprünglich nicht entwickelt wurden. Zum Beispiel erlaubt es Wine, einige Microsoft-Windows-Anwendungen unter Linux auszuführen. CDE, eine weitere Applikationsvirtualisierungslösung, erlaubt es, Linux-Anwendungen auf unterschiedlichen Linux-Distributionen ohne Änderung auszuführen.
* Eine virtualisierte Anwendung kann komplett mit der Definition ihrer Laufzeitumgebung auf portable Medien kopiert werden (z. B. auf einen USB-Stick) und anschließend direkt vom portablen Medium ausgeführt werden ohne die Notwendigkeit der Installation, womit die Anwendung zur portablen Software wird.
* Die Kapselung der Laufzeitumgebung vom darunterliegenden Betriebssystem kann das eigentliche Betriebssystem vor den Auswirkungen von fehlerhaftem Code in der Anwendungssoftware (der zum Beispiel zu Speicherschutzverletzungen führen kann) schützen, wenn diese in der gekapselten Laufzeitumgebung ausgeführt wird. Die Auswirkungen des Fehlers treffen dann nur die Laufzeitumgebung der virtualisierten Anwendung.
* Wird Anwendungsvirtualisierung anstatt einer virtuellen Maschine im Sinne der prozessbasierten Virtualisierung verwendet, werden weniger Ressourcen verwendet, da der zusätzliche Verwaltungsaufwand für eine VM mit einer Anwendung größer ist als für eine einzelne virtualisierte Anwendung.
* Durch die Trennung der Laufzeitumgebungen verschiedener virtualisierter Applikationen können Anwendungen parallel betrieben werden, die ansonsten nicht auf einem Betriebssystem parallel betrieben werden könnten (z. B. weil sie sich durch fehlerhaften Anwendungscode gegenseitig stören oder dieselbe Ressource jeweils exklusiv benötigen).
* Durch virtualisierte Anwendungen kann das darunterliegende Betriebssystem leichter ausgetauscht werden (solange die Applikationsvirtualisierungssoftware beide Betriebssysteme unterstützt).
* Erhöhung der Sicherheit durch Isolierung der Applikation innerhalb der Sandbox vom Betriebssystem (z. B. bei der Analyse von Schadcode).

## Grenzen

* Nicht alle Anwendungen lassen sich im Sinne der Anwendungsvirtualisierung virtualisieren. Manche Anwendungen benötigen zum Beispiel spezielle Gerätetreiber, die in der virtuellen Laufzeitumgebung nicht zur Verfügung stehen, oder es werden undokumentierte Betriebssystemfunktionen benutzt, die in der Sandbox nicht nachgebildet wurden.
* Anwendungen, die sehr eng mit dem Betriebssystem integriert sind (z. B. Antivirus-Software), lassen sich nur sehr schwer virtualisieren, da sämtliche verwendeten Betriebssystemfunktionen bekannt und durch die Anwendungsvirtualisierungsumgebung zur Verfügung gestellt werden müssten.
* Die Lizenzierung von virtualisierten Applikationen verkompliziert sich gegenüber den klassischen Ansätzen, bei denen eine Softwarelizenz häufig an den physischen Rechner, der zur Ausführung verwendet wurde, gebunden war. Nun muss sichergestellt werden, dass sowohl die Virtualisierungssoftware als auch die Anwendung selbst korrekt lizenziert wurden.
