Plattform (Computer)
Eine Plattform, gelegentlich auch Schicht oder Ebene genannt, bezeichnet in der Informatik eine einheitliche Basis, auf der Anwendungsprogramme ausgeführt und entwickelt werden können. Eine Plattform befindet sich zwischen zwei Komponenten eines Rechnersystems. Für die Komponente, welche die Plattform nutzt, ist die Komponente darunter nicht sichtbar. Daher kann ein und dieselbe Komponente über eine Plattform auf verschiedenen „Untergründen“ betrieben werden. Es gibt eine Vielzahl von Plattformen und Plattformkonzepten im Informatikbereich.
Inhaltsverzeichnis |
[Bearbeiten] Zielsetzung und Methoden
Die Idee hinter einer Plattform ist die Wegabstraktion von komplizierten Details für eine Anwendungssoftware bzw. deren Entwickler.
Einserseits können diese Details unbekannte Eigenschaften der Ausführungsumgebung sein, in der eine Anwendungssoftware zukünftig verwendet wird, die zum Entwicklungszeitpunkt der Anwendung nicht bekannt sind oder sein können. Diese Eigenschaften des Ausführungsumgebung können beispielsweise der genaue Typ und Leistungsfähigkeit der Hardwarekomponenten sein oder mit welchem unterliegendem Betriebssystem die Anwendung irgendwann einmal vom Anwender betrieben wird.
Andererseits kann die Motivation für eine Abstraktion auch bekannte Komplexität sein (z. B. unstandardisierte Hardware, konkurrierende Hersteller-APIs, etc.) die reduziert werden sollen, um Entwicklern eine schnellere, günstigere oder einfachere Entwicklung von Anwendungen zu ermöglichen.
Erreicht werden kann diese Vereinfachung dadurch, dass dem Anwendungsentwickler ein abstrakteres Funktionsmodell von konkreter Funktionalität zur Verfügung gestellt wird, typischwerweise in Form einer Programmierschnittstelle (eng. API), welche darunterliegende Funktionalität einhüllt. Für die resultierende Anwendung geschieht dies typischerweise in Form einer dynamisch interpretierten Laufzeitumgebung (z. B. JRE, Browser, etc.) oder einer binären ABI zu bekannten Softwarefunktionen (z. B. Win32, DirectX, etc.).
Eine Qualität, die diese Abstraktionsschichten bieten können, ist Allgemeingültigkeit, üblicherweise als Kompatibilität bezeichnet. Dies kann sich einerseits auf die Breite, also die Menge der verschiedenartigen, wegabstrahierten Details, als auch auf die Stabilität der Plattform über die Zeit beziehen. Bei der Kompatiblität über die Zeit kann einerseits die Sicherstellung der Abwärtskompatiblität bei einer Weiterentwicklung einer Plattform gemeint sein oder auch die Zusicherung des Herstellers, dass mit dem Aufkommen neuer wegabstrahierbarer „Details“ (z. B. neue Betriebssysteme, neue Hardware) diese in die Plattform integriert werden (Aufwärtskompatiblität).
[Bearbeiten] Plattform-Arten
Mögliche Bestandteile einer Plattform sind eine Rechnerarchitektur, Programmiersprache, Bibliotheken und Laufzeitumgebungen.
[Bearbeiten] Hardware-Plattform
Bei Plattformen kann auch zwischen Soft- und Hardware-Plattformen unterschieden werden. Dabei verwendet z. B. eine Prozessorarchitektur-Plattform eine einheitliche Maschinensprache, Datenwortgröße, Byte-Reihenfolge usw., ein Beispiel ist die weitverbreitete x86-Architektur. Wie die einzelnen Befehle dieser Maschinensprache intern im Mikroprozessor verarbeitet werden (z. B. mit Micro-ops), kann sich aber innerhalb der gleichen Plattform stark unterscheiden. Nur die Endergebnisse, welche die Befehle liefern, bleiben dieselben.
[Bearbeiten] Software-Plattform
- Binärschnittstellen-basierte Plattform
Kompatibilität über die Zeit lässt sich beispielsweise über stabilgehaltene Binärschnittstellen von Funktionsbibliotheken erreichen, mit denen auf die Plattform zugegriffen wird. Bei einer Weiterentwicklung der Plattform muss ausschließlich der Plattformanbieter dafür Sorge tragen, dass die Kompatiblität erhalten bleibt. Dieser muss dann die neue Version seiner Plattformbibliothek verbreiten, Änderungen am Anwendungsprogamm (Neukompilierung oder Anpassung) durch Anwendungsentwickler oder Konfigurationsänderungen durch Anwender sind nicht notwendig.
- Quellcode-basierende Plattform
Neben dem obigen Konzept einer auf Binärkompatibilität basierenden Plattform, welches eine weitergehende Lauffähigkeit von einmal erstellter Software ermöglicht, existiert noch das Konzept der Kompatibilität über die Portierbarkeit des Quellcodes eines Anwendungsprogramms. Hier wird keine langfristige oder breite Lauffähigkeit der Anwendungsprogramm-Kompilate garantiert[1], sondern eine Kompilierbarkeit mit einer weiten Palette an unterliegender Hardware, Programmbibliotheken und Software-APIs, auch Plattformunabhängigkeit genannt. Nachteile sind, dass der Vorgang des Kompilierens dann häufiger und vor allem durch den Anwender oder Anwendungsentwickler durchgeführt werden muss, ein manchmal komplexer und fehlerträchtiger Vorgang. Auch die Erstellung portabler Software für eine solche Plattform ist ein Problem.[2] Ebenso kann die Notwendigkeit, dass der Quellcode beim Anwender vorliegen muss, ein Hindernis sein, da beispielsweise bei proprietärer Software eine Offenlegung von diesem unüblich ist. Deshalb ist dieses Konzept der Quellcode-basierenden Kompatibilität vor allem im Opensource-Bereich und bei unixoiden Betriebssystemen dominierend, die Binärkompatibilität dagegen beispielsweise bei den Windows-[3][4] oder Mac-Betriebssystemen.[5]
- Betriebssystem als Plattform
Beispielsweise ermöglicht eine Software-Plattform wie die Win32-API und -Betriebssysteme Softwareentwicklern, Anwendungen zu schreiben, die auf variierender Hardware wie Prozessoren unterschiedlicher Hersteller, verschiedenen Grafikkarten, verschiedenen Peripheriegeräte funktionsfähig sind. Typischerweise werden solche Anwendungen jedoch zu binären Programmen, bestehend aus Maschinensprachbefehlen, kompiliert, sind also nur auf einer spezifischen CPU-Hardware funktionsfähig und setzen also auf eine Hardware-Plattform auf. Dieses Vorgehen kann als Kompromiss aus Effizienz und Abstraktionsgrad betrachtet werden, da dadurch aufwändige Konvertierung zur Laufzeit eingespart werden.
- Laufzeitumgebung als Plattform
Bei dynamisch interpretierten Laufzeitumgebungen wird die Anwendung von der Hardware noch weitergehend abstrahiert. Dies bedeutet, dass Befehle und Daten einer Laufzeitumgebung oder einem Dienst übergeben werden und dort erst zur Laufzeit interpretiert oder in die entsprechende Maschinensprache übersetzt werden. Weitergehend können mit einer Laufzeitumgebung (z. B. JRE oder Browser) auch verschiedene unterliegende Betriebssysteme, also andere Software-Plattformen, wegabstrahiert werden.
[Bearbeiten] Beispiele
[Bearbeiten] Anwendungsschnittstellen und Betriebssysteme
Die Anwendungsschnittstellen werden in der Regel mit den Betriebssystemen mitgeliefert, falls dies (noch) nicht der Fall ist, werden diese durch passende Laufzeitumgebungen (nachträglich) zur Verfügung gestellt.
- AmigaOS
- GNU-Software-Umgebung (Linux, BSD, Fink, Cygwin...)
- POSIX (UNIX, Linux, OSX...)
- SUS (UNIX93 ... UNIX03)
- LSB (Linux Standard Base)
- Carbon (Mac OS)
- Cacao (Mac OS X, GNUstep...)
- Win64, Win32, Win16 (Windows, Wine, ReactOS...)
- OS/400
- z/OS
- OS/2
- z/VM
- Symbian
- BlackBerry
- iOS
- Palm OS
- Windows CE (Windows Mobile, Windows Phone, Windows Embedded)
- Android Runtime
- Bada
- OpenVMS
[Bearbeiten] Laufzeitumgebungen
[Bearbeiten] Server-Plattformen
- LAMP (Linux, Apache, MySQL und PHP)
- WAMP (Windows, Apache, MySQL und PHP)
- MAMP (Mac OS X, Apache, MySQL und PHP)
[Bearbeiten] Hardware
- x86 (Intel IA-32 oder AMD x86)
- x86-64 (Intel 64 und AMD64)
- IA-64 (Intel Itanium)
- ARM
- SPARC
- MIPS
- DEC Alpha
- POWER (IBM POWER und IBM PowerPC)
- 680x0 (heute Freescale, einst Motorola)
[Bearbeiten] Weblinks
- Joel Spolsky: Platforms Essay auf joelonsoftware.com, 30. August 2002 (englisch)
- HTML5: Der Browser als Plattform – Kurzartikel zur DotNet Developer Conference 2012, vom 7. Juni 2011
[Bearbeiten] Einzelnachweise
- ↑ Michael Simms (18. August 2009): Handling misbehaving libraries in binary products (englisch). Linux Game Publishing. Abgerufen am 15. Januar 2012. „It is a bit of an arcane artform, making a game that runs on all Linux versions. [...] [libraries] will load their own dependencies in a way we cannot control.The biggest problem is that OpenAL and SDL try to dlopen libasound, and on some machines, libasound doesn’t work with our binaries. On others, it can actually crash the whole game due to incompatibilities. This is a common issue when dealing with unknown system configurations when sending out a binary-only product into the world.“
- ↑ Troy Hepfner (1. Oktober 2007): Linux Game Development Part 2 - Distributable Binaries (englisch). gamedev.net. Archiviert vom Original am 13. Oktober 2007. Abgerufen am 19. Dezember 2011. „Creating an executable that works on almost all Linux distributions is a challenge. There are a number of factors that contribute to the problem [...]“
- ↑ Ian Murdock (17. Januar 2007): On the importance of backward compatibility (englisch). Abgerufen am 4. Januar 2012.
- ↑ Raymond Chen (15. Oktober 2003): What about BOZOSLIVEHERE and TABTHETEXTOUTFORWIMPS? (englisch). The Old New Thing. Archiviert vom Original am 3. Juli 2004. Abgerufen am 4. Januar 2012.
- ↑ Simon Peter (2010): AppImageKit Documentation 1.0 (pdf) S. 2-3. PortableLinuxApps.org. Abgerufen am 29. Juli 2011. „A critical distinction between the approach known from Windows and the Mac and the one known from UNIX and Linux is the "platform": While Windows and the Mac are seen as platforms to run software on, most Linux distributions see themselves as the system that includes the applications.“