NetBSD Dokumentation:Binäremulation in NetBSD |
Kommerzielle Softwareanbieter dagegen verbreiten ungern die Quellen ihrer Programme, da sie Geschäftsgeheimnisse enthalten können. Sie bieten normalerweise vorkompilierte Programme an, die direkt ausgeführt werden können. Sie kompilieren die Programme schon vor der Auslieferung, und verbreiten binäre Programme, die ihre Geschäftsgeheimnisse besser schützen.
Das Ergebnis dieser Praxis ist, dass der Softwareanbieter eine Entscheidung treffen muss, wieviel Geld er bereit ist auszugeben, um für die unterschiedlichen Betriebssysteme Support anzubieten, sowie ein solches System zu unterhalten, und jemanden für die Kompilierung und das Testen der Software auf dieser Plattform abzustellen.
Dies verbindet das Betriebssystem und den Satz von Anwendungen, den der Endanwender benutzen kann; man kann sich gegen eine bestimmte Software entscheiden, weil sie nicht für das eingesetzte Betriebssystem verfügbar ist, oder man muss sich eventuell für eine bestimmte Plattform entscheiden, da kritische Anwendungen nur für diese verfügbar sind.
Binäremulation bricht diesen Zwangsbund zwischen Anwendungen und Betriebssystemen auf.
Jedes Unix oder Unix-ähnliche System bietet einen sehr ähnlichen Satz von
diesen Systemaufrufen an. (All jene haben z. B. einen Systemaufruf namens OPEN)
Von System zu System ist der Hauptunterschied zwischen diesen Systemaufrufen,
dass das Format und evtl. die Anzahl der übergebenen Parameter sich unterscheiden.
(NetBSDs OPEN erwartet z. B. einen Dateinamen, Flags und einen Modus) Die Namen
der Systemaufrufe können sich auch von System zu System unterscheiden. Wenn ein
NetBSD System versucht ein für Linux kompiliertes Programm auszuführen, nimmt
der Kernel eine Umleitung des Systemaufrufes auf den korrespondierenden NetBSD-Systemaufruf
vor, und ändert die Parameter entsprechend, um den Erwartungen des NetBSD Systemaufrufs
gerecht zu werden.
Ein weiterer wichtiger Punkt ist das Dateiformat der ausführbaren Dateien. Ungefähr jedes zweite Betriebssystem benutzt ein unterschiedliches Dateiformat in dem Programme gespeichert werden, mit unterschiedlichen Headers, Magic Cookies, Hunks usw. Das von NetBSD direkt unterstützte Dateiformat ist entweder a.out oder ELF (abhängig von der Architektur und der Version von NetBSD. NetBSD migriert zu ELF, wobei jeder Port seinem eigenen Zeitplan folgt). Andere bekannte Dateiformate sind z. B. b.out, COFF, ECOFF, ieee695, PE, SOM und XCOFF. NetBSD's Emulation weiss wie es diese Dateiformate handhaben muss.
Die verschiedenen Systeme greifen auf ihre Systemaufrufe in unterschiedlicher Weise zu, und ihre Parameter werden unterschiedlich von den Programmen an den Kernel und zurück gereicht. AmigaOS, zum Beispiel, einen benutzt Index einer Tabelle, welche Zeiger auf Funktionen, adressiert durch ein Adressregister, enthält, wobei ein zugehöriges Datenregister die Parameter enthält. Andere Systeme benutzen andere Modelle, Traps, Tabellen, Register, stacks, usw, und all dies wird von der Emulation berücksichtigt.
Die letzte wichtige Anforderung an die Emulation ist, dass sie auf derselben CPU stattfindet, für die auch das auszuführende Programm kompiliert wurde. Neben Systemaufrufen bestehen Programme aus "rohen" CPU Instruktionen. Deswegen können SCO Unix Binärprogramme (Intel 386 CPU) auf NetBSD i386 ausgeführt werden, aber nicht auf NetBSD Amiga (Motorola 680x0 CPU). Eine solche Emulation würde einen sehr viel aufwändigeren Mechanismus zur Übersetzung der Instruktionen erfordern, welches spürbare Auswirkungen auf die Performance hätte.
% file qwsv
qwsv: BSD/OS i386 compact demand paged executable
% file arp
arp: NetBSD/i386 demand paged dynamically linked executable
'dynamically linked' bedeutet ebendies, dass das Programm Shared Libraries benutzt, die Abwesenheit dieser Ausgabe bedeutet, dass das Programm statisch gebunden wurde. Für die meisten frei erhältlichen Unix Systeme sind diese dynamischen Libraries durch die pkgsrc-Paketsammlung (im compat Verzeichnis) erhältlich. Bitte beachten Sie, dass diese nich benötigt werden, um statisch gebundene Programme auszuführen.
Um kommerzielle Systeme zu emulieren kann es sein, dass Sie eigene Libraries
benötigen. Überprüfen Sie man -k compat
um eine Liste zu erhalten, und
man compat_os
(z. B. man compat_freebsd
) für Installationsanweisungen.
% man -k compat
compat_freebsd (8) - setup procedure for running FreeBSD binaries
compat_linux (8) - setup procedure for running Linux binaries
compat_sunos (8) - setup procedure for m68k and sparc architectures
compat_svr4 (8) - setup procedure for running SVR4/iBCS2 binaries
compat_ultrix (8) - setup procedure for Ultrix compatibility on mips
and vax
alpha
amiga
arc
arm26
arm32
atari
bebox
cobalt
dreamcast
hp300
hpcmips
hpcsh
i386
luna68k
mac68k
macppc
mipsco
mvme68k
news68k
newsmips
next68k
ofppc
pc532
pmax
prep
sandpoint
sgimips
sparc
sparc64
sun3
vax
x68k
alpha
amiga
arc
arm26
arm32
atari
bebox
cobalt
dreamcast
hp300
hpcmips
hpcsh
i386
Maple wird mit Programmen für SuSE und RedHat Linux ausgeliefert, aber selbst mit unseren SuSE compat Paketen, funktioniert (nur) die RedHat Version. Keine große Sache, falls Sie beide Programme verfügbar haben. Ein kleines Patch wird benötigt, um Maple NetBSD bekannt zu machen:
--- maple.system.type.orig Mon Apr 30 17:26:11 2001 +++ maple.system.type Mon Apr 30 17:40:49 2001 @@ -84,6 +84,11 @@ MAPLE_BIN="bin.IBM_INTEL_LINUX_REDHAT" fi ;; + "NetBSD") + # NetBSD uses SuSE compat per default, but maple works + # (only) with the RedHat compat. + MAPLE_BIN="bin.IBM_INTEL_LINUX_REDHAT" + ;; *) # currently do not support any other platforms MAPLE_BIN="FAIL"
Wenden Sie dieses Patch gegen das mapledir/bin/maple.system.type Skript an, und Sie können maple, xmaple, etc. benutzen.
luna68k
mac68k
macppc
mipsco
mvme68k
news68k
newsmips
next68k
ofppc
pc532
pmax
prep
sandpoint
sgimips
sh3
sparc
sparc64
vax
x68k
Manchmal benötigen Anwendungen Features die in der Emulationsschicht von NetBSD nicht angeboten werden können. Das passiert normalerweise, wenn das Fremdsystem neue Systemaufrufe implementiert, und die Programmautoren ihre Programme an diese neuen Gegebenheiten anpassen. Wenn eine Anwendung mit 'letzte nicht unterstützte Version' aufgelistet ist, können alle späteren NetBSD releases diese Anwendung ausführen.
alpha
amiga
arc
arm26
arm32
atari
bebox
cobalt
dreamcast
hp300
hpcmips
hpcsh
i386
luna68k
mac68k
macppc
mipsco
mvme68k
news68k
newsmips
next68k
ofppc
pc532
pmax
prep
sandpoint
sgimips
sh3
sparc
sparc64
sun3
vax
x68k
|
|