Tech:Lumière sur les niveaux de portabilité de logiciels
La portabilité d'un programme peut se faire à plusieurs niveaux. Pour
l'instant, les bibliothèques logicielles telle que POSIX ou Qt se
limitent à la portabilité au niveau du code source. Mais il existe
d'autre niveaux, comme celui au niveau du bytecode ou encore, mais plus rare, au niveau de l'exécutable.
La portabilité au niveau du code source nécessite la disponibilité de
l'interface de programmation sur tous les environnements d'exécution
cibles. À partir de cela, il suffit de ré-compiler le code source avec les bonnes bibliothèques.
La portabilité au niveau du code source est également valable avec
les langages interprétés, où cette fois-ci, c'est la disponibilité de
l'interpréteur et de sa bibliothèque standard qui est nécessaire.
Le bytecode est une sorte de code intermédiaire, que l'on peut
considérer comme « à moitié compilé » ou « pseudo-compilé ». Ce code
n'est pas destiné à être exécuté directement par le système
d'exploitation comme tout programme compilé. C'est une machine virtuelle
qui est chargée de cela. Son but est de servir de couche entre le
programme et le système d'exploitation, rendant ainsi parfaitement
portable tout programme, à condition qu'il existe une machine virtuelle
sur le système cible.
Le principal représentant est Java, dont la machine virtuelle est disponible, sur les principaux systèmes d'exploitation (Windows, Linux, Mac OS, FreeBSD ou encore Solaris).
Le langage de programmation de Microsoft, C# dispose également d'une machine virtuelle, mais il est destiné à fonctionner uniquement sur Windows. Cependant, le projet Mono a pour objectif d'implémenter un telle machine virtuelle et ses bibliothèques logicielles.
Ce niveau de portabilité est notamment offert par le format d'exécutable Universal binaries d'Apple, ou des applications s'exécutent indifféremment sur architecture PowerPC et x86, mais uniquement sur Mac OS X
Comme on l'a vu, la notion d'environnement d'exécution pour un
système d'exploitation désigne l'architecture matérielle sur laquelle il
s'exécute. Le niveau de portabilité d'un système dépend donc de sa
capacité à s'abstraire des spécificités du matériel en ayant un minimum
de code dépendant du matériel. À ce niveau, la grande difficulté est
d'avoir une collection de pilotes de périphériques assez étendue pour que l'utilisation du système d'exploitation soit intéressante.
Le système le plus portable est certainement NetBSD, disponible sur plus de cinquante architectures matérielles (allant du superordinateur au grille-pain).
Dans le domaine de la téléphonie mobile, une version pour mobiles du
langage Java, J2ME - Midp, assure aux jeux et applications une certaine
portabilité. Elle ne résout pas tous les problèmes spécifiques aux
centaines de téléphones mobiles disponibles, à leurs caractéristiques,
leurs firmwares et leurs bugs. Le portage, c’est-à-dire la ré-écriture
de l'application pour chaque téléphone différent, reste nécessaire en
raison de cette hétérogénéité.
Comments