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,[1] 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,[2] 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.[3] 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:
- Anwendungs- oder 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.[4] 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 Dienste (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 ssh, 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.[5][6]
- 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.[6][7]
- 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).[8]
- Durch virtualisierte Anwendungen kann das darunterliegende Betriebssystem leichter ausgetauscht werden (solange die Applikationsvirtualisierungssoftware beide Betriebssysteme unterstützt).[9]
- Erhöhung der Sicherheit durch Isolierung der Applikation innerhalb der Sandbox vom Betriebssystem (z. B. bei der Analyse von Schadcode).[9]
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.[10]
- 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.[11]
Einzelnachweise
- Microsoft Application Virtualization Technical Overview. Microsoft. Archiviert vom Original am 12. April 2011. Abgerufen am 14. März 2021.
- Amir Husain: How to build an Application Virtualization Framework. VDIworks. Abgerufen am 1. Juli 2008.
- Coby Gurr: Facilitating Microsoft Windows Vista Migration Through Application Virtualization (PDF) Dell. 28. Januar 2008. Abgerufen am 19. Juni 2008.
- Applikations-Streaming - abgerufen am 3. Oktober 2014
- Philip J. Guo: CDE: lightweight application virtualization for Linux. 2011. Abgerufen am 26. November 2012: „CDE implements a form of lightweight application virtualization that allows you to easily distribute portable software, to deploy applications to the cloud, to make computational experiments reproducible, and to run software on non-native Linux distros without conflicts.“
- Philip J. Guo: CDE: Using System Call Interposition to Automatically Create Portable Software Packages. (pdf) In: Proceedings of the 2011 USENIX Annual Technical Conference. 1. Juni 2011. Abgerufen am 26. November 2012.
- Domagoj Pernar: Application Virtualization Download repository, and how to make applications portable. Age of Virtualization. Oktober 2009. Archiviert vom Original am 4. März 2010. Abgerufen am 14. März 2021.
- Overview Series: Windows Vista Application Compatibility. Microsoft. Archiviert vom Original am 4. Januar 2013. Abgerufen am 14. März 2021.
- Desktop Virtualization Comes of Age (PDF) Credit Suisse. 26. November 2007. Archiviert vom Original am 20. Februar 2009. Abgerufen am 14. März 2021.
- Peter Varhol: Application Virtualization Hits Its Stride. Redmond Magazin. September 2007. Archiviert vom Original am 10. Juni 2008. Abgerufen am 14. März 2021.
- Licensing pitfalls in application virtualization. OMTCO Operations Management Technology Consulting GmbH. Abgerufen am 20. Mai 2013.