|
Documentation NetBSD :Emulations binaires dans NetBSD |
Les éditeurs de logiciels commerciaux, cependant, ne veulent pas vraiment distribuer leur code source afin de préserver les secrets de fabrication. Ils distribuent donc un programme directement exécutable. Ils effectuent eux-même la compilation et donnent des fichiers binaires dont les secrets sont difficilement discernables.
Pour cela, l'éditeur doit répartir la main d'oeuvre sur les différents systèmes voulus en maintenant un système sur lequel effectuer les tests avec au moins une personne chargée des compilations et tests.
Le système d'exploitation et les applications que le consommateur veut utiliser sont ainsi étroitement liés. Certaines personnes choisiront de ne pas utiliser une application qui n'existe pas sur son système préféré et certaines autres seront obligées d'utiliser un système d'exploitation sur lequel tourne des applications critiques.
L'émultation binaire supprime cette dépendance.
Tout système Unix ou de type Unix fonctionne de cette manière générale (ils ont, par exemple, tous l'appel OUVRIR).
D'un système à l'autre, les premières différences dans les appels systèmes sont le format des paramètres (OUVRIR sous NetBSD demande un nom de fichier, des options et le mode). Le nom des appels peut aussi être différent. Si un système NetBSD veut faire tourner un exécutable Linux, chaque fois que le programme effectuera un appel, le noyau recherchera l'appel NetBSD correspondant et réordonnera ou transformera éventuellement les paramètres.
Un autre problème important concerne le format des fichiers exécutables. A peu près tous les systèmes d'exploitations utilisent des formats différents avec des en-têtes, des cookies magiques, des morcellements... différents. NetBSD supporte nativement le format a.out ou ELF (suivant l'architecture et la version. NetBSD migre vers ELF pour chaque port en fonction de son programme). Il existe d'autres formats tels que b.out, COFF, ECOFF, ieee695, PE, SOM et XCOFF. L'émulation de NetBSD sait comment gérer le format exécutable du système émulé.
Les appels des différents systèmes et leurs paramètres ne sont pas toujours utilisés de la même façon et sous la même forme. Par exemple, sous AmigaOS, un appel est lancé avec un index vers une table de pointeurs de fonctions pointées par des adresses de registres et de données par des pointeurs de données. D'autres systèmes utilisent d'autres méthodes, interceptions, tables, registres, piles... gérées par le système d'émulation binaire.
La dernière condition est que le processeur pour lequel l'application a été compilée corresponde au système sur lequel elle tournera. En plus des appels système, un exécutable consiste en une suite d'instructions processeur. Ainsi, un exécutable Unix SCO (processeur Intel 386) tournera sous NetBSD/i386 mais pas sous NetBSD/amiga (processeur Motorola 680x0). Pour que ce soit possible, il faudrait un système de traduction beaucoup plus compliqué et cela se ressentirait au niveau des performances de l'application.
% file qwsv
qwsv: BSD/OS i386 compact demand paged executable
% file arp
arp: NetBSD/i386 demand paged dynamically linked executable
Les mots «dynamically linked» indiquent que le programme est dynamiquement lié, leur absence indique qu'il est statiquement lié. Les bibliothèques d'objets partagés de la plupart des Unix libres se trouvent dans le pkgsrc de NetBSD, dans le répertoire /compat. Notez que ces bibliothèques ne sont pas nécéssaires si le programme est lié statiquement.
Pour les systèmes commerciaux, vous devrez avoir vos propres bibliothèques. Consultez man -k compat pour avoir la liste et man compat_os pour des instruction d'installation :
% man -k compat
compat_freebsd (8) - comment utiliser des binaires FreeBSD
compat_linux (8) - comment utiliser des binaires Linux
compat_sunos (8) - comment utiliser les architectures m68k et sparc
compat_svr4 (8) - comment utiliser des binaires SVR4/iBCS2
compat_ultrix (8) - compatibilité Ultrix sur 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
pmax
prep
sandpoint
sgimips
sh3
sparc
sparc64
sun3
vax
x68k
alpha
amiga
arc
arm26
arm32
atari
bebox
cobalt
dreamcast
hp300
hpcmips
hpcsh
i386
luna68k
mac68k
macppc
mipsco
mvme68k
news68k
newsmips
next68k
ofppc
pmax
prep
sandpoint
sgimips
sh3
sparc
sparc64
sun3
vax
x68k
Dans certains cas, les applications étrangères requièrent des caractéristiques absente de l'émulation de NetBSD. Cela arrive lorsqu'un système d'exploitation implémente de nouveaux appels et que les auteurs d'applications les utilisent. Lorsqu'une application de la liste ci-dessous apparait avec les mots «dernière version non-supportée», cela veut dire que les versions plus récentes de NetBSD peuvent la faire tourner.
alpha
amiga
arc
arm26
arm32
atari
bebox
cobalt
dreamcast
hp300
hpcmips
hpcsh
i386
luna68k
mac68k
macppc
mipsco
mvme68k
news68k
newsmips
next68k
ofppc
pmax
prep
sandpoint
sgimips
sh3
sparc
sparc64
sun3
vax
x68k
|
|