Die erste Voraussetzung, um Linux-Software unter FreeBSD laufen zu lassen, ist ein Compatibility Package, das installiert sein muss. Prüfen kann man das mit
pkg_info | grep linux
In der Ausgabe muss sich eine Zeile wie diese finden:
linux_base-7.1_2 The base set of packages needed in Linux mode
Außerdem muss man in der Datei rc.conf die Option
linux_enable="YES"
einschalten. Meistens sind diese Voraussetzungen nach einer Standard-Installation bereits erfüllt. Muss man das Programm, das unter FreeBSD laufen soll, unter Linux erst übersetzen, sollte man dort das Static-Flag verwenden.
Zuweilen stößt man beim Start der Linux-Software auf eine solche Fehlermeldung:
freebsd.server> ./example-program ELF binary type "0" not known. Abort
Um das Problem zu lösen ermittelt man zuerst den Elf-Typ des fraglichen Programms:
freebsd.server> readelf -e example-program ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Advanced Micro Devices X86-64 Version:n 0x1 Entry point address: 0x4086d0 Start of program headers: 64 (bytes into file) Start of section headers: 190616 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) ...
Hier kommt es auf das so genannte Application Binary Interface (ABI) an, das beispielsweise Datentypen, Ausrichtung, Aufrufkonventionen oder die Nummern der System Calls festlegt. Welche ABIs das vorliegende FreeBSD unterstützt verrät
brandelf -l
Die Ausgabe sieht beispielsweise so aus:
known ELF types are: FreeBSD(9) Linux(3) Solaris(6) SVR4(0)
Der Typ 0 würde in diesem Beispiel bereits unterstützt. Sollte sich bei einem an sich kompatiblen Programm hier ein falscher Typ-Wert ergeben haben, lässt sich das ändern:
brandelf -t Linux example-program
Nun sollte das Beispielsprogramm unter FreeBSD laufen.