# Ausführbare Datei

Als ausführbare Datei bezeichnet man eine Datei, die als Computerprogramm ausgeführt werden kann. Hierbei kann es sich handeln um:
* eine Binärdatei in Maschinensprache
* eine Bytecode-Datei (Programmdatei), die direkt oder durch ein Laufzeitsystem ausgeführt werden kann
* ein Shellskript (Skriptdatei)
* eine Stapelverarbeitungsdatei, die von der Betriebssystem-Shell interpretiert wird.
Auf einigen Systemen lassen sich zusätzliche Dateiformate als ausführbar festlegen.

## Interaktion mit Betriebssystemen

Manche Betriebssysteme erkennen ausführbare Dateien an der Dateinamenserweiterung (beispielsweise .exe) oder an den Metadaten, die zusätzlich zum Dateinamen im Dateisystem gespeichert werden, wie unter Unix und Unix-ähnlichen Systemen die Unix-Dateirechte. Die meisten Betriebssysteme überprüfen jedoch die Magische Zahl (englisch Magic Number) des Dateiformats, um nicht zufällige Bitfolgen zur Ausführung gelangen zu lassen.
Moderne Betriebssysteme halten die Kontrolle über die Systemressourcen, wodurch einzelne Programme Systemaufrufe tätigen müssen, um darauf zugreifen zu können. Da jede Betriebssystemfamilie ihre eigenen Architekturen für Systemaufrufe hat, sind ausführbare Dateien im Allgemeinen an ein bestimmtes Betriebssystem gebunden; Programme anderer Plattformen sind normalerweise nicht direkt ausführbar.
Es gibt jedoch einige Werkzeuge, die die Systemaufrufe abfangen, konvertieren und so ausführbare Dateien auf fremden Betriebssystemen funktionieren lassen. Beispiele sind hier Cygwin und Wine.

### DOS

Unter DOS werden Dateitypen durch ihre Dateiendung gekennzeichnet. Ausführbar sind:
* com
* exe
* bat
Die Unterstützung von COM-Dateien wurde aus Kompatibilitätsgründen zu CP/M von CP/M geerbt und sind damit auf eine maximale Speichergröße von 64 KiB für Code und Daten im Arbeitsspeicher begrenzt. In der Programmierung spricht man hier auch vom Tiny Speichermodell. Für Anwendungen, die mehr Arbeitsspeicher benötigen, wurden weitere Speichermodelle und das EXE-Dateiformat eingeführt.

### Windows

Unter Windows werden Dateitypen durch ihre Dateiendung gekennzeichnet. Ausführbar sind unter anderem:
* com
* exe
* bat
* cmd
* msc
* hta (siehe auch: HTML-Applikation)
* pif (eigentlich für Verknüpfungen gedacht, wird aber auch von Computerviren ausgenutzt)
* scf (wird von speziellen Funktionen verwendet, beispielsweise „Desktop anzeigen“ in der Schnellstartleiste)
* scr (Bildschirmschoner, gleiches internes Format wie exe)
Eine durch Semikola getrennte Liste ausführbarer Dateitypen wird in der Umgebungsvariable PATHEXT definiert. Alle in dieser Liste aufgeführten Dateiendungen brauchen in der Kommandozeile nicht eingetippt zu werden. Voraussetzung dafür ist jedoch entweder ein ausführbares Binärformat (*.exe, *.com, *.scr) oder eine Zuordnung zum entsprechenden Interpreter (beispielsweise zucmd.exe für *.bat und *.cmd oder zu wscript.exe für *.vbs).

### Unix und seine Derivate

Unter Unix muss das „X-Bit“ in den Dateirechten gesetzt sein, um eine Datei als ausführbar zu kennzeichnen – eventuelle Dateiendungen haben keinerlei Einfluss darauf, ob Dateien ausführbar sind oder nicht. Bei der Installation von Unix und Unix-Derivaten wie beispielsweise Linux-Distributionen werden die Dateirechte bereits so gesetzt, dass die mitgelieferten Programme (System- wie auch Anwendungsprogramme) ausführbar sind. Ein Benutzer kann für Dateien, auf die er ausreichend Zugriffsrechte besitzt oder deren Besitzer er ist, mit chmod die Dateirechte anpassen, um beispielsweise ein selbst geschriebenes Shellskript direkt ausführbar zu machen.
Während binäre Programme anhand ihres Headers erkannt werden, typischerweise ELF bzw. in der Unix-Frühzeit auch a.out, müssen Skripte und für Interpretersprachen geschriebene Programme, essentiell Textdateien, mit einem Shebang beginnen, um vom Kernel als Programm erkannt und automatisch mit dem korrekten Interpreter ausgeführt zu werden.
Unter Linux können mit der Kernel-Funktion binfmt_misc auch binäre Dateiformate an einen externen Interpreter gebunden werden. Dadurch werden sie, wie Shellskripte, bei der Ausführung an den konfigurierten Interpreter übergeben, wodurch sie im System wie direkt ausführbare Dateien wirken. Dadurch lassen sich beispielsweise Java-Bytecode mittels Java Virtual Machine oder auch EXE-Dateien für MS-DOS und Windows mittels Wine direkt starten.

### macOS

Unter Apples macOS (vormals als Mac OS X bezeichnet) sind Anwenderprogramme („Applikationen“) als Application Bundles ausgeführt, die meist die Dateinamenerweiterung „.app“ tragen. Diese Bundles können Unterverzeichnisse oder komprimierte Dateien sein, in denen alle für das Programm notwendigen Dateien liegen, also Ressourcen, Bibliotheken und schließlich auch das ausführbare Programm selbst, das wie unter anderen Unix-Derivaten statt einer Dateinamenerweiterung das X-Bit („ausführbar“) gesetzt hat.

### z/OS

Unter z/OS muss das ausführbare Programm in einer Programmbibliothek (organisiert als Partitioned Dataset oder PDSE mit Recordformat U) vorliegen. Ein member in dieser Bibliothek wird „Lademodul“ genannt und ist nur dann ausführbar, wenn auch die vom Binder (bzw. Linkage Editor) erzeugten Attribute im Directory vorhanden sind.
Ein ausführbares Programm wird in der STEPLIB oder der JOBLIB gesucht, und wenn es dort nicht gefunden wird, wird die Linklist durchsucht. Es kann ein Hauptprogramm (geladen über die Jobsteuerung) oder ein dynamisch gebundenes Unterprogramm (geladen durch einen Load-Befehl im Programmcode) sein.