# Plattform (Computer)

Eine Computerplattform (auch -schicht oder -ebene, kurz Plattform) bezeichnet in der Informatik eine einheitliche Grundlage, auf der Computerprogramme ausgeführt und entwickelt werden können.
Eine Plattform ist eine Komponente eines Rechnersystems und befindet sich im Verbund mit weiteren Komponenten. Dabei kann es sich um die Hardware oder das Betriebssystem (OS), sogar um einen Webbrowser und die zugehörigen Programmierschnittstellen oder andere zugrunde liegende Software handeln, solange das Computerprogramm damit ausgeführt wird.
Für die betrachtete Plattform selbst sind die weiteren Komponenten des Rechnersystems, in dem sie arbeitet, nicht sichtbar. Eine Plattform kann aufgrund dieser Abstraktion auf unterschiedliche Rechnersysteme übertragen werden und arbeiten (siehe grafische Darstellung). Die interne Komplexität des Computersystems wird hierbei mit Hilfe von Softwaretechnik erhöht, was vereinfachte Nutzung durch menschliche Anwender zur Folge hat.
Bestandteile bzw. Abstraktionsebenen einer typischen Plattform sind: Rechnerarchitektur, Softwarestack, Laufzeitumgebung, Programmiersprache.

## Zielsetzung und Methoden

Die Idee hinter einer Plattform ist Abstraktion und Vereinfachung.
Erreicht werden kann diese Vereinfachung dadurch, dass dem Anwendungsentwickler ein abstrakteres Funktionsmodell von konkreter Funktionalität zur Verfügung gestellt wird, typischerweise in Form einer Programmierschnittstelle (eng. API), welche darunter liegende Funktionalität einhüllt. Für die resultierende Anwendung geschieht das typischerweise in Form einer dynamisch interpretierten Laufzeitumgebung (z. B. JRE, Browser) oder einer binären ABI zu bekannten Softwarefunktionen.
Eine Qualität, die diese Abstraktionsschichten bieten können, ist Allgemeingültigkeit, üblicherweise als Kompatibilität bezeichnet. Das kann sich auf die Breite, also die Menge der verschiedenartigen, abstrahierten Details beziehen, wie auch auf die Stabilität der Plattform über die Zeit. Bei der Kompatibilität über die Zeit kann die Sicherstellung der Abwärtskompatibilität bei einer Weiterentwicklung einer Plattform gemeint sein oder auch die Zusicherung des Herstellers, dass mit dem Aufkommen neuer abstrahierbarer „Details“ (z. B. neue Betriebssysteme, neue Hardware) diese in die Plattform integriert werden (Aufwärtskompatibilität).

## Plattformarten

Bei Plattformen kann zwischen Soft- und Hardwareplattformen unterschieden werden.

### Hardwareplattform

Eine Hardwareplattform, auch Maschinenebene genannt, bezeichnet eine bestimmte Rechner­art oder eine [Prozessor]-Familie. Die Maschinenebene ist hauptsächlich durch eine bestimmte Rechner- oder Prozessorarchitektur gegeben und liegt logisch betrachtet ganz unten – unter der Anwendungsebene.
Eine Prozessorarchitektur-Plattform verwendet eine einheitliche Maschinensprache, Datenwort­größe, Byte-Reihenfolge usw. Ein Beispiel dafür 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.
Hardwareplattformen können grob in CISC- und RISC-Architekturen eingeteilt werden. Bei aktuellen Prozessorarchitekturen verwischen sich aber die Grenzen zwischen diesen beiden Architekturtypen zusehends.

### Softwareplattform

Die sogenannten Software-Plattformen, auch Anwendungsebene genannt, werden wie folgt unterschieden.

#### 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 Kompatibilität erhalten bleibt. Dieser muss dann die neue Version seiner Plattformbibliothek verbreiten, Änderungen am Anwendungsprogramm (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, 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. 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 Open-Source-Bereich und bei unixähnlichen Betriebssystemen dominierend, die Binärkompatibilität dagegen beispielsweise bei Windows oder den Mac-Betriebssystemen.

#### Betriebssystem als Plattform

Beispielsweise ermöglicht es eine Softwareplattform – wie die Win32-API und andere ähnliche in Betriebssysteme integrierte Schnittstellen – Softwareentwicklern, Anwendungen zu schreiben, die auf veränderlicher Hardware, wie Prozessoren unterschiedlicher Hersteller, verschiedenen Grafikkarten, verschiedenen Peripheriegeräten usw. funktionsfähig sind. Typischerweise werden solche Anwendungen jedoch zu binären Programmen, bestehend aus Maschinenbefehlen, kompiliert, sind also nur auf einer spezifischen Hardware funktionsfähig, setzen also auf diese Hardwareplattform auf. Dieses Vorgehen kann als Kompromiss aus Effizienz und Abstraktionsgrad betrachtet werden, da dadurch aufwändige Konvertierung zur Laufzeit eingespart wird.

#### Laufzeitumgebung als Plattform

Bei dynamisch interpretierten Laufzeitumgebungen wird die Anwendung von der Hardware noch weitergehend abstrahiert. Das 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 Webbrowser) auch verschiedene unterliegende Betriebssysteme, also andere Softwareplattformen, wegabstrahiert werden.

## Nichttechnische Aspekte von Plattformen
### Marketing

Für die Werbung werden oft Markennamen in vereinfachender Weise, als technisch betrachtet eigentlich zu differenzierende Plattformen, zusammengefasst. Ein bekanntes Beispiel dafür ist die „Macintosh-Plattform“, deren technische Plattformen sich je nach Generation grundlegend unterscheiden können. Diese vereinfachende Sicht ist teilweise in den Sprachgebrauch und die öffentliche Wahrnehmung übergegangen.
So wirbt z. B. die Firma Apple mit der „Macintosh“- bzw. „Mac“-Plattform, obwohl über die gesamte Zeit des Bestehens praktisch alle Plattformen, die Macintosh ausmachen, (teilweise mehrfach) ausgetauscht wurden. Aus technischer Sicht besteht und bestand Macintosh aus sehr unterschiedlichen und teilweise inkompatiblen Hard- und Softwareplattformen. (Im Laufe seiner Geschichte nutzte bzw. nutzt der „Macintosh“ aus Sicht der Prozessorarchitektur 680x0, PowerPC, IA-32 bzw. x64 und ARM64. Von Apple-Betriebssystemen verwendete Softwareschnittstellen und Standards sind bzw. waren Carbon, Cocoa, POSIX, SUS, GNU-Software-Umgebung, JRE etc.) Um den Nutzern einen reibungslosen Wechsel dieser Architekturen zu gewährleisten verwendete Apple übergangsweise Ansätze wie Fat Binarys oder Universal Binaries und (transparente) Emulatoren. Dadurch wurde die ganze Produktfamilie in der Öffentlichkeit weiter als eine einheitliche Plattform wahrgenommen.
Ähnliches gilt auch für die von der Firma Microsoft beworbene Marke „Windows“. Obwohl die Änderungen nie so umfassend waren wie bei Macintosh, ist auch Windows keine einheitliche Plattform. (Es nutzt die Plattformen x86 – IA-32 und x64 – sowie ARM, in der Vergangenheit auch MIPS, POWER bzw. PowerPC, Alpha sowie Itanium und stellte oder stellt die Plattformen DOS, Win16, Win32, Win64, Native API, Windows CE, .NET, POSIX, OS/2 und andere Anwendungen zur Verfügung.) So sind z. B. die Win32- und die Windows-CE-API nur sehr bedingt kompatibel. Alle auf den DOS- oder Windows-NT-Kernel aufbauenden Windows-Produkte enthalten mehrere Plattformen, wodurch für Anwendungen eine Rückwärts-Kompatibilität von teilweise bis zu 30 Jahre (im Fall von Win16) erreicht wurde.

### Offenheit

Hersteller von Plattformen haben verschiedene Vorgehensweisen bezüglich der Offenheit bzw. Geschlossenheit ihrer Plattformen. Dies betrifft z. B. das Entwicklungsmodell, Kostenmodell oder den Grad der Offenheit bzw. Freiheit die bei der Verwendung auf verschiedenen Ebenen gewährt wird.

### Industrie

In der Industrie bilden Plattformen die Infrastruktur für Geschäftsmodelle der Digitalisierung. Die digitale Plattform dient hier als IT-Architektur für „Datengenerierungen, Datenstrukturierungen und Datenaustauschformate auf Basis technischer Standards“. Es entsteht ein „digitaler Backbone“, der in digitaler Kontinuität alle Akteure und Aktionen verbindet, die an der Wertschöpfung mitwirken.

## Beispiele
### Anwendungsschnittstellen und Betriebssysteme

Als Anwendungsschnittstelle kann im Wesentlichen eine durch das Betriebssystem eingeführte oder inkludierte Programmierschnittstelle (englisch Application Programming Interface, kurz API) bezeichnet werden. Es gibt jedoch auch plattformübergreifende APIs, die auf mehreren Betriebssystemen als Laufzeitumgebung verfügbar sind und oft nachträglich installiert werden müssen.
* AmigaOS (AROS, MorphOS)
* Android Runtime
* Bada
* Blackberry
* Carbon (klassisches Mac OS, macOS)
* Cocoa (macOS, GNUstep, iOS, …)
* GNU-Software-Umgebung, GNU-Projekt (Unix/BSD, Linux, Fink, Cygwin…)
* Linux Standard Base, LSB
* Native API (Windows NT)
* OpenVMS
* OS/2
* OS/400
* Palm OS
* Portable Operating System Interface, POSIX (Unix/BSD einschl. macOS, Linux, Windows NT, …)
* Single UNIX Specification, SUS (Unix, macOS)
* Symbian
* Windows Application Programming Interface: Win16, Win32, Win64 (Windows, Windows CE, WinOS/2, ReactOS, Wine, …)
* z/OS
* z/VM

### Hardware

* AMD Am29000
* ARM
* Atmel AVR
* DEC Alpha (64-Bit)
* IBM 801
* IBM System/360 und System/370 (24-Bit-Adressierung, 1964 und 1970)
* IBM System/390 (31-Bit-Adressierung, 1990)
* IBM System z (64-Bit-Adressierung, abwärtskompatibel zu System/390, /370 und /360, 2000)
* Intel 4004 (4-Bit-Datenbreite mit 4-Bit-Datenbus, 12-Bit-Adressraum mit 4-Bit-Adressbus, 1971)
* Intel 4040 (4-Bit-Datenbreite mit 4-Bit-Datenbus, 13-Bit-Adressraum mit 4-Bit-Adressbus, 1974)
* Intel 8008 (8-Bit-Datenbreite mit 8-Bit-Datenbus, 14-Bit-Adressraum mit 8-Bit-Adressbus, 1972)
* Intel 8080 (8-Bit-Datenbreite mit 8-Bit-Datenbus, 16-Bit-Adressraum mit 16-Bit-Adressbus, 1974)
* Intel x86 (Intel 80x86 und kompatible Prozessoren)
** 8086/8088, 80186/80188, Z80 und V20 (16-Bit-Datenbreite mit 16-Bit-Datenbus, 20-Bit-Adressraum mit 20-Bit-Adressbus, 1979)
** 80286 (16-Bit-Datenbreite mit 16-Bit-Datenbus, 24-Bit-Adressraum mit 24-Bit-Adressbus, 1982)
** 80386 (32-Bit-Datenbreite mit 32-Bit-Datenbus, 32-Bit-Adressraum mit 24-Bit-Adressbus, 1985)
** IA-32 bzw. i386 (retronym auch x86-32) bezeichnet den zum 80386 kompatiblen Befehlssatz zahlreicher Nachfolger, wie dem Am386 oder dem 80486
** x64 bzw. x86-64 oder AMD64 bezeichnet den zum Opteron kompatiblen Befehlssatz (64-Bit-Datenbreite, 64-Bit-Adressraum; implementiert durch AMD64 bei Prozessoren von AMD und Intel 64 bei Prozessoren von Intel)
** zahlreiche Befehlssatzerweiterungen für IA-32 und x64, wie AVX, FMA, MMX, PAE, SSE, uvm.
* Intel i960
* Intel Itanium bzw. IA-64 (64-Bit-Datenbreite, 64-Bit-Adressraum, nicht kompatibel zu IA-32 und 16-Bit x86)
* MIPS
* Motorola 680x0 (ab 2004 Freescale, ab 2015 NXP)
** 6800 und 6809 (Motorola, 8-Bit-Datenbus, 8-Bit-Adressbus, 1974)
** 68000 und 68010 (Motorola, 16-Bit-Datenbus, 24-Bit-Adressbus, 1979)
** 68008 (Motorola, 8-Bit-Datenbus, 20-Bit-Adressbus)
** 68012 (Motorola, 16-Bit-Datenbus, 31-Bit-Adressbus)
** 68020 und 68330 (Motorola, 32-Bit-Datenbus, 32-Bit-Adressbus, 1984)
** 68030, 68040 und 68060 (Motorola, 32-Bit-Datenbus, 32-Bit-Adressbus, ab 1987)
** ColdFire (Freescale, 68060-Design, ab 2004)
** Dragonball (Freescale, vormals MC68328 von Motorola, ab 1995)
* Motorola 88000
* OpenRISC
* PDP-1, PDP-4, PDP-7, PDP-9 und PDP-15 (18-Bit)
* PDP-5, PDP-8, PDP-12, PDP-14 und PDP-16 (12-Bit)
* PDP-6 und PDP-10 (36-Bit)
* PDP-11 (16-Bit)
* PA-RISC
* Power
** IBM Power (ursprünglich in der Schreibweise POWER)
** IBM und Motorola (ab 2004 Freescale, ab 2015 NXP) PowerPC
* SPARC
* SuperH
* VAX (32-Bit)

### Laufzeitumgebungen

* Adobe AIR
* Common Language Runtime
* Java-Laufzeitumgebung
* Mono
* Mozilla Prism
* PHP
* uniPaaS

### PC-Plattformen

Plattformen für Personal Computer sind eng mit jenen für Anwendungsschnittstellen und Betriebssysteme verknüpft, gehen aber u. U. über Betriebssystemgrenzen hinweg. PCs (im Allgemeinen Sinn von „persönlicher Computer“) und Heimcomputer sind nicht nur Plattformen für Arbeitscomputer, meist sind sie gleichzeitig auch Spieleplattformen.
* Amiga
* IBM-PC-kompatibler Computer (Abschnitt PC als Plattform; auch Windows-PC bzw. bis in die 1990er DOS-PC)
* Macintosh, seit 1999 hauptsächlich „Mac“

### Server-Plattformen

* LAMP (Linux, Apache, MySQL und PHP)
* MAMP (Mac OS X/​OS X/​macOS, Apache, MySQL und PHP)
* WAMP (Windows, Apache, MySQL und PHP)