Démon BSD

Documentation NetBSD :

Emulations binaires dans NetBSD

Émulations binaires


Émulations binaires


Qu'est-ce qu'une émulation binaire ? Pourquoi cela existe-t-il ? (haut)

De nombreux logiciels Unix sont distribués sous forme de code source. C'est à dire que l'auteur donne réellement le code C (ou autre) de son programme. L'installation consiste alors à le compiler locallement sur notre machine. S'ils sont correctement écrit, le code source et les outils d'installation permettent au même programme de tourner sur des douzaines de systèmes différents.

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.

Quelles sont les autres compatibilités binaires ? (haut)

Il existe une autre compatibilité qui vaut d'être connue. NetBSD utilise le même format de fichiers objets binaires pour les ordinateurs ayant le même processeur. Si vous compilez une application NetBSD pour sun3, vous pourrez la faire tourner sur NetBSD amiga, NetBSD mac68k, NetBSD mvme68k, NetBSD next68k... mais vous ne pourrez pas la faire tourner sur ordinateur à processeur Intel.

Comment ça marche ? (haut)

Les systèmes Unix et de type Unix sont constitués de deux parties : le noyau et tout le reste. Le noyau contrôle les périphériques, la sécurité et les programmes utilisant les ressources de l'ordinateur. Shématiquement, le noyau assure ces services à partir des appels système des applications. Par exemple, un programme qui demande d'OUVRIR un fichier lance un appel «OUVRIR» avec un ensemble de paramètres indiquant ce qu'il souhaite faire. Le noyau accepte ou rejette la demande et réponds avec les informations que le programme attend.

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.

De quels systèmes puis-je faire tourner des binaires ? (haut)

D'une manière générale, vous pouvez faire tourner des binaires d'autres Unix tournant sur le même ordinateur que le votre. La liste des formats binaires de chaque portage et du courrier positif d'utilisateurs se trouve sur les pages spécifiques à chaque plate-forme, voir en bas.

Quelles sont les performances ? (haut)

Comme les seules choses à faire sont les concordances d'appels et la remise en forme, au besoin, des paramètres, les performances sont très, très bonnes. Une estimation approximative donne un impact de 1 à 2 %, disons 2%. Cela varie en fonction des appels utilisés par le programme. La plupart des correspondances prennent moins de 1% du temps que prend l'appel lui-même.

Que dire d'autre ? (haut)

Il n'y a pas seulement le processeur identique et la correspondance d'appels. La plupart des systèmes Unix gèrent les bibliothèques partagées. C'est à dire qu'un programme compilé ne contient pas toutes les fonctions dont il a besoin (il est donc moins gros) mais a besoin d'un ensemble de bibliothèques externes qui doivent correspondre à ce qu'attend le programme (y compris les modifications mineures). Si vous voulez faire tourner un programme en émulation binaire, vous devez vérifier s'il est statiquement ou dynamiquement lié, en tulisant la commande «file»...

% 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

Quels systèmes d'exploitation puis-je émuler sur ma machine ? (haut)

NetBSD tourne sur de nombreux processeurs et ordinateurs. Pour connaitre chaque spécificité, reportez-vous à la liste ci-dessous. Si vous connaissez d'autres émulations, dites-le nous.

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

Quelles sont les applications ayant déjà tourné sur ma machine ? (haut)

NetBSD tourne sur de nombreux processeurs et ordinateurs. Pour connaitre chaque spécificité, reportez-vous à la liste ci-dessous. Si vous avez d'autres applications à rapporter, dites-le nous.

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

Quelles applications qui n'ont pas réussi à tourner sur ma machine ? (haut)

NetBSD tourne sur de nombreux processeurs et ordinateurs. Pour connaitre chaque spécificité, reportez-vous à la liste ci-dessous. Si vous avez d'autres applications à rapporter, dites-le nous.

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


Accueil
Accueil Documentation

(Nous contacter) $NetBSD: compat.html,v 1.15 2008/01/10 06:27:33 jnemeth Exp $
Copyright © 2000-2003 par la Fondation NetBSD, Inc. TOUS DROITS RÉSERVÉS.