1 Qu'est-ce que ELF ? Petite introduction

Contenu de cette section

ELF (Executable and Linking Format) est un format binaire développé à l'origine par USL (UNIX System Laboratories) et utilisé actuellement par Solaris et System VR4. En raison de sa grande souplesse comparé au vieux format a.out que Linux utilisait jusqu'à présent, les développeurs de GCC et de la bibliothèque C ont décidé l'année dernière (1994) que ELF deviendrait également le format standard des exécutables binaires de Linux.

Les avantages de ce format se manifestent essentiellement de deux façons pour le programmeur :

Malgré ces avantages, nous devons dire que ELF peut éventuellement être un peu plus lent. Dans le pire des cas, ce ralentissement est de l'ordre de 1% à 5%, bien qu'à notre connaissance les tests effectués jusqu'à présent montrent que la différence est suffisamment faible pour passer inaperçue vis-à-vis de tous les autres événements se produisant au même instant. Si vous pouvez visualiser ou imprimer des documents TeX ou PostScript, jetez un coup d'oeil au fichier speed.comp-1.0.tar.gz, disponible sur les sites diffusant Linux.

Ce ralentissement provient du fait que le code de la bibliothèque ELF doit être à une position totalement indépendante (c'est ce qui est réalisé par l'option -fPIC citée plus haut), et qu'il faut alors dédier un registre au stockage de cette adresse. Il reste donc un registre de moins pour les variables, et comme les processeurs Intel ont un nombre de registre d'usage général extrêmement limité, ceci explique cela.

1.1 Ce que ELF n'est pas

Beaucoup se font de fausses idées sur ce qu'ELF apportera à leur système :

Ce n'est pas un moyen de faire tourner des programmes SVR4 ou Solaris.

Bien que ce soit la même "enveloppe" qu'utilisent les systèmes SVR4, cela ne signifie pas que les programmes SVR4 vont soudainement devenir exécutables sous Linux. C'est comme le format des disques : vous pouvez stocker des programmes Linux sur des disquettes MS-DOS ou Minix, et vice versa, mais en aucun cas cela signifie que ces systèmes seront capables de faire fonctionner ces programmes.

Il est théoriquement possible d'exécuter des applications prévues pour d'autres Unix pour processeurs x86 sous Linux, mais ce présent document ne contient pas les instructions nécessaires. Commencez par examiner le module iBCS (disponible sur les sites miroir) pour savoir s'il correspond à vos besoins.

Ce n'est ni plus petit, ni plus rapide.

Vous aboutirez peut-être à des binaires plus petits, toutefois, puisqu'il est plus facile de créer des bibliothèques partagées de code utilisé couramment entre de nombreux programmes. En général, si vous utilisez les mêmes options de compilation et que le résultat est moins grand que la version a.out, c'est surtout dû à une version différente du compilateur. "Plus rapide", cela nous étonnerait beaucoup. Une augmentation de vitesse peut être dûe à la réduction de la taille du programme, utilisant moins de swap ou dont les zones s'intègrent mieux dans le cache, mais pas au format ELF en lui-même.

Il n'est pas indispensable de remplacer tous les binaires de votre disque dur.

À l'issue de cette procédure de migration, vous aurez un système capable de compiler et d'exécuter aussi bien du format ELF que du a.out. Par défaut, toute compilation générera du ELF, mais une simple option sur la ligne de commandes permet la création de a.out. Il y a, bien entendu, un inconvénient à posséder un système mixte, comprenant des binaires aux deux formats : si vous avez une bonne quantité de programmes des deux types en fonctionnement au même moment, vous aurez alors deux copies de la bibliothèque C en mémoire. Néanmoins, il a été constaté que la dégradation de performances est indétectable sur une machine équipée de seulement 6 Mo de RAM, aussi vous n'avez rien à craindre. Vous gâchez bien plus de mémoire tous les jours en utilisant des pavés comme Emacs et les binaires statiques de Mosaic ou NetScape :-)

ELF n'a rien à voir avec Tolkien.

Ou du moins, pas dans ce contexte.

1.2 Pourquoi devez-vous migrer (ou non) vers ELF ?

Il y a essentiellement deux raisons de sauter le pas : la première, c'est la souplesse de programmation accrue que nous avons indiqué plus haut. La seconde, c'est qu'en raison de la première, tout les autres vont le faire. Les versions à venir de GCC et de la bibliothèque C ne seront plus fournies que pour ELF, et les autres développeurs vont suivre le mouvement.

Par esprit de contradiction, on peut dire qu'il y a aussi deux raisons de ne pas convertir son système en ELF, pour l'instant. La première, c'est que les choses sont encore en évolution, certaines applications (dont la série des noyaux "stables" 1.2) nécessitent des patches afin de pouvoir se compiler en ELF, et il peut rester quelques bogues ; certains argueront qu'ils attendent que Linus lui-même ait converti son système, par exemple.

La seconde, c'est que bien que la procédure d'installation décrite dans ce document soit simple et rapide (il suffit au grand maximum d'une petite heure, si l'on ne compte pas le temps de téléchargement des fichiers nécessaires), la moindre erreur à n'importe quel stade vous laissera un système incapable de fonctionner. Si vous n'avez pas l'habitude des mises à jour des bibliothèques partagées, et si les commandes ldconfig et ldd n'évoquent rien pour vous, il sera sans doute plus raisonnable que vous attendiez pour vous procurer une distribution complète de Linux en ELF. Vous pourrez alors sauvegarder votre installation et restaurer sélectivement ce dont vous aurez besoin, avec cette nouvelle version. Ensuite, vous reprendrez la lecture de ce document car vous aurez sans doute envie d'expérimenter et d'en apprendre un peu plus sur ce format.

Vous êtes toujours là ?

Chapitre Suivant , Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre