Cet article s'adresse à un public qui ne serait peut-être pas très familier avec l'informatique et qui pourrait être curieux de mieux comprendre 1) ce qu'on entend par «logiciel» et 2) quelle est la nature du travail effectué par le développeur de logiciel.
L'ordinateur et son âme
Avant de tenter d'expliquer le logiciel libre, je devrai expliquer le logiciel tout court. Et pour expliquer ce qu'est le logiciel tout court, il me faut glisser un mot sur le matériel informatique. Ce sera très bref, mais j'espère tout de même instructif.
Les avancées dans la formalisation de la logique et des mathématiques de la fin du 19e et du début du 20e siècle sont mises au service des besoins militaires des grandes puissances durant la Deuxième Guerre mondiale : il faut concevoir des machines capables de chiffrer et de déchiffrer les communications qui doivent rester secrètes et tout mettre en œuvre pour déchiffrer celles de l'ennemi.
Le chiffrement et le déchiffrement des messages, opérations qui nécessitent d'effectuer à répétition de longs et savants calculs sur des masses d'information, ne peuvent se faire sans l'aide de machines, car les humains sont trop lents et font facilement des erreurs. Des machines à calculer existent depuis l'Antiquité, mais celles qui existent au début du 20e siècle ne visent qu'à automatiser certaines opérations mathématiques que l'on ne peut facilement changer et, par conséquent, elles ne répondent pas aux besoins de la guerre. Car pour des raisons de sécurité, les clés de chiffrement et de déchiffrement des messages doivent changer sur une base régulière. Et puisqu'il est inconcevable que l'on doive construire de nouvelles machines à chaque fois que les clés changent, il n'y a d'autre choix que de construire des machines auxquelles il soit possible de donner de nouveaux programmes de calculs.
Au commencement de la Deuxième Guerre mondiale, l'ordinateur, tel qu'on le connaît encore aujourd'hui dans son incarnation numérique et électronique, existe à peu près déjà sous une forme théorique. En effet, le baptême de la science informatique, c'est-à-dire la science du traitement automatique de l'information, remonte à 1936, année où le mathématicien britannique Alan Mathison Turing définit formellement le calculateur universel programmable[[Le calculateur est dit universel car il ne fait pas que calculer des opérations mathématiques sur des nombres, il effectue des calculs logiques et mathématiques sur différents types de données.]].
Cependant, les appareils électroniques de la période de la guerre, qui reposent sur l'usage de tubes électroniques pour la manipulation des signaux électriques, sont très « encombrants » pour employer un euphémisme. C'est l'invention du transistor[[Contraction de transconductance varistor.]], en 1947, qui permet la miniaturisation des machines[[La paternité du transistor est attribuée à John Bardeen, William Shockley et Walter Brattain, chercheurs chez Bell Laboratories.]]. La commercialisation des premiers ordinateurs construits sur le transistor débute au milieu des années 1950.
La miniaturisation du matériel informatique fait un nouveau bond formidable en 1958 avec le développement des circuits numériques, ces plaques de silicium sur lesquelles il est possible d'imprimer un nombre toujours croissant de transistors[[Le silicium est une substance semi-conductrice, c'est-à-dire que sa conductivité se situe quelque part à mi-chemin entre celle d'un conducteur et celle d'un isolant électrique. En manipulant la conductivité du silicium, il est possible de contrôler le flux des électrons qui le traverse.]]. Depuis cette époque, l'usage de l'ordinateur s'est considérablement répandu et de nos jours il est omniprésent au travail, à la maison, dans la voiture. Avec les téléphones dits «intelligents», c'est-à-dire des ordinateurs capables entre autres de faire office de téléphone, ils sont partout.
Le mot « ordinateur » évoque chez la plupart des gens l'image de ce mystérieux appareil domestique avec écran, clavier et souris qui semble être capable de faire un nombre incroyable de choses, dont la plus célèbre est peut-être celle de planter complètement, ce qui oblige son utilisateur à le redémarrer. Jamais auparavant une machine vendue sur le marché des consommateurs n'avait exhibé un tel comportement sans que son fabricant ne s'excuse et n'annonce son rappel massif à l'usine[[Quel est donc le problème du micro-ordinateur? Son problème est qu'il est totalement reprogrammable, qu'il peut accomplir un nombre indéfini de tâches et que son âme, le logiciel, est faillible car elle est fabriquée par l'humain. En effet, en raison de sa reprogrammabilité, en raison surtout des interactions qu'il autorise avec le monde extérieur, l'ordinateur peut être amené par son utilisateur à un état qui n'avait pas été prévu par les concepteurs des nombreux logiciels qui l'animent.]]...
Voilà pour la très brève histoire des machines qui automatisent le traitement de l'information. Mais où est le logiciel dans tout ça? J'y arrive.
Je parlerai maintenant des programmes que l'on assigne aux « calculateurs universels programmables » que sont les ordinateurs d'aujourd'hui. Le mot « logiciel » apparaît dans la langue française en 1972 pour traduire le mot anglais « software ». Qu'est-ce que le software au juste?
Dans la langue anglaise, le matériel informatique se nomme le « hardware » (la quincaillerie) et c'est par opposition à la partie matérielle de l'ordinateur qu'on a inventé le mot software qui désigne la partie immatérielle, celle qui commande à l'ordinateur de faire ce qu'il fait. Car l'ordinateur, même s'il est une bête de calcul, ne sait rien faire d'autre que de recevoir des instructions lui dictant très précisément ce qu'il doit faire, comment il doit le faire et sur quelles données il doit travailler.
Dans le contexte qui nous intéresse, le logiciel peut être compris comme étant à la fois :
-# la séquence d'instructions chargée en mémoire le temps d'être exécuté par l'ordinateur;
-# cette même séquence simplement stockée sur disque, en attente d'être utilisée;
-# le très important code source à l'origine même du logiciel exécutable;
Qu'est-ce donc que le code source? Là, nous entrons dans le vif du sujet. Le code source est le fruit du travail du développeur de logiciel, c'est une œuvre fonctionnelle[[L'expression est de Richard Stallman, le chercheur du MIT à l'origine du mouvement pour le logiciel libre.]] comprenant un ensemble de fichiers textes rédigés dans un langage lisible par l'être humain. C'est la partie du logiciel que les utilisateurs d'ordinateurs personnels n'avaient pas l'habitude de voir, durant les années 1970, 1980 et une bonne partie des années 1990, car en achetant un ordinateur ou des logiciels vendus en boîte au détail, les consommateurs ne recevaient (et ne reçoivent toujours) que la forme finale des logiciels, soit des fichiers binaires que seul l'ordinateur est censé lire. Pour les informaticiens et quelques autres curieux des technologies, le logiciel libre est venu changer tout ça au début des années 1990. Nous y reviendrons.
Pour mieux illustrer ce qu'est le code source et comment on le transforme en fichiers binaires qui contiennent les instructions et les données que l'ordinateur manipule directement, j'expliquerai maintenant les étapes du développement d'un logiciel.
Comment se développe le logiciel
Le travail du développeur de logiciel est de concevoir des programmes et de les réaliser au moyen d'un langage de programmation.
Qu'est-ce qu'un programme? Qu'est-ce qu'un langage de programmation? Le programme est une séquence d'instructions préparée en vue de l'accomplissement d'une tâche particulière. Il décrit, étape par étape, les opérations que l'ordinateur devra exécuter pour accomplir la tâche qui lui est assignée. Ces étapes sont rédigées sous une forme textuelle, dans une prose qui doit être conforme aux règles syntaxiques et sémantiques d'un langage de programmation. Les langages de programmation sont des langages formels permettant de spécifier la marche que doit suivre un ordinateur dans le traitement de l'information qui lui est fourni.
Le travail du développeur de logiciel comprend plusieurs étapes :
1. Après avoir fait l'analyse des besoins qui ont mené à la décision de concevoir une application ou un système informatisé, il doit effectuer une analyse du problème à résoudre. Si le domaine d'application est nouveau ou s'il implique des difficultés particulières, cette étape peut être accompagnée d'une période de recherche et développement.
L'analyse du problème à résoudre produit habituellement un document de spécifications fonctionnelles et techniques qui décrit de façon plus ou moins schématique ce que le logiciel devrait pouvoir accomplir s'il existait et l'environnement dont il aurait besoin pour bien fonctionner. Par exemple, disons que nous voulons concevoir une application pour le traitement du texte. Quelles fonctionnalités essentielles un tel logiciel doit-il posséder, à la fois du point de vue de son interaction avec l'utilisateur et de son interaction avec le système informatique sous-jacent? Dans notre exemple, le logiciel doit permettre à l'utilisateur de saisir le texte au moyen d'un clavier, de le mettre en forme à l'écran, de repérer les fautes d'orthographe, de le sauvegarder sur disque, de l'imprimer, etc. Pour en arriver à produire des spécifications fonctionnelles et techniques, les développeurs vont habituellement passer quelque temps à étudier la façon dont un travail s'effectue déjà, soit en l'absence de tout système informatique, ou au moyen du système informatique qu'ils sont chargés de remplacer ou d'améliorer.
2. La réalisation d'un logiciel qui offrira les fonctionnalités que les développeurs ont spécifiées par suite de l'analyse, passe par l'étape de la conception[[Par anglicisme, cette étape est parfois appelée «design». L'Office québécois de la langue française nous dit «En français, le mot design est réservé aux activités qui visent une harmonisation esthétique de l'environnement humain à partir des formes données aux productions industrielles. Il ne faut pas l'étendre à toutes les activités créatrices.»]]. Par analogie, on peut comparer cette étape à celle de l'architecte qui dessine les plans d'un bâtiment. Lors de cette phase du développement, ce qui n'étaient que des spécifications biens abstraites prennent une forme particulière. On modélise les structures principales du logiciel, soit habituellement sa structure de données, les différents cas d'utilisation, les composants, l'interface de l'utilisateur, etc.
3. Après la conception du logiciel à l'aide de modèles abstraits, les développeurs passent à l'implémentation. Nous revoici dans le vif du sujet : la rédaction, par les développeurs, des séquences d'instructions d'un logiciel, qui sont contenues dans les nombreux fichiers du code source. Les fichiers du code source sont habituellement rédigés dans un seul et même langage de programmation, par exemple PHP. Les fichiers .php du code source ne sont pas compris tels quels par l'ordinateur. Un logiciel nommé interpréteur est utilisé pour traduire les fichiers de code source PHP en séquences d'instructions binaires en vue du traitement automatique par l'ordinateur. SPIP, le logiciel libre d'édition et de publication pour le Web utilisé par Vigile.net a par exemple été écrit en langage PHP.
Voici, à titre d'exemple, le fichier public.php[[C'est à dessein que j'ai choisi un fichier de code source écrit par des développeurs francophones suffisamment zélés pour employer leur propre langue au travail. Ce sera prétexte pour aborder, dans un prochain article, le sujet tabou des libertés linguistiques dans l'industrie informatique en général et au Québec en particulier.]] qui est exécuté par le serveur de Vigile.net afin de produire la page Web que vous consultez à l'instant même à l'écran :
Voilà en somme comment se développe un logiciel.
Mais le développement du logiciel s'effectue en société, pour des fins sociales. Comment a-t-on organisé le développement du logiciel depuis son apparition? Comment le finance-t-on? Quelle utilisation l'humain a-t-il fait du logiciel? C'est afin de répondre à ces questions, qui intéressent tout particulièrement la cause du logiciel libre, que dans le prochain article, je ferai l'esquisse de l'histoire du développement du logiciel des années 1950 jusqu'à la formation du mouvement pour le logiciel libre.
Pour en savoir plus
Pour ceux et celles qui aimeraient en savoir plus sur l'histoire de la logique, des maths et de la science informatique, voici quelques ressources en ligne :
-* La logique dans tous ses états : Histoire de la logique, cours de Geneviève Choquette, prof de philo de l'UQAM
-* Logique et mathématiques, cours de Michel Pérignon, prof de philo, site PhiloNet
-* L'histoire des technologies informatiques et quelques unes de leurs applications en éducation, Pierre Bordeleau, prof de l'Université de Montréal
Notes
[1] Le calculateur est dit universel car il ne fait pas que calculer des opérations mathématiques sur des nombres, il effectue des calculs logiques et mathématiques sur différents types de données.
[2] Contraction de transconductance varistor.
[3] La paternité du transistor est attribuée à John Bardeen, William Shockley et Walter Brattain, chercheurs chez Bell Laboratories.
[4] Le silicium est une substance semi-conductrice, c’est-à-dire que sa conductivité se situe quelque part à mi-chemin entre celle d’un conducteur et celle d’un isolant électrique. En manipulant la conductivité du silicium, il est possible de contrôler le flux des électrons qui le traverse.
[5] Quel est donc le problème du micro-ordinateur ? Son problème est qu’il est totalement reprogrammable, qu’il peut accomplir un nombre indéfini de tâches et que son âme, le logiciel, est faillible car elle est fabriquée par l’humain. En effet, en raison de sa reprogrammabilité, en raison surtout des interactions qu’il autorise avec le monde extérieur, l’ordinateur peut être amené par son utilisateur à un état qui n’avait pas été prévu par les concepteurs des nombreux logiciels qui l’animent.
[6] L’expression est de Richard Stallman, le chercheur du MIT à l’origine du mouvement pour le logiciel libre.
[7] Par anglicisme, cette étape est parfois appelée « design ». L’Office québécois de la langue française nous dit « En français, le mot design est réservé aux activités qui visent une harmonisation esthétique de l’environnement humain à partir des formes données aux productions industrielles. Il ne faut pas l’étendre à toutes les activités créatrices. »
[8] C’est à dessein que j’ai choisi un fichier de code source écrit par des développeurs francophones suffisamment zélés pour employer leur propre langue au travail. Ce sera prétexte pour aborder, dans un prochain article, le sujet tabou des libertés linguistiques dans l’industrie informatique en général et au Québec en particulier.
Laissez un commentaire Votre adresse courriel ne sera pas publiée.
Veuillez vous connecter afin de laisser un commentaire.
1 commentaire
Mathieu Gauthier-Pilote Répondre
10 février 2012« ... consultez à l’instant même à l’écran : »
Il manque un morceau ici. J'ai déjà contacté Vigile.net pour que le contenu du fichier public.php soit réinséré dans le corps du texte.
En attendant, vous pouvez consulter le code source à l'adresse suivante :
http://core.spip.org/projects/spip/repository/entry/spip/ecrire/public.php