# Multilib

Multilib, kurz für multiple libraries, oder Multilib-Umgebung bezeichnet eine spezielle Konfiguration eines Betriebssystems, mit deren Hilfe Programme für meist zwei eng verwandte Rechnerarchitekturen auf einem Computer ausgeführt werden können, ohne den Einsatz spezieller Software wie etwa einer virtuellen Maschine. Eine Grundvoraussetzung dafür ist, dass die Hardware zu beiden Befehlssatzarchitekturen kompatibel ist. Das bekannteste Beispiel für diese Kompatibilität ist die x64-Mikroarchitektur (AMD64, x86-64), die abwärtskompatibel zur 32-Bit-x86-Architektur IA-32 ist. Diese wiederum ist abwärtskompatibel zur 16-Bit-x86-Architektur (x86).
Der Begriff wird häufig in Verbindung mit Linux und Open Source verwendet.
Eine Multilib-Umgebung ist in der Regel ressourcenschonender als eine virtuelle Maschine realisierbar. Dafür bietet die virtuelle Maschine, da sie vollständig in Software implementiert werden kann, die Möglichkeit, auf einem Computer Rechnerarchitekturen darzustellen, die zur vorhandenen Hardware inkompatibel sind.

## Verwendung
### Linux

Auf Linux-Distributionen, die für den Einsatz auf einer x64-Architektur bestimmt sind, ist Multilib ein möglicher Weg für Binärkompatibilität. Um sowohl 64-Bit- als auch 32-Bit-Programme, die für eine IA-32-Architektur vorgesehen sind, verwenden zu können, werden neben den 64-Bit-Programmbibliotheken für die 64-Bit-Programme auch 32-Bit-Bibliotheken für die 32-Bit-Programme benötigt. Bei der Einrichtung der Multilib-Umgebung und bei der Installation der 32-Bit-Programme muss dafür gesorgt werden, dass bei deren Installation keine 64-Bit-Komponenten überschrieben werden, was jedoch im Filesystem Hierarchy Standard (kurz: FHS) geregelt ist. Danach landen 32-Bit-Bibliotheken in /lib32 und /usr/lib32, 64-Bit-Bibliotheken in /lib64 und /usr/lib64. Dies ist jedoch optional, sodass die nativen Bibliotheken eventuell in /lib und /usr/lib gespeichert werden.
Da allerdings einige bereits existierende 32-Bit-Programme auf der x86-Architektur die Programmbibliotheken in /lib und /usr/lib erwarten, setzen einige Linux-Distributionen entweder einen symbolischen Link von /lib32 bzw. /usr/lib32 darauf, oder verwenden gleich /lib und /usr/lib für die 32-Bit-Bibliotheken (und /lib64 sowie /usr/lib64 für die nativen x64-Bibliotheken).

### Android

Auf Android wird Multilib ebenfalls für die Bereitstellung von Apps, die auf 32-Bit und 64-Bit gleichermaßen funktionieren, verwendet.

### Toolchain

Für Entwickler bedeutet Multilib die Verwendung einer entsprechenden Toolchain, die einen Compiler, der Multilib unterstützt, nutzt. Prominente Beispiele sind etwa GCC oder LLVM.

## Abgrenzung

Multilib stützt sich zwar bei der Toolchain auf bereits bestehende Konzepte von Multiarch, setzt im Unterschied dazu jedoch die gleiche Befehlssatzarchitektur (englisch Instruction Set Architecture, kurz ISA) voraus. Das Resultat ist Binärcode, der auf nur einer Architektur lauffähig ist. Das Betriebssystem stellt dann die jeweils richtigen Programmbibliotheken bereit, damit die ausführbare Datei funktioniert.
Multiarch hingegen bedeutet, dass ein Programm für eine andere Befehlssatzarchitektur kompiliert wird (Cross-Compiler). Jedoch wurde auch Multilib anfangs als MultiArch bezeichnet, etwa unter Ubuntu.
Eine ausführbare Datei (ein Programm), das auf mehr als einer Befehlssatzarchitektur lauffähig ist, weil die Binärdatei selbst den jeweiligen, bereits kompilierten Code dafür enthält, heißt Fat Binary oder, bei macOS von Apple, Universal Binary.