Des souris et des hommes
et des femmes et des chats, bien sûr.


John Steinbeck
On ne va pas vous parler ici du chef-d'oeuvre de John Steinbeck à qui le titre fait un clin d'oeil. Il va être question plus précisément de ce qui existe entre nos ordinateurs considérés du point de vue matériel, et nos logiciels.

Il va bien falloir qu'à un moment ou à un autre quelqu'un ou quelque chose fasse en sorte que l'ordinateur exécute un programme. Un "événement" va devoir se produire pour que cela soit le cas. Ce sont ces "événements" dont il va être question ici.

IBM 704
Pour fixer les idées, voyons de plus près de quoi est composé un ordinateur, du moins dans les grandes lignes.

Vous avez sans doute accès à un PC et à un smartphone. Vous n'avez peut-être pas chez vous un IBM 704 de 1954, mais avec un peu d'imagination et une page Wikipédia ça devrait aller.

À partir du schéma en forme d'empreinte de patte de chat qui vous est proposé, vous allez pouvoir identifier les composants de ces trois machines, et constater qu'à part quelques "petits détails", leur architecture générale n'a pas changé.

Schéma en patte de chat d'un couple ordinateur/utilisateur.
Notez le sens des interactions.
 Composants   IBM 704   PC   Smartphone 
 Entrées   Lecteur de cartes, panneau de commandes   Clavier, souris, microphone...   Vitre tactile, boutons, capteurs... 
 Utilisateur   Équipe professionnelle   Individu, administrateur...   Individu 
 Processeur   Unité centrale   Microprocesseur INTEL, AMD...   Microprocesseur ARM... 
 Sorties   Imprimante, cartes, bandes perforées ou magnétiques...   Écran, haut-parleurs, disques durs...   Écran, haut-parleurs, mémoires...  
 Système d'exploitation   GM-NAA I/O   DOS, Windows, Linux...   Androïd, iOS... 
 Données   Cartes perforées, mémoires à tores magnétiques...   Mémoire interne, disques durs, clés USB, disques optiques...   Mémoire interne, cartes SD... 
 Applications   Programmes FORTRAN, LISP    Programmes C, .Net, Python, Scripts...    Applis Objective-C, Java... 


Les complotistes auront à coeur de déduire du schéma que ce sont sans aucun doute les chats qui ont conçu les ordinateurs et poussé les humains à les construire pour assurer la promotion des chatons mignons sur les réseaux sociaux et ainsi perpétuer leur espèce. Passons, ce n'est pas notre propos.

Vous avez remarqué que beaucoup d'informations passent par le système d'exploitation. Si le processeur est le maître pour traiter des calculs et de la logique, le système d'exploitation est le maître pour faire communiquer tous les composants entre eux. Voyons ça de plus près :

Batchjob
Au temps des cartes perforées, les utilisateurs ont trouvé plus pratique, pour éviter des manipulations, de faire exécuter automatiquement par leur ordinateur un certain nombre de tâches les unes après les autres. Cela s'est appelé batch processing ou en français traitement par lot.

Voici une illustration d'un "Batchjob". On y trouve successivement une carte $JOB contenant entre autres le nom du programmeur, le compte à débiter..., une carte $FORTRAN pour charger le compilateur, le programme en FORTRAN, une carte $LOAD pour charger le programme, une carte $RUN pour exécuter le programme, les données du programme et une carte $END pour mettre fin à l'exécution du programme.

Les cartes $xxx sont donc des instructions données au système d'exploitation qui saura par exemple, en plus de faire exécuter les tâches, nettoyer la mémoire des données devenues inutiles une fois la tâche réalisée.

L'existence de ces instructions donne aux utilisateurs la possibilité d'interagir directement avec la machine, ce qui semble compliqué à faire avec les panneaux de commandes existant à l'époque.

Le centre de contrôle de tir N°2 deux minutes et demie après le lancement d'Apollo 12 le 14 novembre 1969.
Les panneaux de commandes sont très loin des écrans-claviers actuels.


Au début des années 1960, les premiers claviers informatiques apparaissent, en même temps que les premiers systèmes d'exploitation utilisés en lignes de commandes. Des instructions pourront être données directement à l'ordinateur à l'aide du clavier, ou continuer à être traitées par lot via un script, le tout passant par un "interpréteur de commandes".

Logo du Bourne Again Shell
Les systèmes d'exploitation vont devenir alors le moyen privilégié pour gérer un ordinateur. Fortran Monitor System (FMS), CTSS, MULTICS, UNIX se sont alors succédé. De nos jours, la plupart des systèmes d'exploitation, Windows mis à part, sont des dérivés d'UNIX.

Actuellement, l'interpréteur de commande le plus répandu pour UNIX, également appelé Shell UNIX, est le Bourne Again Shell autrement dit "bash". Ce dernier est disponible pour des systèmes très répandus comme Linux pour les PC et macOS pour la gamme d'ordinateurs Apple.

La marionnette de Bill Gates peut se frotter les mains.
Et Microsoft dans tout ça ? Évidemment, bien que sous Windows les interfaces graphiques soient maintenant privilégiées, le système le plus utilisé pour les ordinateurs personnels, hors tablettes et smartphones, possède un interpréteur de commandes et supporte des fichiers script de traitement par lots. Il n'avait même que ça à l'origine. En voici un exemple sous MS-DOS :


REM Les lignes commençant par REM sont de simples
REM remarques, elles ne sont pas exécutées
REM @echo off empêche l'affichage des commandes...
REM ...y compris @echo off
@echo off
REM chcp modifie l'encodage des caractères
chcp 28591
REM dir crée la liste des dossiers et des fichiers
REM présents dans C:\Program Files et le signe >
REM l'envoie dans le fichier list.txt
REM dans le dossier Documents de l'utilisateur
dir "C:\Program Files" > C:\Users\%USERNAME%\Documents\list.txt
REM cette dernière commande affiche le fichier avec NotePad
notepad C:\Users\%USERNAME%\Documents\list.txt


Mais revenons au début de l'histoire. Gary Kildall, fondateur de Digital Research, crée en 1974 CP/M (Control Program/Monitor ou /Microcomputer), un système d'exploitation différent de la famille UNIX. Ce système sera utilisé par de nombreux ordinateurs personnels (Amstrad, Commodore, TRS-80, Osborne 1, ZX Spectrum...).

Par ailleurs, Seattle Computer Products (SCP) fabriquant d'ordinateurs basés sur le processeur Intel 8086 développe QDOS, largement inspiré de CP/M.

IBM PC 5150
Quand IBM décide de lancer son PC basé sur le microprocesseur 8088 d'Intel (une version économique du 8086), c'est finalement Microsoft qui, après avoir racheté et modifié QDOS, propose son DOS (PC-DOS et MS-DOS) et obtiendra un quasi-monopole pour la fourniture du système d'exploitation.

Vous pourrez lire tous les détails de cette histoire rocambolesque dans les liens proposés dans "En savoir plus" et apprendre comment, en partant d'un banal système d'exploitation largement inspiré de l'existant, Bill Gates est devenu l'homme le plus riche du monde.

MS-DOS évoluera, mais restera longtemps le système d'exploitation des PC, y compris avec les premières versions de Windows qui ne seront guère autre chose que des applications tournant sous DOS.

En attendant la tâche cron...
Il faudra attendre 1993 et les premières versions de Windows NT développées par David Neil Cutler, ancien concepteur du système d'exploitation VMS chez Digital Equipment Corporation recruté par Microsoft en 1988, pour que le système change vraiment et ne se base plus sur le DOS. Windows XP sorti en 2001 en sera la première version grand public. Sous Windows 10, même si l'équivalent des commandes DOS est toujours disponible avec cmd.exe, la gestion en ligne de commande ou en Batch se fait également avec PowerShell.

Pendant ce temps là, pour le monde UNIX, les choses évoluent. De nouveaux shells deviennent disponibles comme Z Shell (zsh) plus complet et Almquist shell (ash), plus concis et plus rapide, convenant mieux pour les systèmes d'exploitation embarqués.

Donc, bien que les interfaces graphiques soient de plus en plus privilégiées, on peut toujours administrer une machine par des lignes de commandes et des traitements par lot. On peut même rendre certaines tâches automatiques en les programmant au démarrage de la machine ou à des heures et des fréquences précises au moyen des tâches CRON dans le monde UNIX ou en passant par le Planificateur de tâches (taskschd.msc) sous Windows. Il est aussi possible de créer des tâches d'administration avec d'autres langages, Perl et Python par exemple. Futurs administrateurs système, vous voilà prévenus !

Résumons-nous : En 1950 on utilisait un seul paquet de cartes perforées à la fois pour commander un ordinateur, puis plusieurs cartes dites "job" traitées par un embryon de système d'exploitation puis des fichiers de traitement par lot, gérés par des systèmes plus élaborés. Pour l'instant, les seuls évènements dont on a parlé sont le lancement de fichiers batch et quelques lignes de commandes tapées au clavier.

Tout va changer à la fin des années 1970. L'utilisation des claviers, en combinaison avec les sorties sur écran qui commencent à être de plus en plus performantes, permet des interactions de plus en plus nombreuses avec des réponses de plus en plus rapides. Les premières interfaces graphiques sortent des labos (le Star de Xerox, le Lisa d'Apple...) et surtout, la reine des dispositifs de pointage va... pointer son museau.

SRI Computer Mouse
Douglas Engelbart, chercheur au Stanford Research Institute (SRI) dépose en 1967 un brevet pour une souris, une boîte en bois munie de deux roues en métal et d'un bouton. Le 9 décembre 1968, il en réalise une démonstration publique. Apple en acquerra une licence pour une somme 40.000 $ environ et la commercialisera avec l'Apple Lisa en 1983.

Souris sans fil connectée en Bluetooth.

Cinquante ans après sa création, la plupart du temps débarrassée de son fil, elle continue à glisser avec grâce sur la plupart des bureaux.

Au cours des décennies 1980/1990, le marché des ordinateurs grand public se développe. Ces nouveaux utilisateurs ne vont pas se contenter de lancer des programmes et d'attendre patiemment qu'ils se terminent, il va falloir que la machine interagisse avec eux à un rythme beaucoup plus élevé. Par ailleurs, le "bureau" devra proposer suffisamment d'applications et certains utilisateurs, sinon tous, vont vouloir jouer à des jeux de plus en plus réalistes.

Les paradigmes de programmation proposés jusqu'ici ne sont pas conçus pour répondre ainsi à un grand nombre de sollicitations survenant de façon aléatoire du point de vue de la machine. Il va falloir faire quelque chose. Un nouveau paradigme va voir le jour : La programmation événementielle.

Événement souris sur une simulation d'un Rubik's cube.
La programmation respectant ce paradigme devra réagir aux différents événements qui peuvent se produire, par exemple un mouvement de souris, l'appui sur une touche du clavier, une action sur un joystick, le changement d'état d'un capteur, l'appui sur un écran tactile, etc.

Le code devra donc surveiller constamment, dans une boucle de programme, les composants susceptibles d'envoyer des notifications d'événements pendant qu'une autre partie gérera ces notifications.

Si la quasi-totalité des langages est susceptible de supporter la programmation événementielle, certains langages de haut niveau comme Java sont particulièrement adaptés à ce paradigme.

En java, il existe en particulier deux classes, java.util.EventObject et java.util.EventListener, à partir desquelles on peut déclarer de nouvelles classes, par exemple MouseEvent (évènements souris), qui enverra les notifications concernant les évènements liés à la souris et MouseListener (écouteur souris) qui recevra ces notifications et les traitera.

Entre les interactions minimalistes des années 1950 et les échanges actuellement quasi constants entre l'utilisateur et sa machine, les progrès sont fabuleux. Et ce n'est pas fini puisque dans le prochain thème, l'utilisateur va interagir simultanément avec de nombreuses machines distantes à des vitesses se comptant en millions de bits par seconde.
Page précédente - Sommaire - En savoir plus