É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