# Portable Software

Portable Software (über französisch portable aus lateinisch portare ‚[mit sich] tragen‘), auch Standalone-Software oder (USB-)Stick­-Ware genannt, ist Software, typischerweise Anwendungssoftware, die ohne weitere Anpassungen oder Einrichtung (Installationen) auf verschiedenen Rechnern läuft. Sie kann zum Beispiel auf einen Wechseldatenträger übertragen (oder kopiert) und von dort aus auf jedem (kompatiblen) Rechner ausgeführt werden, ohne sie auf diesem zu installieren.

## Motivation und Nutzen

Bestimmte Programme, aber auch deren Einstellungen und persönliche Daten möchten viele Nutzer an verschiedenen Computern zur Verfügung haben. Mit Hilfe portabler Software können diese auf einen USB-Stick (oder einen anderen Wechseldatenträger) kopiert werden, so dass der Benutzer nur diesen Stick einstecken muss, um Zugriff auf seine Programme und Einstellungen zu haben.
Da portable Software keine Spuren auf dem Wirtscomputer hinterlässt und keine Installation braucht, kann man sie auch auf Computern nutzen, auf denen diese Software nicht vorhanden ist, obwohl man keine Administrator-Rechte oder auch keine Schreibrechte auf einem System-Datenträger hat.

## Definition und Abgrenzung

Wozu eine Portable Software als „portabel“ bzw. „unabhängig“ angenommen wird, variiert etwas: Teilweise wird die Unabhängigkeit innerhalb einer (Betriebs)system-Installation gemeint (d. h. die Anwendungsprogramme können also ohne Verlust der Funktionalität im Verzeichnisbaum verschoben werden), manchmal wird damit die Unabhängigkeit von einem spezifischen Hardwaresystem gemeint (d. h., die Software ist auch auf anderen aber kompatiblen physikalischen Rechnersystemen voll funktionsfähig). Die Unabhängigkeit spezifischer Betriebssystem-Familien, normalerweise als Plattformunabhängigkeit bezeichnet, ist nicht gemeint, wenn von Portabler Software gesprochen wird, da das eine Qualität ist, die typischerweise über die Nutzungsszenarien von Portabler Software hinausgeht.
Für den häufigsten Nutzungsfall Anwendungsprogramme kann Portable Software auch als Variante einer Anwendungsvirtualisierung verstanden werden. Mit einer weitergehenden Systemvirtualisierung können zwar ebenfalls portable Eigenschaften erzielt werden, jedoch mit zusätzlichem Aufwand und weiteren Nachteilen (Dateigröße, Leistungsfähigkeit, schlechtere UX/GUI Integration).

## Eigenschaften

Prinzipiell interagiert Portable Software nur wenig mit dem Betriebssystem bzw. ist nicht (oder nur schwach) in dieses integriert. Es hängt dementsprechend nur von einigen wenigen Eigenschaften des spezifischen Betriebssystems und des (physischen) Computersystems ab.

### Keine Installation notwendig

Typischerweise braucht Portable Software keine Installation und kann direkt vom Trägermedium aus verwendet werden. Manchmal wird sie auch durch Kopieren in ein (beliebiges) Wirtsrechner-Verzeichnis gebrauchsfertig gemacht. Meist kann die gebrauchsfertige Software auch nach Benutzung durch einfaches Kopieren dupliziert werden, was für eine einfache Datensicherung auf einem weiteren Datenträger sowie ein einfaches Weitergeben der Software vorteilhaft ist. Portable Software wird häufig als gepacktes Archiv verbreitet, welches nur in ein Verzeichnis entpackt werden muss, ohne dass systemspezifische Installationsprogramme benötigt werden. Dieses einfache Auspacken wird zum Teil irreführend auch als Installieren bezeichnet, obwohl keine tiefere Integration in das Wirtssystem stattfindet.
Wird eine portable Software doch „installiert“, geht es dabei um die Einrichtung unter sehr nicht-restriktiven Bedingungen, d. h., der Ablageort kann frei gewählt werden, die vorausgesetzten Systembibliotheken sind minimiert und spezielle Nutzerrechte (Admin oder Root) sind nicht notwendig usw.

### Keine Spuren auf dem Wirtssystem

Im Idealfall hinterlässt portable Software keine Spuren auf dem Wirtssystem. Spuren können einerseits Installationseinträge jeglicher Art (zum Beispiel in der Registrierungsdatenbank, im Benutzerprofil oder Ähnliches) oder aber Benutzerdaten sein, die nicht auf einem fremden Rechner zurückbleiben sollten.

### Funktion mit eingeschränkten Rechten

Auf dem Wirtssystem hat man häufig keine Administratorrechte. Die Software soll daher auch mit eingeschränkten Rechten lauffähig sein. Somit kann sie bei ordentlicher Konfiguration des Wirtssystems auch keinen übermäßigen Schaden anrichten.
Das ist allerdings nicht möglich, wenn das Programm direkten Zugriff auf die Hardware oder gewisse Systemkomponenten braucht. So benötigen z. B. die Verschlüsselungsprogramme FreeOTFE oder TrueCrypt selbst im „Portable Mode“ bzw. „Traveller Mode“, zum Ver- bzw. Entschlüsseln des Wechseldatenträgers Administratorrechte.

## Entwicklung portabler Programme

Oft sind portable Programme angepasste Versionen von konventionellen installationsbedürftigen Programmen. Um sie von diesen zu unterscheiden, wird oft das Prädikat „portable“ vorangestellt. Es gibt auch Programme, die beispielsweise bezüglich der Schreibzugriffe auf die Verhältnisse der speziellen Datenträger (meist Flash-Speicher) zugeschnitten sind. Eine Sonderform ist U3-Software, die nur von einem mit der proprietären U3-Software verträglichen USB-Stick ausgeführt werden kann.
Jedoch kann nicht von jedem Programm eine portable Version erstellt werden.

## Grenzen portabler Programme
### Hardwareplattform-Abhängigkeit

Anwendungen, welche in einem Binärformat (z. B. ELF oder PE) vorliegen, wurden von einem Compiler für eine spezifische Hardwareplattform generiert (z. B. IA-32). Verschiedene CPU-Architekturen variieren in Befehlssatz, Datenwortgröße (z. B. 32-Bit oder 64-Bit) oder Byte-order. Das beschränkt den portablen Einsatz auf Plattformen der gleichen Hardware. Ein portabler Ansatz zur Umgehung dieser Problematik sind sogenannte Fat Binaries, die Varianten für mehrere Hardwareplattformen enthalten. Beispielsweise setzt Apple seit 2006 Fat Binaries ein, hier Universal Binaries genannt, um den problemarmen Übergang von den PowerPC-CPUs zu den Intel-CPUs zu ermöglichen.

### Systemnahe Software

Nicht alle Programme eignen sich zur Verwendung als portable Software. Beispielsweise benötigen Virenwächter, Systemwerkzeuge und andere systemnahe Software die Möglichkeit, tief ins System einzugreifen. Deren portable Versionen haben eine geringere Bedeutung, weil sie in der Regel nicht den gleichen Funktionsumfang wie installierte Software aufweisen können.
Allgemeine Anwendungsprogramme, zum Beispiel Text-Editoren und E-Mail-Clients, kommen hingegen meist ohne Systemeingriffe aus und eignen sich für den portablen Einsatz. So ist zum Beispiel das Office-Paket LibreOffice in einer portablen Version verfügbar.

### Rechtliche Probleme

Neben den technischen Aspekten spielen beim Einsatz als portable Software auch die Software-Lizenz und etwaige Kopierschutz-Mechanismen eine Rolle. Häufig ist das Kopieren von Software vom Hersteller oder Lizenzgeber unerwünscht und wird in der Lizenzvereinbarung verboten. Ein Kopierschutz bindet ein Programm oft an ein bestimmtes System – das Binden an einen mobilen Datenträger ist technisch aufwändig und in der Regel nicht vorgesehen. Daher spielt hier freie Software eine entscheidende Rolle, weil sie dem Benutzer das Recht auf eine unbeschränkte Benutzung – auch als portable Software – zusichert. Jedoch verhindert die freie, aber strenge GPL-Lizenz manchmal das statische Einlinken von Bibliotheksabhängigkeiten, um portable Programme zu erzeugen. Die GPL, unter der viele Bibliotheken stehen, schließt dieses aus, wenn das Programm selbst einer weniger restriktiven oder proprietären Lizenz unterliegt.

### Sicherheit im Unternehmen

IT-Verantwortliche sind für die Konfiguration und Sicherheit der Systeme im Unternehmensnetzwerk verantwortlich. Wechseldatenträger und die darauf enthaltenen Daten und Programme entziehen sich jedoch deren Kontrolle und stellen ein Risiko dar. Vorbeugend ist es teilweise üblich, USB-Anschlüsse im BIOS oder im Betriebssystem des Rechners zu sperren oder das Ausführen von Programmen von externen Medien zu unterbinden.

### Betriebssysteme und Portabilität
#### Windows-Software

Windows mit seinen MS-DOS-Wurzeln besitzt keinen fixen Standard oder eine feste Übereinkunft über den Installationspfad von Programmen; der Anwender wird bei Installationen praktisch immer zu einem Zielpfad befragt. Dadurch sind variierende Ausführungspfade von Programmen häufig kein Problem, sowohl auf Betriebssystem- wie auch auf Anwendungseite, im Gegensatz zu unixoiden Betriebssystemen, bei denen sich Standardorte durchgesetzt haben. Die der Portabilität dienliche Ausführbarkeit von Programmen aus beliebigen (Installations)verzeichnissen heraus (siehe Zeile 9) mit eigenen lokalen Bibliotheken (Private DLLs) ist etwas, das Windows seinem MS-DOS-Ursprung verdankt; die meisten DOS-Programme sind portabel, und nur wenige benötigen spezielle TSR-Programme, welche beim Systemstart geladen werden müssen.
Auch kommt dem Erstellen portabler Software für Windows zugute, dass Abwärtskompatibilität für diese Software-Plattform eine hohe Priorität hat (stabile Funktionsschnittstellen, Verzeichnisstruktur etc.), es wird also viel Aufwand betrieben, um die Ausführbarkeit binärer Programme über eine breite Palette an Windowsversionen und deren Updates zu gewährleisten.
Jedoch ist die empfohlene Verwendung der zentralen Registrierungsdatenbank seit Windows 95 anstelle lokaler INI-Dateien ein Hindernis für Portabilität unter Windows. Speichern Programme ihre Konfigurationsdaten in der Registry, können diese nicht ohne weiteres zwischen verschiedenen Rechnern kopiert werden, und oft ist auch nicht dokumentiert, in welchem Teil dieser Datenbank ein Programm seine Einstellungen ablegt, damit man Registrierungsdateien nutzen könnte. Eine verstreute Speicherung von Programmdaten in mehreren Systemverzeichnissen (Profil, Persönliche Einstellungen, Persönliche Lesezeichen etc.) im Rahmen der Multiuserverwaltung verkompliziert die Portabilität ebenfalls. Seit Windows Vista können Programme zudem im Standard-Programme-Ordner nicht mehr ohne Weiteres schreiben (Benutzerkontensteuerung), weshalb sie ihre Einstellungen seither in aller Regel in Unterordnern von %APPDATA% (Anwendungsdaten) oder HKCU\Software ablegen, was sie gleichzeitig multiuserfähig macht. Software, die ursprünglich nicht aus der Windows-Welt stammt, nutzt meist einen mit einem Punkt beginnenden Ordner direkt im Profilverzeichnis. Die Verwendung als (im Normalfall nicht multiuserfähige) portable Software müssen die Programme dann allerdings explizit unterstützen, indem sie es erlauben, Einstellungen in einem Pfad relativ zur Anwendungsdatei abzulegen. Einige Programme, insbesondere wenn sie ansonsten portabel sind, fragen den Benutzer bei der Installation oder beim ersten Start, welche Art der Speicherung ihrer Konfiguration er bevorzugt: in der Registrierungsdatenbank, als Dateien in %APPDATA% oder als Dateien im Installationsverzeichnis. Mit letzterer Option wird das Programm zu portabler Software.

#### Linux-Software

Unter Linux werden Programme typischerweise tief ins Betriebssystem integriert, d. h. mit diesem zusammen kompiliert und ausgeliefert (Linux-Distribution). Diese schwache Differenzierung zwischen Anwendungen und Betriebssystem und damit nur schwach ausgeprägtes binäres und stabiles Plattformkonzept, erschwert die Erstellung portabler Anwendungen deutlich. Dazu gehört die im Allgemeinen strikte, systemweite Verwaltung von Anwendungen und Programmbibliotheken per Paketverwaltung, die Portabilität erschweren. Nach einer Analyse des klik-Projekts über die verschiedenen Paketverwaltungssysteme unter Linux fehlen den am häufigsten genutzten Systemen RPM und APT wichtige Fähigkeiten, um portable Installationen zu ermöglichen. Zu den fehlenden Eigenschaften gehören die Installierbarkeit ohne Root-Rechte ('Non-root package installation'), die Unmöglichkeit, das System oder andere Applikationen zu beschädigen ('Impossible to mess base system', 'Impossible to mess other apps') und die Möglichkeit, mehrere Versionen einer Anwendung zu installieren ('Multiple versions coexist').
Auch das Umplatzieren (Relocation) von Anwendungsprogrammen zwischen verschiedenen Verzeichnissen ist in Linux nicht vorgesehen, Pfade werden typischerweise zur Compilezeit in der Anwendung hart-codiert. Die zum Autopackage gehörende Bibliothek binreloc bietet eine Funktionalität vergleichbar der Win32-API-Funktion GetModuleFilename, wodurch Verzeichnis-relokierbare Anwendungen und Bibliotheken möglich werden.
Auch können die Unterschiede der Linux-Distributionen untereinander, also die Variationen in Verzeichnisbaumstruktur und den mitgelieferten Bibliotheken, ein problemfreies, portables Ausführen einer binären Programmdatei verhindern. Der Entwicklungsansatz, distributionsübergreifende und portable Anwendungen über ein vollständiges statisches Linken der Bibliotheksabhängigkeiten zu erzeugen, ist technisch schwierig zu realisieren, kann auch durch Lizenzkonflikte verhindert werden und wird u. a. aufgrund des Unterlaufens von Distributorinfrastruktur und -updates in der Linux-Community nicht gerne gesehen.
Programmiertechnisch lassen sich portablere Programme auch mit privaten Bibliotheken über einen relativen Bibliothekspfad mit der Linker-Option $ORIGIN erzeugen. Vorteile dieses Ansatzes sind, dass keine Benutzeranpassungen der Bibliothekspfade oder andere Skripte nötig sind (im Gegensatz zu LD_LIBRARY_PATH-Ansätzen) und gleichzeitig die meisten Nachteile des statischen Linkens vermieden werden.
Es existieren einige Ansätze für Installationssysteme, die portablere und distributionsunabhängige Applikationen erlauben, wie Autopackage, RUNZ, PortableLinuxApps (Klik-Nachfolger), Zero Install und CDE. Jedoch folgt jedes dieser Systeme einem anderen Ansatz und deckt damit einen anderen Teilaspekt der Portabilität ab. Außerdem finden diese Lösungen bis jetzt nur begrenzte Verbreitung und Unterstützung in der Linux-Community, u. a. wegen verbreiteter Bedenken gegen Nicht-Paketmanagement-basierte Lösungen.

#### Portable Betriebssysteme

Eine Spezialfall ist Portable Software, die in ein eigenes Betriebssystem eingebettet ist und damit zur portablen Verwendung einen Neustart und Booten des Wirtsrechners erfordert. Besonders bei Linux-Software, bei der die Erzeugung portabler und distributionsübergreifender Programme schwierig ist, existieren viele Lösungen für Anwendungssoftware mit portablen, Linux-basierenden Betriebssystemen. Zahlreiche Linux-Derivate bieten sogenannte Live-CDs, wie z. B. Knoppix, die den Betrieb von einem Wechseldatenträger erlauben, ohne Spuren auf dem Wirtsrechner zu hinterlassen.
Microsoft Windows müsste zwar entsprechend den EULA immer auf einer (festinstallierten) Festplatte installiert werden und dürfte damit offiziell nicht portabel verwendet werden. Allerdings sind Endbenutzer-Lizenzverträge, die nicht bereits vor dem Kauf vereinbart wurden (d. h. denen ein Käufer zum Beispiel erst nach dem Kauf bei der Installation zustimmt), nach deutschem und österreichischem Recht unwirksam.
Mit Microsoft Windows PE existiert allerdings eine abgespeckte Windows-Variante, die unter anderem auch für eine Installation auf Wechselmedien konzipiert ist. Zusätzlich gibt es auch Lösungen von Drittanbietern wie zum Beispiel Bart’s Preinstalled Environment.