« Multiplate-forme » et « Multi-plateforme » redirigent ici. Pour les autres significations, voirMultiplateforme (homonymie).
Unlogiciel multiplateforme[1],[2] est unlogiciel conçu pour fonctionner sur plusieursplateformes informatiques.
De nombreuxlangages de programmation sont considérés être multiplateformes. En effet, il suffit de développer uncompilateur destiné à générer un code exécutable compréhensible par chacun desprocesseurs qu’on désire utiliser.
On aurait donc : un seul langage de programmation et un compilateur par type de processeur (des processeurs seraient considérés de même type s'ils sont identiquement structurés).
Par exemple, un logiciel conçu avec la bibliothèque graphiqueGTK+ sous Linux ne fonctionnera pas tel quel sous Windows, même si l’architecture est la même. Même si le langage est leC, le fonctionnement interne de la gestion de l’affichage est différent. On touche ici à la notion deportabilité d’un programme.
Le problème se pose rapidement aux développeurs : choisir une plateforme pour un programme revient à restreindre l’audience de celui-ci. Ce problème se complexifie d’autant plus que le secteur informatique tend à se diversifier, tant dans lesystème d'exploitation (Linux,Mac OS, etc.) que dans le matériel (GSM,PDA, etc.).
Pour permettre aux logiciels d’avoir le plus d’audience possible on peut recourir à trois techniques :
La vitesse d’exécution et l’intégration sont des facteurs importants dans beaucoup de développements. Il est alors nécessaire de passer par les langagescompilés. Les différents systèmes gérant différemment de nombreuses choses, on doit passer par des bibliothèques multiplateformes pour obtenir l’abstraction nécessaire à une programmation multiplateforme.
Un autre avantage des programmes compilés est que ceux-ci sont directement utilisables chez l’utilisateur final. En fournissant la bibliothèque avec le produit, il n’est pas nécessaire d’utiliser un interpréteur ou une machine virtuelle.
Il y a tout de même un inconvénient à l’utilisation de programmes compilés multiplateformes : la distribution. Il faut en effet compiler une version du programme pour chaque système d’exploitation et pour chaque architecture, et ceci à chaque version du programme.Dans le cas des logicielsopen source cela ne pose pas vraiment de problème car il suffit de fournir le moyen de compiler sur chaque système d’exploitation.
Parmi les bibliothèques multiplateformes les plus populaires, citonswxWidgets etQt. Ces deux bibliothèques fournissent unframework très complet qui permet de développer une application une fois pour de nombreux systèmes (Linux, Mac OS, Windows,Windows CE,Palm OS, etc.).
Comme approche novatrice dans ce type de langage, nous trouvonsHaxe, qui est unlogiciel libre et qui permet de générer du code source dans un langage cible plutôt que du code binaire. Sasyntaxe est du typeECMA, mais lemodèle objet - ouAPI, dépend de la plateforme cible. Par exemple, on peut programmer en Haxe pour générer duJavaScript; on utilise alors la syntaxe Haxe[3] mais on manipule les objets définis par JavaScript et exposés par lenavigateur web, comme l'objet window, les styles, etc. Haxe permet de profiter de toutes les notions utiles des langages modernes, comme l'héritage, lesstructures, les enums…
À l'heure actuelle, on peut générer avec Haxe du codeC++,ActionScript,JavaScript (pour les navigateurs ou pourNode.js),Java,C#,php. Lorsqu'on déploie une application codée en Haxe côtéclient et côtéserveur, on peut partager le modèle de l'application et on peut profiter du « Haxe Remoting »[4],[5] pour communiquer entre les deux parties de l'application.
Pour finir sur ce langage atypique, la communauté Haxe maintient un nombre impressionnant de bibliothèques[6]. Certaines permettent même de convertir le modèle objet d'une plateforme vers une autre au moment de la compilation. Ce qui a pour but de compiler un même code Haxe vers plusieurs langages cibles. La bibliothèque NME[7] permet de convertir un programme Haxe écrit pour Flash ActionScript en langage C++, pouriOS,android,Windows,linux,Mac OS. De même, la bibliothèque Cocktail[8] convertit le code Haxe JavaScript en code ActionScript, C++, etc. et permet de produire des applications natives et desapplications web enHTML/CSS avec Haxe JS pour l'interactivité et la logique. Ceci est déjà le but de produits commeAdobe PhoneGap, mais l'abstraction se fait au moment de la compilation donc il n'y a pas de baisse de performance (cf. paragraphe sur les langages interprétés), et Haxe permet toujours d'accéder auxAPI natives (en) de la plateforme cible pour ce qui ne fait pas partie du HTML.
Les langages interprétés proposent une autre approche du problème. De tels langages sont interprétés à chaque fois que le programme est utilisé, de ce fait si l’interpréteur existe pour une plateforme donnée, le programme fonctionnera sur cette plateforme.Néanmoins, l’utilisation n’est aussi facile que dans le cas où tout ce qui est utilisé dans le programme fait partie de bibliothèques standards. Pour utiliser des fonctions avancées, il faut se rabattre sur des bibliothèques multiplateformes (par exemple encorewxWidgets etQt).
La distribution de logiciels en langage interprété est beaucoup plus facile mais il faut souvent fournir l’interpréteur adéquat. Un autre problème est que les sources du logiciel sont fournies, cela peut poser des problèmes dans le cas où le code contient un procédé qui doit rester secret.
L’approche la plus récente pour créer des applications multiplateformes est l’utilisation de langages semi-interprétés. Ces langages sont compilés vers un code intermédiaire qui est interprété. Cette approche présente les mêmes avantages que les codes interprétés mais possède une plus grande vitesse d’exécution.
Le principal exemple est le langageJava deSun Microsystems. Ce langage est compilé enbytecode Java qui est ensuite interprété par unemachine virtuelle. Lebytecode peut être exécuté sur chaque plateforme où la machine virtuelle est implémentée.Le langage Java peut être compilé en code natif (par exemple avecGCJ) mais il perd alors sa portabilité.La distribution de Java pose le problème de la machine virtuelle, il faut distribuer celle-ci avec le logiciel, ce qui n’est pas toujours très facile.
Il existe plusieursframework permettant le développement des applications et logiciels multiplateformes, parmi ces frameworks nous trouvons :