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,[1] 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.[2] 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).[3]
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.[6] 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.[7]
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.
Siehe auch
- WOW64, eine vergleichbare Technik unter Windows
Weblinks
Einzelnachweise
- Tammy Fox: Red Hat Enterprise Linux Administration Unleashed. Pearson Education, 2007, ISBN 978-0-13-271539-3 (englisch, multilib in der Google-Buchsuche): “To run both 32-bit and 64-bit applications, both sets of libraries must be installed. Having both the 64-bit and 32-bit versions of a library installed at the same time is known as multilib.”
- LSB Workgroup: Filesystem Hierarchy Standard, Version 3.0. The Linux Foundation, 2015, abgerufen am 9. Februar 2020 (englisch): „3.10.
/lib<qual>
: Alternate format essential shared libraries (optional) … There may be one or more variants of the/lib
directory on systems which support more than one binary format requiring separate libraries.“ - Project:AMD64/Multilib layout. In: Gentoo Wiki. Abgerufen am 9. Februar 2020 (englisch): „Why lib and not lib32? – Using lib is beneficial to compatibility with prebuilt x86 software, e.g. old games. All that software is naturally built to use lib as libdir, and using the same directory on multilib amd64 systems improves compatibility and reduces the need for custom hacks to keep things working.“
- Understanding 64-bit Builds. In: Android Open Source Project. Abgerufen am 9. Februar 2020 (englisch).
- ToolChain. In: Ubuntu Wiki. Abgerufen am 9. Februar 2020 (englisch).
- Multiarch LibraryPathOverview. In: Debian Wiki. Abgerufen am 9. Februar 2020 (englisch): „The multilib mechanism provides a way to support multiple incompatible ABI versions on the same ISA.“
- MultiArch. In: Ubuntu Community Help Wiki. Abgerufen am 9. Februar 2020 (englisch).