Plattformunabhängigkeit

Die Plattformunabhängigkeit – genauer als plattformübergreifend (engl. cross-platform[1]) und allgemeiner -portabel[2] – bezeichnet in der Informationstechnik jene Eigenschaft, die ein Computerprogramm auf verschiedenen Computerplattformen ausführbar macht.

Einschränkungen

Ein Computerprogramm benötigt in der Regel immer eine sogenannte Laufzeitumgebung, in der es ausgeführt (oder gestartet) werden und über den gesamten Ausführungszeitraum hinweg stabil lauffähig sein kann. Mit der Eigenschaft plattformunabhängig oder, etwas genauer, plattformübergreifend werden Programme näher beschrieben, die auf verschiedenen Plattformen – also Rechnersystemen mit Unterschieden in Architektur, Prozessor, Übersetzer, Betriebssystem (in diesem Fall auch betriebssystemübergreifend genannt) und weiteren Dienstprogrammen, die zur Übersetzung oder Ausführung notwendig sind – lauffähig sind. Der Grad der Plattformunabhängigkeit wird auch als Portierbarkeit (zudem weiter übersetzt: [die] Übertragbarkeit) oder Portabilität bezeichnet (aus englischen portability). Darunter wird nicht nur die bestehende Plattformunabhängigkeit, sondern auch der eingeschätzte Arbeitsaufwand verstanden, der benötigt würde, um ein Programm in ein plattformübergreifendes umzuwandeln. Dieser Vorgang wird auch Portierung oder Migration genannt.

Formen

Es gibt verschiedene Formen von Plattformunabhängigkeit:

Webanwendungen, welche vom Browser ausgeführt werden.
Hierbei ist das Betriebssystem egal, es muss nur über einen bestimmte Voraussetzungen erfüllenden Webbrowser verfügen.
Hybrid-Apps
Anwendungen, die unabhängig von der Plattform auf unterschiedlichen Betriebssystemen und unterschiedlichen mobilen Endgerät ausgeführt werden können.
Multi-Channel-Apps
Anwendungen, die unabhängig von Endgerät und Betriebssystem ausgeführt werden können. Diese Geräte können sowohl mobil als auch, im Unterschied zu den Hybrid-Apps, stationär sein.
In Zwischencode vorliegende Software
Programme, die entweder in Form von Bytecode, wie hauptsächlich Java-Programme, oder eines portablen, interpretierbaren Quellcodes (Python, Perl, PHP und andere) vorliegen.
Fat Binaries und Universal Binaries
Programmpakete, die mehrere lauffähige Versionen enthalten. Das Betriebssystem startet ohne Zutun des Anwenders die passende Version. Beispiele für „fat binaries“ sind das OpenStep-Programmformat und die „fat binaries“ unter Mac OS, die sowohl auf Motorola-680x0-basierten Macintosh-Rechnern als auch auf PowerPC-Macs ausführbar sind. Universal Binaries unter macOS laufen sowohl auf PowerPC als auch auf x86-32-Bit oder x86-64-Bit. Voraussetzung dafür, dass eine „fat binary“ überhaupt erstellt werden kann, ist die Portabilität des Quellcodes, insbesondere bezüglich der Byte-Reihenfolge (endianness) und der Länge einer Zeigervariable.
Quellcode-Portabilität
Diese Form der Plattformunabhängigkeit ist häufig bei C-Programmen für Unix anzutreffen: Der Quellcode enthält Anweisungen, die es erlauben, die Betriebssystemunterschiede auszugleichen. Es existieren reichlich Hilfsmittel zu diesem Zweck, wie zum Beispiel GNU Autoconf. Eine weitere Möglichkeit ist die Verwendung systemunabhängiger Bibliotheken, wie Qt und GTK+. Viele im Quellcode portable Programme stehen bereits in vorgefertigten Versionen plattformübergreifend bereit.
Eingeschränkte Plattformunabhängigkeit
ist gegeben, wenn zum Beispiel das Programm nur auf einem bestimmten Prozessortyp lauffähig ist, aber auf ansonsten verschiedenen Hardware-Architekturen. Dies ist häufig bei in Assemblersprachen geschriebenen Programmen der Fall, wie man sie in den frühen Zeiten der Microcomputer unter CP/M oft antraf; heute wird Assemblersprache meist nur noch für besonders zeitkritische Programmstellen verwendet, und zwecks Plattformunabhängigkeit ist meist noch eine hochsprachliche Version der gleichen Programmfunktionen beigegeben. Auch Programme, die unabhängig vom CPU-Typ nur auf einer bestimmten Betriebssystem-Familie funktionieren sind eingeschränkt plattformunabhängig.

Im Server-Bereich, wo schon sehr früh mit virtuellen Maschinen und virtuellen CPUs gearbeitet wurde, sieht es beim Thema Plattformunabhängigkeit etwas anders aus, als man es von klassischen Unix-/Linux-Portierungen her kennt – letztere fassen zwar zunehmend im Desktop-Bereich Fuß, verursachen durch die starke Ausrichtung auf x86-PCs in Sachen Plattformunabhängigkeit allerdings oftmals eher mehr Kopfzerbrechen als klassische Unix-Anwendungen.

Heute wird eine relative Plattformunabhängigkeit am häufigsten durch die Verwendung von Laufzeitumgebungen von Sprachen wie Java oder .NET erzielt. Allerdings wird diese scheinbare Unabhängigkeit wiederum durch eine Abhängigkeit von der Laufzeitumgebung erkauft, die nunmehr im Kern die Plattform ist.

Allerdings trifft der Begriff „Portabilität“ in beiden Fällen nicht den Kern der Sache, da es sich von Beginn an um plattformunabhängige Konzepte handelte – also auch alle APIs auf jedem Zielsystem im Voraus so nachgebildet werden müssen, dass die Software zwangsläufig lauffähig ist. Ansonsten wäre beispielsweise eine Java VM nicht zertifizierungsfähig. Die Laufzeitumgebungen selbst sind müssen auch nicht auf jeder Plattform verfügbar sein. Falls Portierungen aus lizenz- oder patentrechtlichen Gründen nicht möglich sind, kann ebenso nur von einer Form von eingeschränkter Plattformunabhängigkeit gesprochen werden.

Portabilitätsmetriken

Die Portabilität kann zum Beispiel geschätzt werden über: P = 1−(Ü+A)/E[3]

Ü Übertragungsaufwand (insbesondere Neukompilierung)
A Anpassungsaufwand (Änderung des Quellcodes z. B. bei Austausch von Betriebssystemschnittstellen)
E Entwicklungsaufwand für Neuentwicklung

Dabei entspricht eine Portabilität von 1 der Kompatibilität, das Programm ist also ohne Änderung auf dem Zielsystem lauffähig; liegt Quellcode-Portabilität vor, ist in der Regel ein Ergebnis von > 90 % zu erwarten; wohingegen eine Portabilität nahe 0 eine Neuentwicklung des Programmes nahelegt. Portabilität ist kein Maß für die Lauffähigkeit eines Programmes auf der Zielplattform, d. h. selbst eine Portabilität von 99 % bedeutet nicht unbedingt, dass das Programm nutzbar ist, es bedeutet lediglich, dass eine Portierung im Vergleich zu einer Neuentwicklung deutlich weniger Aufwand erfordert.

Weblinks

Wiktionary: plattformunabhängig – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen

Einzelnachweise

  1. Cross-Plattform – seltener auch Crossplattform geschrieben (und ist zudem vereinzelt wohl nur in Wortverbindungen wie „Crossplattform-Anwendung“, „Crossplattform-Applikationssprache“ und „Crossplattform-Entwicklung“ anzufinden) – aus dem englischen cross-platform oder auch cross platform entlehnt; wörtlich „Kreuz-Plattform“ oder wohl auch „kreuzende Plattform“, siehe auch:
    • Cross. In: Duden, u. a. mit „Kreuz(ung)“; abgerufen am 20. September 2018
    • Cross. In:i Wissen.de, u. a. mit „kreuzen“; abgerufen am 20. September 2018
  2. portabel. In: Digitales Wörterbuch der deutschen Sprache. Abgerufen am 20. September 2018 – zugehöriges Hauptwort Portabilität; allein auf Software bezogen wird diese Eigenschaft (ebenda wie ein Unterbegriff) als portable Software bezeichnet
  3. Günter Rothhardt: Praxis der Softwareentwicklung. 2. unveränd. Auflage. VEB Verlag Technik Berlin, 1988, Kapitel 2, S. 139