Émulation et interopérabilité

publicité
Émulation et
interopérabilité
Théoriquement, tous les ordinateurs sont équivalents à des
machines de Turing (modélisation théorique des machines de
traitement automatique). Concrètement, en revanche, ils
présentent des incompatibilités. Heureusement, il existe des
traducteurs et interpréteurs qui, au prix parfois d’une petite
baisse de performance, assurent dans une certaine mesure la
compréhension mutuelle. Attention, ce chapitre est un peu
technique mais le parcourir rapidement pourra s’avérer
intéressant pour compléter votre culture générale et votre
compréhension des ordinateurs.
© Groupe Eyrolles, 2005
C
SOMMAIRE
B Couches de fonctionnement
des ordinateurs
B Équivalences et émulations à
chaque niveau
MOTS-CLÉS
B Émulation
B Compilation
B Interprétation
B Formats de fichiers
B Équivalences fonctionnelles
Accès libre – Débuter sous GNU/Linux
Cadre
Les ordinateurs, on l’oublie parfois, sont avant tout conçus pour servir l’homme.
En particulier, tout élément frustrant et stressant, mais évitable étant donné
l’état des technologies, est le signe d’une mauvaise conception. Ils doivent donc
proposer une interface intuitive et conviviale à leurs utilisateurs et programmeurs – on parle de « haut niveau ».
CULTURE Haut niveau et bas niveau
Il ne s’agit nullement de jugements de valeur, mais d’une graduation sur une échelle virtuelle s’appuyant sur les niveaux de fonctionnement du processeur et du langage machine pour « monter »
couche par couche jusqu’à l’interface avec l’humain, utilisateur ou
programmeur.
Le « haut niveau » est caractérisé par un vocabulaire riche et étendu,
proposant des termes pour une grande variété de concepts couramment manipulés par les humains. C’est plutôt une description fonctionnelle des choses. Chacun des ordres de son « catalogue » se
décompose au niveau électronique en de multiples opérations élémentaires. Voici un exemple d’ordre de haut niveau dans la vie
courante : « Viens me chercher à la gare à 11 heures ».
Le « bas niveau » est caractérisé par un vocabulaire limité, très
organique et peu conceptualisé, et décompose chaque action évoluée en une longue séquence d’ordres élémentaires.
C’est de cette manière que fonctionnent les puces électroniques et
circuits électriques. Si l’on devait tenter de traduire en instructions
de bas niveau l’ordre donné précédemment en exemple, on pourrait décomposer à l’envi, comme suit : « Alarme à 10h30. Ouvrir la
portière de la voiture. S’asseoir sur le siège conducteur. Boucler la
ceinture de sécurité. Insérer la clé de contact. Tourner la clé de contact. (…) Avancer de 100 mètres. Si le feu est vert, passer et
tourner à droite. Si en revanche il est rouge, s’arrêter. En cas d’obstruction ou de déviation… ». Ces instructions semblent toutes évidentes à tout être humain ayant déjà conduit en ville, mais il faut
les programmer si l’on souhaite qu’une machine s’en acquitte.
B http://fr.wikipedia.org/wiki/
Histoire_de_l%27informatique
Originellement, pour des raisons de recherche et de limites technologiques, les
premiers calculateurs électroniques n’étaient capables d’effectuer que des opérations techniques et abstraites, de peu d’intérêt aux yeux du non spécialiste.
C’étaient les premiers informaticiens qui faisaient l’effort d’apprentissage et de
concentration pour communiquer avec les machines dans ce langage non
intuitif.
Peu à peu, l’électronique et les connaissances évoluant, on a pu ajouter des couches de niveaux de plus en plus haut, chacune reposant sur des instructions de la
précédente. Ainsi, on pouvait « lire un caractère » dans un fichier, sur le disque,
sans rien connaître du fonctionnement de sa mécanique ou de son système de
fichiers, une bibliothèque de « virtualisation » faisant l’interface. Plus tard
encore, des fonctions « lire un nombre entier » ou « lire une ligne complète » se
sont appuyées sur la fonction « lire un caractère », etc.
Chacune de ces couches de l’échafaudage est une source possible d’incompatibilités entre les différents ordinateurs, à commencer par les couches les plus basses
(micro-code, langage machine, instructions reconnues par le processeur). Il
existe pourtant de nombreux outils de traduction ou d’adaptation ; nous allons
en détailler quelques-uns.
2
© Groupe Eyrolles, 2005
C – Émulation et interopérabilité
Émulation au niveau processeur
Le processeur est la puce électronique qui joue le rôle de « cerveau » de l’ordinateur – il est plus exact de dire que c’est sa « centrale de calcul », puisque la
mémoire et toute autre forme d’« intelligence » d’un ordinateur sont situées
dans d’autres composants, respectivement la RAM et les programmes saisis par
des hommes.
Il lit successivement les instructions de son « segment de code » (zone de
mémoire contenant le code) et applique les ordres qu’il y trouve sur son
« segment de données » (zone de mémoire contenant les données). Il n’est
capable que d’opérations très simples et limitées en nombre, comme de lire un
nombre en mémoire, d’écrire un nombre en mémoire, d’effectuer des opérations
arithmétiques simples sur les nombres stockés dans ses registres (sa propre
petite mémoire de transit), etc.
VOCABULAIRE Architecture
L’architecture d’un ordinateur est le modèle de son
processeur et différents autres choix électroniques
faits au niveau de la carte mère.
Langage d’assemblage
On utilise un « assembleur » pour programmer un processeur en langage
d’assemblage – on en montre un exemple au chapitre 18, « Ce qu’est vraiment le
logiciel libre ». C’est une programmation très rébarbative et difficile à relire et
maintenir, qui est de moins en moins connue et pratiquée. Deux processeurs
incompatibles ne parlant pas le même langage, un programme écrit pour l’un
sera inutilisable sur l’autre.
CULTURE RISC et CISC
Même si les plus répandus au niveau grand public sont les processeurs compatibles Intel
de type x86 (386, 486, Pentium, etc.), il existe de nombreuses familles de processeurs –
les Macintosh d’Apple par exemple, utilisent depuis longtemps des processeurs qui parlent un langage différent (mais ils passeront eux aussi sous compatibles x86 sous peu).
On peut classer ces familles en deux super-familles, chacune ayant choisi une option différente. Les Reduced Instruction Set Computers (RISC) ont opté pour des processeurs au
vocabulaire plus restreint, ce qui facilite évidemment leur conception au niveau des circuits
imprimés. On les trouve par exemple dans les Sun (Sparc 32 et 64), ordinateurs plutôt
réservés à un usage professionnel de type serveurs sous Unix. Les « Complex Instruction
Set Computer » (CISC), plus répandus dans le grand public (bien que plus complexes à concevoir et à réaliser), ont fait le choix inverse. C’est le cas des processeurs de la famille Intel.
En CISC, on trouve l’architecture x86/IA32 (constructeurs : Intel, AMD, VIA). En RISC, on
trouve les architectures ARM (Intel XScale), MIPS (différents fondeurs), PowerPC (IBM par
exemple ; cette famille comprend ce que la société Apple appelle G3, G4, et G5), VLIW
(dont IA64).
PowerPC, à l’origine un développement conjoint d’IBM et de Motorola, est une variante
de l’architecture « Power » définie par IBM, laquelle compte au moins 4 générations.
Cette liste n’est pas exhaustive. Signalons le cas particulier de la société ARM, qui définit
une architecture sans fondre de processeurs. Elle vend le droit de produire des processeurs
de type ARM à des sociétés annexes comme Intel.
© Groupe Eyrolles, 2005
AVANCÉ RISC et CISC : comparaison
Il est difficile de comparer ces deux approches de
l’architecture processeur et ces deux familles ont
leurs avantages et leurs inconvénients.
Ce que l’on gagne en simplification du processeur
dans le RISC et donc, théoriquement, en vitesse,
on le perd en compacité du code produit, donc en
efficacité d’utilisation du cache, et donc… en
vitesse. On y perd aussi en efficacité du code,
chaque cycle du processeur pouvant traiter moins
de fonctionnalités.
Tout ne semble pas toujours logique : les RISC ont
de nos jours une fréquence d’horloge moins élevée
que celle des CISC et consomment plus d’énergie –
cela traduit sans doute les moyens investis dans la
recherche et le développement.
3
Accès libre – Débuter sous GNU/Linux
Dans la même famille, les processeurs proposent souvent une « compatibilité »
ascendante : ainsi, un Pentium (586) comprendra tout le jeu d’instructions d’un
386, qu’il suit de plusieurs années, mais proposera de nouvelles instructions.
C’est pourquoi un programme écrit en langage d’assemblage pour Pentium ne
fonctionnera pas sur 386.
CULTURE Les différences du Pentium
Signalons qu’il est possible de compiler un programme en profitant des apports du Pentium, ce qui permet un fonctionnement plus rapide, mais interdit l’utilisation du binaire
produit sur des processeurs antérieurs. C’est l’une des manières dont MandrakeSoft
(désormais Mandriva) s’est distinguée de Red Hat à la fin des années 1990 : elle proposait
des distributions GNU/Linux optimisées pour Pentium.
Langages compilés
GAGNER DU TEMPS Compilateurs efficaces
Les compilateurs n’ont cessé de progresser et la
plupart opèrent désormais des optimisations très
efficaces, auxquelles les programmeurs n’auraient
pas forcément pensé seuls. D’autre part, l’avantage principal d’écrire un programme dans un langage d’assez haut niveau (par opposition au
langage d’assemblage), c’est la portabilité (ré-utilisation sur d’autres architectures) et le gain de
temps (il est plus rapide et facile à un humain de
parler un langage plus proche du langage naturel).
Plusieurs approches ont été menées pour résoudre ou contourner ces incompatibilités au niveau du processeur. La première est la mise en place de langages de programmation de plus haut niveau, utilisant un « compilateur » pour transformer
(compiler) ce code source en langage d’assemblage. Ainsi, un même code source
peut être réutilisé et recompilé sur différentes architectures, le compilateur se
chargeant de l’adaptation au langage d’assemblage spécifique de l’architecture.
L’inconvénient, évidemment, est que malgré les progrès et les efforts investis dans
le développement des compilateurs, ces codes ainsi générés automatiquement
sont moins efficaces qu’un code écrit directement en langage d’assemblage par un
bon spécialiste, car le compilateur ne comprend pas ce qu’il fait – il est rare qu’un
logiciel ou un compilateur « comprenne » quoi que ce soit à ce qu’il manipule.
L’ordinateur ne procède donc pas à toutes les optimisations possibles. Citons
quelques exemples de langages compilés : Fortran, Pascal, C, C++.
LUMIÈRE SUR WIKIPÉDIA Les langages de programmation C et C++
Langage inventé pour écrire Unix, il y est encore utilisé pour la plupart des utilitaires techniques ou programmes nécessitant de bonnes performances à l’exécution. Le langage
C++ en est une extension objet. Le langage C est technique et complexe à maîtriser, ce
qui le rend peu indiqué aux débutants en programmation.
B http://fr.wikipedia.org/wiki/C_(langage)
B http://fr.wikipedia.org/wiki/C%EF%BC%8B%EF%BC%8B
Langages interprétés
CELA SE COMPLIQUE Troisième famille
Des langages récents ont un pied dans chaque
monde et on peut dire qu’ils sont compilés pour
une machine virtuelle. Exemples : JAVA, OCaml
(version bytecode), Python compilé, C#, et parfois
Emacs.isp.
4
La puissance sans cesse croissante des ordinateurs a permis le développement de
langages « interprétés ». Ils n’existent sur le disque que sous forme de fichiers de
code source et c’est un « interpréteur » qui se charge de les comprendre et simule
un ordinateur virtuel, dont le langage machine serait directement les expressions
écrites par le programmeur. On peut ainsi reprendre un fichier sur un autre système, sans devoir le recompiler, ni même disposer d’un compilateur. Évidemment, ceci est plus lent à l’exécution que le résultat d’une compilation. C’est à
© Groupe Eyrolles, 2005
C – Émulation et interopérabilité
réserver aux applications n’ayant pas de gros besoins en puissance de calcul. Voici
quelques exemples de langages interprétés : BASIC, Korn Shell, Perl.
LUMIÈRE SUR WIKIPÉDIA Le langage de programmation Java
Ce langage de programmation récent s’est rapidement répandu, entre autres sur le Web.
Il présente l’avantage de pouvoir être compilé dans un format binaire pour machine virtuelle indépendante du véritable ordinateur où se déroule l’exécution (évidemment, au
prix d’une baisse des performances). Il est orienté objet et dispose de riches bibliothèques
de programmation. Déplorons sa prise en charge incomplète dans le cadre du logiciel
libre : les projets libres ne sont pas encore entièrement compatibles avec la norme ni aussi
performants que les versions propriétaires du langage, à cause de la politique de son créateur. Lisez cet article pour tout savoir sur ce langage à la mode !
B http://fr.wikipedia.org/wiki/Java_(langage)
Exemple
Le premier programme appris dans un nouveau langage de programmation se
contente souvent d’afficher la chaîne « Hello world ! » (bonjour le monde !).
En langage C, compilé, le cœur du programme serait printf("Hello
world!\n"); – nous passons sous silence les en-têtes techniques. Un compilateur (par exemple GCC) est nécessaire et transforme ce code source en fichier
binaire directement exécutable par le processeur.
En Bourne Shell, langage interprété, le cœur du programme a l’allure echo
mais le programme /bin/sh est nécessaire à son exécution.
Hello world!
Traduction à la volée du langage d’assemblage
Souvent, on ne dispose pas du code source pour espérer recompiler une application sur une nouvelle architecture cible. C’est en particulier le cas pour les logiciels propriétaires classiquement trouvés dans le commerce, mais aussi pour les
solutions fournies par des prestataires de services qui disparaissent de la vie économique sans avoir fourni les codes sources à leurs clients.
Des ordinateurs puissants
La « loi de Moore » a très tôt prévu une amélioration exponentielle des complexités des semi-conducteurs d’entrée de gamme et cette prédiction
séduisante fut reprise et détournée dans bien
d’autres domaines, y compris où elle n’avait pas
grand sens.
Empiriquement, on constate depuis plusieurs
années que les divers paramètres des ordinateurs,
notamment la puissance de calcul, doublent tous
les dix-huit mois. Cependant, il est probable qu’on
atteigne bientôt des limites physiques dues à la
finitude de la vitesse de la lumière et à la structure
atomique de la matière.
B http://fr.wikipedia.org/wiki/Loi_de_moore
EXEMPLES Émulateurs de plate-forme compatible PC
C’est le cas de figure le plus fréquent, notamment pour exécuter des applications Windows sous système GNU/Linux ou inversement. Pour cela, il faudra sans doute commencer
par « installer » Windows dans l’ordinateur virtuel, à l’aide d’un CD-Rom d’installation
classique, en suivant la méthode habituelle, ce qui ne manquera pas de surprendre la première fois puisque tout s’affichera dans une fenêtre à l’écran. Citons notamment Bochs,
QEMU (logiciels libres) et VMware (logiciel propriétaire) :
B http://bellard.org/qemu/
B http://bochs.sourceforge.net/
B http://www.vmware.com/
© Groupe Eyrolles, 2005
5
Accès libre – Débuter sous GNU/Linux
JEUX VIDÉO Émulateurs de bornes d’arcade et consoles de jeux
À partir des années 1980, les jeux vidéo ont envahi les cafés et salles de jeu avec des
machines embarquant, dans un caisson de bois, un écran de moniteur, une manette et
quelques boutons.
Ces titres ont rapidement été dépassés, car la puissance des machines et les efforts consentis en développement de jeux n’ont cessé de croître. Malheureusement, comme souvent dans ce cas de figure, au lieu de « libérer » les éléments du jeu dans le domaine
public, les détenteurs de droits les ont souvent enterrés sans plus les exploiter (pratique
dite de l’« abandonware ») et certains d’entre eux ont mis la clé sous la porte. Le même
phénomène a eu lieu avec les consoles de jeu qui se branchaient sur la télévision.
Les nostalgiques peuvent désormais accéder à des émulateurs de ces machines de jeux,
tels que MAME :
B http://www.mame.net
Ces machines n’ayant pas vocation à être des ordinateurs programmables, elles se contentaient de stocker le code compilé du jeu dans leur mémoire permanente (ROM). Si un
autre jeu pouvait fonctionner sur la même circuiterie, il suffisait de changer de ROM.
Aujourd’hui encore, disposer du seul émulateur ne permettra de jouer à aucun jeu si l’on
ne dispose pas de ROM.
Le site web précédemment cité rappelle que « les sites web proposant des ROM sont
illégaux » (ces ROM sont protégées par le copyright de leurs ayants-droit, souvent les
sociétés de développement des jeux), mais en donne quand même une liste. En France, il
n’est pas clair que l’exception pour copie privée interdise à quelqu’un d’exploiter ces sites.
La vitesse toujours plus grande des processeurs a permis d’envisager de traduire
à la volée le langage d’assemblage dans le cadre d’un ordinateur virtuel.
Un ordinateur virtuel est un programme normalement codé dans le cadre de
l’architecture utilisée (processeur et système d’exploitation) qui réserve une
partie de la mémoire et du disque pour « créer » un deuxième ordinateur sans
existence matérielle : son disque dur sera une portion réservée du disque de la
machine, son écran sera une fenêtre de l’interface graphique et son clavier sera
le clavier normal de l’ordinateur, lorsque cette fenêtre sera activée.
On comprendra que cela n’est possible que si les tailles de disque et de mémoire,
voire les résolutions graphiques ont suffisamment évolué entre le moment où
l’ordinateur qu’on souhaite émuler était courant et le moment présent.
VOCABULAIRE Cycle d’horloge
Un cycle d’horloge est la petite période de temps
pendant laquelle un processeur réalise une opération élémentaire. On détermine son ordre de grandeur en inversant sa cadence, exprimée en Hertz
(Hz). Ainsi, un processeur cadencé à 1 MHz (un
million de cycles par seconde) travaille en cycles
d’horloge d’environ un millionième de seconde, ou
une micro-seconde.
6
De plus, il faut aussi que la puissance de calcul ait progressé : chaque instruction
de langage d’assemblage des programmes exécutés sur l’ordinateur virtuel
devant évidemment s’exécuter sur un matériel réel, elle sera traduite par le programme d’émulation en instructions de langage d’assemblage de l’ordinateur
réel. Ceci étant fait automatiquement, sans aucune tentative d’optimisation ou
de compréhension de la sémantique du code ainsi interprété, on observera évidemment des dégradations de performances d’autant plus importantes que les
deux architectures sont éloignées.
Ce qui s’exécutait en un cycle d’horloge sur l’ordinateur original, pourra prendre
en moyenne 5 à 10 cycles d’horloge sur la machine virtuelle.
Si le nouvel ordinateur n’est pas suffisamment puissant, on souffrira donc d’une
lenteur crispante de l’exécution de l’application émulée. Dans tous les cas de
© Groupe Eyrolles, 2005
C – Émulation et interopérabilité
figure, ce genre de pratique est en général à réserver aux utilisations ponctuelles,
dans le cadre de pratiques d’interopérabilité par exemple.
Signalons que si l’on dispose déjà d’une partition avec le système d’exploitation
que l’on souhaite utiliser complètement installé, il n’est pas toujours nécessaire de
réinstaller ce système dans un ordinateur virtuel.
Émulation au niveau système
On a parfois besoin d’utiliser un applicatif Windows car il n’a aucun équivalent
fonctionnel sous systèmes Unix. On peut bien sûr installer Windows sur un
disque dur ou une partition de la machine et redémarrer en choisissant le système d’exploitation souhaité dans le menu de démarrage du chargeur d’amorçage. Ceci s’avérera rapidement rébarbatif et interrompra toute session,
connexion ou calcul en cours.
NOTION Système d’exploitation
Comme son nom l’indique, c’est l’ensemble des logiciels techniques qui
permettent de tirer parti d’une machine. C’est une couche d’assez bas
niveau, surplombant la couche de langage machine et « virtualisant »
les interfaces d’accès aux périphériques matériels (cartes réseau, cartes
graphiques, disques durs). Ainsi, les applications pourront accéder aux
ressources de la machine sans devoir connaître leurs caractéristiques
techniques précises et tout changement ou mise à jour de matériel ne
devra être pris en compte que par le système.
Un système d’exploitation gravite autour d’un noyau qui se charge
d’exécuter les appels système, fonctionnalités utilisées par les applicatifs
et qui peuvent consister à ouvrir un fichier sur le disque, clore une connexion réseau, etc. Tous les systèmes ne proposent pas les mêmes appels
système, ce qui explique que l’on ne peut pas utiliser de façon transparente une application Windows sur un ordinateur sous GNU/Linux,
même s’il fonctionne sur la même architecture matérielle (avec le même
langage d’assemblage donc).
On peut recourir alors à la solution de l’émulation au niveau du processeur,
détaillée dans la section précédente. Mais elle ne convient pas toujours (elle est
souvent trop lente).
L’émulateur de système d’exploitation le plus répandu est Wine, qui permet
d’exécuter de nombreuses applications Windows sur des systèmes Unix, donc
notamment sur GNU/Linux. En revanche, Wine ne remplace que le système
d’exploitation, pas le processeur : il ne fonctionne donc que sur des architectures
compatibles Intel x86… Accrochez-vous : certains ont eu l’idée folle d’employer
un émulateur de PC (type Bochs ou QEMU ; VMware n’est pas proposé pour
ces systèmes) sur une autre architecture (ex : Mac). Dans l’ordinateur virtuel
ainsi créé, rien n’empêchait plus Wine de fonctionner… Le plus fort, c’est que
cela fonctionne ! (au prix, admettons-le, d’une certaine baisse de performances…). Résumé : j’ai un Mac sous GNU/Linux. J’y utilise Bochs ou
© Groupe Eyrolles, 2005
7
Accès libre – Débuter sous GNU/Linux
Wine
B http://www.winehq.org/
QEMU et mets en place un PC virtuel où j’exécute Wine. Ce dernier me
permet alors d’invoquer Word pour Windows sur PC ! En deux étapes d’émulation, j’ai changé d’architecture et de système d’exploitation.
Wine fonctionne parfois un peu mieux si l’ordinateur qui l’emploie dispose
d’une partition de disque dur où Windows est installé, car il peut alors utiliser
certains de ses fichiers.
C’est un produit remarquable, en phase de développement intensif ; il n’est pas
exclu que la version sortie récemment corrige certains problèmes ou permette
d’exécuter de nouveaux programmes. Évidemment, plus un programme fait de
manipulations non classiques (interventions sur le fond de l’écran en écrivant
des messages ; jeux vidéo très gourmands en ressources d’affichage et de calcul),
moins il est probable qu’il fonctionne correctement. Wine permet toutefois
d’employer des éléments de la suite MS-Office et notamment de lire, modifier
et sauvegarder des documents MS-Word.
On prendra garde à l’installation des polices de caractères sur la machine Unix,
car Word fait appel au gestionnaire de polices de Windows pour son affichage
et Wine aura par exemple besoin de polices TrueType pour afficher correctement les applications utilisant des polices évoluées. Le nom du paquetage concerné comporte souvent la chaîne de caractères mstt ou msttcorefonts.
Compatibilité de formats de fichiers
Qu’est-ce qu’un format de fichier ?
LUMIÈRE SUR WIKIPÉDIA Langage de balisage
Le Web est largement responsable de la démocratisation d’Internet (dont il n’est qu’une partie), au
début des années 1990. Qui ignore encore de nos
jours que les « pages web » sont écrites dans un
langage spécial appelé « HTML » ?
Tout le monde ne sait pas que ce langage ne fut
pas inventé ex nihilo pour cette fonction. C’est
l’héritier d’une longue tradition de langages à
balises dans le cadre de la norme SGML, et l’histoire de ces langages a continué ensuite avec la
norme XML, plus simple. Les suites bureautiques
modernes sauvegardent leurs documents sous une
forme XML. Cet article fait le point sur la question
et replacera des connaissances éparses dans leur
contexte.
Attention à ne pas faire une confusion fréquente :
un langage de balisage n’est (généralement) pas
un langage de programmation.
B http://fr.wikipedia.org/wiki/
Langage_de_balisage
8
Un format de fichier est une notion souvent inconnue de l’utilisateur final de
suite bureautique, mais elle est cruciale et explique souvent de nombreuses
incompatibilités.
Au plus bas niveau, toute donnée manipulée par un ordinateur (images, sons,
textes, documents bureautiques, codes sources ou codes compilés) est stockée sous
forme de nombres. En particulier, un fichier est une suite d’octets, c’est-à-dire de
nombres pouvant prendre 256 valeurs différentes, de 0 à 255 (de même que deux
cases carrées permettent d’inscrire 100 nombres différents, de 00 à 99).
L’enjeu crucial est donc la manière dont les données de haut niveau sont codées,
et comment les décoder ou visualiser. Presque tous les systèmes d’exploitation
utilisent désormais le même jeu de caractères, ASCII, qui consiste à attribuer la
place 65 à la lettre « A », 48 au chiffre « 0 », etc. Représenter graphiquement à
l’écran tout « 65 » d’un fichier par le glyphe « A » et tout « 48 » par « 0 » permettra donc à un œil humain de prendre connaissance du contenu d’un fichier
texte (fichier texte brut ou courrier électronique simple, par exemple).
Toutes les valeurs possibles des octets ne sont pas associées à des caractères
alphabétiques ou typographiques : on trouve ainsi des « caractères de contrôle »
(0 à 31) et des « caractères étendus » (128 à 159, 128 à 255 parfois) qui n’ont pas
vocation à être interprétés dans le cadre d’un jeu de caractères. On appelle
« fichier binaire » un fichier incompréhensible s’il est visualisé en tant que
fichier texte.
© Groupe Eyrolles, 2005
C – Émulation et interopérabilité
FAUSSE ALERTE Format de fichiers d’OpenOffice.org
OpenOffice.org est une suite bureautique libre largement compatible avec les formats de
fichiers MS-Office. Cependant, son format de fichiers natif semble binaire lui aussi. À quoi
bon donc la recommander, quelles garanties de pérennité de plus offre-t-elle ?
Tout d’abord, le fait qu’en tant que logiciel libre son code source soit disponible (voir chapitre 18, « Ce qu’est vraiment le logiciel libre ») est la seule et meilleure garantie qu’on
puisse légitimement exiger.
Signalons que son énorme volume de code source, son historique turbulent et le fait qu’il
fut rendu disponible brutalement et non peu à peu empêchent encore une bonne exploitation de ce corpus, mais les années aidant, les compétences s’affineront. Le butineur
Netscape Navigator (devenu Mozilla puis Firefox) a vécu les mêmes étapes : ce n’est pas
parce qu’un code source est disponible qu’il est magiquement maîtrisé et que les bonnes
volontés affluent pour y travailler. Les projets concurrents (notamment KOffice), construits
de manière plus rationnelle, pourraient rapidement rattraper et dépasser OOo.
Surtout, ce format n’est qu’apparemment binaire : OpenOffice.org travaille en XML,
format texte, mais comprime les documents pour occuper moins d’espace de stockage. Le
format de compression utilisé est ZIP. Le lecteur qui a la curiosité d’extraire ses documents
d’une archive OpenOffice.org découvre des fichiers au format texte, sans rupture de ligne
et à la syntaxe lourde, mais dont il devrait pouvoir se convaincre qu’ils sont potentiellement facilement exploitables par une autre application, a fortiori étant donné que le
schéma directeur de cette syntaxe est publié sur le site web d’OpenOffice.org.
R OpenOffice.org 2 efficace, « Accès libre », Sophie Gautier et al., présente en détail la
suite OpenOffice.org.
B http://www.openoffice.org/
B http://xml.openoffice.org/
AMUSANT Secrets transmis par vos
correspondants à leur insu
Le format binaire permet d’économiser de l’espace de stockage en exploitant
tout le spectre des valeurs possibles pour les octets : ainsi les images associeront
une couleur à chaque valeur. Les formats d’image qui n’utilisent que des caractères ASCII, tels que XPM, sont moins efficaces en termes de stockage et de
décodage par l’ordinateur, mais plus lisibles par l’être humain.
Les documents bureautiques, même dépourvus d’insertion de graphiques, ne
consistent pas simplement en du texte brut : ce sont des documents structurés et
les fichiers doivent bien embarquer une manière de coder les méta-informations, c’est-à-dire par exemple que tel groupe de mots est un sous-titre alors que
tel mot est en italique. Une manière « lisible » de procéder est d’utiliser un marquage en balises à la manière de HTML : c’est le cas par exemple des documents écrits en LaTeX ou XML. On y trouvera ainsi des choses comme
« (TitreNiveau2)Qu’est-ce qu’un format de fichier ? » pour représenter le titre
de la présente sous-section, à charge pour l’ordinateur de représenter cela correctement à l’écran et de l’imprimer en bonne et due forme. Ceci garantit la
pérennité du format et l’indépendance de l’utilisateur, qui pourra toujours
espérer comprendre et reprendre ses documents même en cas de défaillance de
l’éditeur de suites bureautiques.
Malheureusement, la suite MS-Office a opté pour un format binaire qui lui est
propre, non ou mal documenté, et qui change beaucoup à chaque nouvelle version. Même entre architectures différentes (PC et Mac), la compatibilité n’est
© Groupe Eyrolles, 2005
Même s’il est d’apparence absconse, un fichier
Word lu en tant que document texte peut être
décrypté dans une certaine mesure avec des outils
simples : une simple extraction des caractères
imprimables (caractères de texte et pas de contrôle) permet de reconstituer une grande partie du
texte du document, à l’exception des accents et de
la mise en page.
Dans son mode « sauvegarde rapide », MS-Word
se contente de transcrire sur le disque les opérations menées au clavier : insertions, destructions,
etc. Un destinataire fouineur pourra ainsi lire les
versions intermédiaires d’un document qu’on lui
fournit, voire accéder à des informations secrètes
dont il n’était pas supposé prendre connaissance !
La commande qui trahit tout (à saisir dans un
terminal) :
$ strings fichier.doc
On peut aussi, plus simplement, évoquer un éditeur de textes sur le fichier concerné (en lecture
seule ; toute modification aura probablement pour
effet de corrompre le document).
9
Accès libre – Débuter sous GNU/Linux
pas toujours assurée. Pour vous rendre compte de ce que cela signifie, ouvrez un
document MS-Office dans un éditeur de texte tel que wordpad ou edit et
comparez par exemple avec le source d’une page HTML pas trop chargée
(fonction accessible sous un menu du type Visualiser le code source de la plupart des navigateurs).
ANTIWORD Un lecteur libre
de format MS-Word
B http://www.winfield.demon.nl/
Évidemment, aucune application ne pourra comprendre un codage de données
différent du sien propre, ce qui explique tous ces drames de perte de documents
ou de mises en page. C’est aussi la raison pour laquelle il est impoli de transmettre à un correspondant, dont on n’est pas sûr qu’il travaille avec les mêmes
outils que nous en temps normal, un document codé dans un format de fichier
semi-secret tel que ceux de la suite MS-Office (même si, désormais, de plus en
plus de logiciels libres savent le décoder et l’interpréter – outre OOo, déjà mentionné à de nombreuses reprises, signalons antiword).
Compatibilité au niveau format de fichiers
La bureautique étant l’un des besoins les plus courants en matière d’informatique grand public, d’importants efforts d’étude, ingénierie à revers (reverse
engineering) et développement ont été mobilisés pour que d’autres applications
puissent interopérer avec les formats des suites MS-Office.
INTEROPÉRABILITÉ
Suites bureautiques compatibles
AbiWord, KOffice et OpenOffice.org sont respectivement disponibles aux adresses suivantes :
B http://www.abisource.com/
B http://www.koffice.org/
B http://www.openoffice.org/
Ces projets ont désormais abouti à des versions suffisamment compatibles et utilisables par l’utilisateur final : citons notamment AbiWord, KOffice et OpenOffice.org.
Ces produits permettent de reprendre des documents MS-Office sans perdre de
données ou d’informations de mise en page (ou très peu), voire d’en produire de
manière à ce qu’ils soient lisibles sous Windows. Ils sont de plus en plus testés
avec succès dans des situations professionnelles, dans des entreprises privées ou
des administrations.
En résumé…
L’émulation est un besoin naturel en informatique, suite aux changements
d’architecture ou de système. En soi, elle n’est pas difficile à appréhender, mais
dans la pratique, elle peut induire un ralentissement du fonctionnement qui
devra être compensé par les progrès technologiques survenus entre-temps,
notamment en vitesse du processeur. Elle existe à trois niveaux différents (processeur, système, applications), tous trois fort bien pourvus et représentés sur les
systèmes GNU/Linux.
Les nouvelles versions de logiciel parues proposent de nouvelles fonctionnalités,
prennent en charge de nouveaux matériels, etc. C’est pourquoi il est sain et
recommandé de mettre à jour régulièrement son système, d’autant plus que
cette opération est automatisée ou semi-automatisée dans la plupart des distributions. Même les émulateurs évoluent régulièrement et rapidement, et chaque
nouvelle version apporte son lot de corrections et de fonctions. N’hésitez donc
pas à tester la toute dernière si la vôtre pèche par telle ou telle carence.
10
© Groupe Eyrolles, 2005
Téléchargement