L'informatique, c'est pas magique
La fonction d'un ordinateur est d'exécuter des programmes (ou logiciels), dont la finalité est de traiter des données ou des informations. c'est pourquoi on appelle ces programmes des logiciels d'application (par opposition aux logiciels système
, qui réalisent les fonctions du système d'exploitation ou des tâches auxiliaires).
Cela recouvre tout aussi bien les programmes de calcul développés par un chercheur dans une université, les progiciels
utilisés par divers professionnels (progiciel
est la contraction de produit
et logiciel
désignant un logiciel commercial conçu pour une application spécifique, comme par exemple un logiciel de suivi des patients pour un cabinet dentaire), que les outils bureautiques, les logiciels de traitement d'images, les jeux vidéo, ou le navigateur Internet de votre ordinateur.
Tout donc est programme, de quoi un programme est-il fait? comment peut-on le faire tourner sur diverses machines?
Tout d'abord le programme existe sous forme de code source, écrit par le programmeur dans un langage plus ou moins évolué (ex. pêle-mêle : Pascal, Fortran, C, Java, Ada, assembleur).
La forme sous laquelle on l'utilise est le programme exécutable : traduit par un programme particulier - le compilateur - depuis le code source vers le langage machine qui est compris par le processeur qui va l'exécuter.
Mais attention : le langage machine n'est pas le même d'un processeur à l'autre (ex. il est différent pour une puce Intel Pentium dans un PC, pour une puce Motorola G4 dans un Mac, pour une puce Motorola SPARC/RISK dans une station de travail Sun).
De la même manière, le format du fichier exécutable n'est pas le même d'un OS à l'autre, il sera donc nécessaire de recompiler le programme à partir du code source, pour pouvoir l'utiliser sur une machine différente ou sur un OS différent.
Qui plus est d'une machine à l'autre (PC vs Mac par exemple), les périphériques ne sont pas les mêmes ou ne s'interfacent pas de la même manière : l'application s'appuie sur l'OS y accéder et donc dépend du couple machine + OS (que l'on désigne souvent par le terme de plateforme). Porter une application d'une plateforme vers une autre, peut donc nécessiter un effort de réécriture de certaines parties.
Néanmoins, la portabilité peut être facilitée par l'outillage : utilisation de langages de programmation de haut niveau et standardisés, de bibliothèques portées d'une plateforme à l'autre, ou d'un langage intermédiaire et sa machine virtuelle comme Java.
Bien sûr, ces considérations sur la portabilité ne s'adressent pas à l'utilisateur lambda, qui n'a pas a priori les compétences pour le faire, qui en a rarement le besoin ou l'envie, et qui n'en aura généralement pas la possibilité, pour les raisons suivantes.
En effet, si le logiciel est la propriété d'une entreprise ou d'un organisme qui souhaite s'en assurer le contrôle et l'exploitation exclusifs, seules des versions exécutables du logiciel seront diffusées, et ce uniquement pour les plateformes que le propriétaire aura choisies. En deux mots, si le logiciel qui vous intéresse est diffusé sous forme d'un exécutable pour PC sous Windows, vous ne pourrez pas vous en servir sur un Mac ni même sur un PC sous Linux.
Par contre, il existe des logiciels qui sont diffusés sous forme de code source, que l'utilisateur averti peut donc recompiler et/ou adapter pour le faire tourner sur la plateforme de son choix. Et s'il n'en a pas les compétences, il peut toujours engager quelqu'un pour le faire. Ces possibilités sont généralement associées aux notions de logiciels libre et de source ouverte
(open source), qui recouvrent des réalités différentes, des droits différents, dont on reparlera dans une rubrique dédiée.