# Laufzeitumgebung

Eine Laufzeitumgebung (englisch runtime environment; Abkürzung: RTE oder seltener auch RE), auch Ausführungsumgebung oder seltener Ablaufumgebung, beschreibt die zur Laufzeit von Computerprogrammen verfügbaren und festgelegten Voraussetzungen eines bestimmten Laufzeitsystems (englisch runtime system). Dieses ist durch die elementaren Bestandteile der Programmiersprache wie das Verhalten von Sprachkonstrukten und weitere Funktionen wie Typprüfung, Debugging, Codegenerierung und -optimierung definiert. Zur Laufzeitumgebung gehören weiterhin Laufzeitbibliothek, Standardbibliotheken, Programmierschnittstellen, Laufzeitvariablen sowie Zugriff auf Hard- und Softwarekomponenten über Betriebssystemfunktionen.

## Weitere Einzelheiten

Eine Laufzeitumgebung lädt von Anwendungsprogrammierern entwickelte Programme und lässt diese auf einer Plattform ablaufen, für welche die Laufzeitumgebung gemacht worden ist. Damit stellt sie selbst eine kleine „Plattform“ dar, auf der Programme aufsetzen können.
In manchen Fällen ist eine plattformunabhängige und dadurch portable virtuelle Maschine Bestandteil einer Laufzeitumgebung. Ein bekanntes Beispiel hierfür ist die Programmiersprache Java. Die Laufzeitumgebung eines Java-Programms wird Java Runtime Environment genannt und vereinigt die Java-Klassenbibliotheken, die z. B. für Ein- und Ausgabe verwendet werden, und die Java Virtual Machine, die für die Ausführung des Java-Bytecodes verantwortlich ist.
Ein anderes Beispiel ist Microsofts .Net-Framework. Die .NET Common Language Runtime (CLR) ist (bei neueren Windows-Betriebssystemen) die Laufzeitumgebung für Programme, die in C#, Visual Basic .NET, J#, JScript .NET und C++/CLI geschrieben wurden.
Im IBM-Großrechner-Betriebssystem z/OS ist das sogenannte „Language Environment“ die gemeinsame Laufzeitumgebung für Programme, welche u. a. in COBOL, PL/I, C und Fortran programmiert sein können.

### Basis-Funktionen

Beispiele für die Basis- oder Grund-Funktionen einer Laufzeitumgebung sind:
* Lesen und Schreiben von Dateien
* Daten über Netzwerke transportieren
* Ein- und Ausgabegeräte steuern
* Daten verwalten
* Sortieren und Suchen

### Plattformunabhängigkeit

Beispiele, in denen Laufzeitumgebungen Programmen Plattformunabhängigkeit ermöglichen, sind:
* Java-Applets, die von verschiedenen Webbrowsern auf verschiedenen Betriebssystemen in verschiedenen Implementierungen der Java-Laufzeitumgebungen ausgeführt werden
* Windows-Programme, die mit Wine auf Unix-Umgebungen (Linux und verschiedene BSD-Varianten, Solaris sowie macOS) unter den x86-Architekturen IA-32 (32-Bit-x86) und x64 (64-Bit-x86) laufen
* .NET-Programme, die in der .NET-Reimplementierung Mono unter Linux laufen
* XUL-Programme, die mit der XULRunner-Laufzeitumgebung ausgeführt werden
* Linux-Programme, die auf UNIX-Betriebssystemen wie BSD, Solaris und SCO-Unix in einer speziell angepassten Linux-Umgebung laufen
* IBCS-Programme, die mittels der IBCS-Unterstützung (bestehend aus Kernel-Umgebung, angepassten Systemaufrufen und Laufzeitbibliotheken) unter Linux laufen
* 32-Bit-Linux-Programme, die zusammen mit den zugehörigen 32-Bit-Bibliotheken in der 32-Bit-Umgebung von 64-Bit-Linux-Kerneln laufen. Die 32-Bit-Laufzeitumgebung besteht dabei aus der Unterstützung der 64-Bit-Prozessoren von Intel für 32-Bit-Code, Kernel-Unterstützung für diesen 32-Bit-Modus, 32-Bit-Betriebssystemaufrufen und einem 32-Bit-dynamischen Linker.
* DOS-Programme, die unter OS/2, UNIX und Linux im DOSEMU laufen
* 16-Bit-Windows-Programme, die unter 32-Bit-Windows, und 32-Bit-Windows-Programme, die unter 64-Bit-Windows laufen