Plattformunabhängigkeit

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von Plattformunabhängig)
Wechseln zu: Navigation, Suche

Die Plattformunabhängigkeit, genauer als plattformübergreifend wird – in der Informationstechnik – die Eigenschaft genannt, wenn ein Programm auf verschiedenen Plattformen ausgeführt werden kann.

Einschränkungen[Bearbeiten]

Ein Programm benötigt in der Regel immer eine sogenannte Laufzeitumgebung, in welcher es zur Ausführung gebracht (gestartet) werden und stabil – über den gesamten Ausführungszeitraum hinweg – lauffähig sein kann. Mit der Eigenschaft plattformunabhängig oder – etwas genauer – plattformübergreifend werden Programme näher beschrieben, welche auf verschiedenen Plattformen – also Rechnersystemen mit Unterschieden in Architektur, Prozessor, Übersetzer, Betriebssystem und weiteren Dienstprogrammen, die zur Übersetzung oder Ausführung notwendig sind – lauffähig sind. Der Grad der Plattformunabhängigkeit wird auch als Portabilität bezeichnet (vom 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 umzuformen. Dieser Vorgang wird auch Portierung oder Migration genannt.

Formen[Bearbeiten]

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 Platform auf jedem Betriebssystem und jedem mobilen Endgerät ausgeführt werden können.
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 Apple-Rechnern als auch auf PowerPC-Macs ausführbar sind. Universal Binaries unter Mac OS X 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 ("endianess") 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 Prozessor-Typ 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, welche 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 Vorhinein 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 auch nicht auf jeder Plattform verfügbar, was zum Beispiel im Fall von .NET zu Entwicklungen wie der des Mono-Projektes geführt hat. Portierungen sind aus lizenz- oder patentrechtlichen Gründen meist gar nicht möglich, daher kann man ebenso nur von einer Form von eingeschränkter Plattformunabhängigkeit sprechen.

Portabilitätsmetriken[Bearbeiten]

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

Ü Ü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 i. d. R. ein Ergebnis von > 90 % zu erwarten; wohingegen eine Portabilität von ≤ 0 eine komplette 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.

Siehe auch[Bearbeiten]

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. Dr.-Ing. Günter Rothhardt, "Praxis der Softwareentwicklung", 2. unveränd. Aufl. 1988, VEB Verlag Technik Berlin, Kapitel 2, Seite 139