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.