Histoire de l`Informatique

Transcription

Histoire de l`Informatique
Histoire de l’Informatique
Enseignant: . Bullynck
[email protected]
1
Dans l’histoire de l’ordinateur on peut généralement distinguer quatre ou
cinq phases (selon la relation entre homme et machine1 ). (I) D’abord entre 1944
et 1952, le temps des premières machines où la technologie doit encore être
mise au point. (II) Puis entre 1952 et 1960, commercialisation (IBM et les 7
nains) et temps des “mainframes”, grandes machines auxquels on devait apporter son “programme” et un opérateur (d’IBM) mettait le programme sur
la machine. (III) A partir de 1960 jusqu’en 1977, une deuxième sorte d’ordinateurs devient accessible (à côté des mainframes), les ‘minicomputers’ (p.ex.
PDP), moins chers et sans l’intermédiaire d’un opérateur. C’est aussi le temps
de ‘time-sharing’ (partage de temps), on peut donc résumer que l’ordinateur
devient plus accessible, bienque seulement dans certains environnements (industrie, universités). (IV) Finalement, dès les années 1980, l’ordinateur personnel est développé, l’ordinateur devient un produit de masse et peut être acheté
par un individu. Après l’ordinateur personnel, on peut encore distinguer certaines développements importants, comme une transition de la machine même
(hardware) vers les logiciels (software), plus tard encore vers les applications
sur le Web. Si on poursuit l’idée, on peut encore ajouter une cinquième phase
(V), où l’ordinateur disparaı̂trait, ou plutôt, devient un instrument de communication qui connecte entre logiciels qui se trouvent sur des serveurs (‘cloud
computing’). Deux développements généraux peuvent être identifiés dans cette
suite de phases : D’abord, l’ordinateur devient de plus en plus vite, bon marché,
personnel et ‘démocratisé’ ; puis, l’ordinateur se transforme d’un instrument de
calcul en instrument de communication.
1 On pourrait aussi distinguer des phases selon hardware, évolution technologique, il y aurait
des différences.
2
Table des matières
1 Préhistoires de l’ordinateur (1900–1945)
1.1 Equipes de calcul dans les bureaux, 1900–1940 . . . . . . . . . .
1.2 L’art et la science des relais et les précurseurs électro-mécaniques
de l’ordinateur . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Les machines Bell . . . . . . . . . . . . . . . . . . . . . .
1.2.2 La machine d’Atanasoff-Berry . . . . . . . . . . . . . . . .
1.2.3 Automatic sequence controlled calculator . . . . . . . . .
1.2.4 Les machines de Zuse. . . . . . . . . . . . . . . . . . . . .
1.3 L’apport de la cryptologie pendant la deuxième Guerre Mondiale
(1933–1945) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.1 La communication télégraphique en code Morse . . . . . .
1.3.2 La communication par teleprinter . . . . . . . . . . . . . .
5
5
8
10
10
11
12
12
13
15
2 ENIAC (1946-1949), ordinateur de transition
2.1 Le projet de Mauchly et Eckert . . . . . . . . . . . . . . . . . . .
2.2 L’architecture de l’ENIAC . . . . . . . . . . . . . . . . . . . . . .
2.3 La programmation de l’ENIAC (avant 1947) . . . . . . . . . . . .
2.3.1 Itération et contrôle de la séquence des ‘blocks’ d’opérations
2.3.2 Le concept d’un programme vide (dummy program) et les
conditionnels . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.3 Comparaison avec d’autres machines contemporaines . . .
2.4 Un système de programmation pour l’ENIAC . . . . . . . . . . .
2.4.1 L’idée de ‘stored programming’ sur l’ENIAC . . . . . . .
2.4.2 Le vocabulaire mis sur l’ENIAC . . . . . . . . . . . . . .
16
16
16
17
17
3 Les années pionnières de l’ordinateur (1946–1954)
3.1 La machine à la von Neumann : EDVAC . . . . . . .
3.2 Les descendants de ASCC et EDVAC dans le monde
3.2.1 Aux Etats-Unis . . . . . . . . . . . . . . . . .
3.2.2 En Angleterre . . . . . . . . . . . . . . . . . .
3.2.3 Autres Pays . . . . . . . . . . . . . . . . . . .
3.3 Qui est-ce qui est le premier ordinateur ? . . . . . . .
3.4 Problèmes de programmation et premiers essais . . .
19
19
21
21
21
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
24
25
25
26
27
27
4 La diversification des ordinateurs (1954–1964)
4.1 Innovations technologiques . . . . . . . . . . . . . . . . . . . . .
4.2 La diversification des ordinateurs, le tournant 1960 (1959–1964)
4.3 Diversification des langages de programmation 1954–1964 . . .
4.3.1 Premières langues (autour de 1954) . . . . . . . . . . . .
4.3.2 Deuxième phase : Différenciation (1955–1965) . . . . . .
.
.
.
.
.
31
31
32
40
40
43
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5 La naissance d’une discipline : De la cybernétique à l’informatique
5.1 La cybernétique . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 La naissance de l’informatique . . . . . . . . . . . . . . . . . . . .
5.2.1 Les circuits électroniques et la logique . . . . . . . . . . .
5.2.2 Comment la machine de Turing (modèle de calculabilité)
est devenu un concept central en informatique . . . . . .
5.2.3 Programmation comme une discipline scientifique : L’apport du mouvement d’ALGOL . . . . . . . . . . . . . . .
45
45
46
46
47
50
6 L’époque de “time-sharing”
52
6.1 Batch-processing vs. time-sharing . . . . . . . . . . . . . . . . . . 52
6.2 Time-sharing : Changements en software et hardware . . . . . . . 53
6.3 Systèmes d’exploitation . . . . . . . . . . . . . . . . . . . . . . . 55
7 L’ordinateur personnel
60
7.1 “Real-time” – le projet Whirlwind et ses descendants . . . . . . . 60
7.2 La naissance de l’ordinateur personnel . . . . . . . . . . . . . . . 61
7.2.1 Visions et idées sur le futur de l’ordinateur en 1965 . . . . 61
7.2.2 Xerox PARC . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.3 Commercialisation et prolifération de l’ordinateur personnel ou
PC 1977–1990 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8 Le réseau des ordinateurs
8.1 Les communications après la seconde Guerre Mondiale
8.2 Réseaux globaux d’ordinateurs 1970–... . . . . . . . . .
8.2.1 Arpanet . . . . . . . . . . . . . . . . . . . . . .
8.2.2 Protocoles . . . . . . . . . . . . . . . . . . . . .
8.2.3 Commercialisation et prolifération . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
68
68
69
69
70
71
9 Futurs et/ou sublimations de l’ordinateur
9.1 Matérialisations futures de l’ordinateur . . . . . . . . . .
9.1.1 La loi de Moore . . . . . . . . . . . . . . . . . . .
9.1.2 Hybrid computing . . . . . . . . . . . . . . . . .
9.1.3 DNA computing et molecular computing . . . . .
9.2 Sublimations de l’ordinateur . . . . . . . . . . . . . . . .
9.2.1 Ambient Computing . . . . . . . . . . . . . . . .
9.2.2 Cloud Computing . . . . . . . . . . . . . . . . .
9.2.3 La fin de la machine universelle ? . . . . . . . . .
9.3 Discussions légales, actuelles et futures, sur l’ordinateur
9.3.1 Le patentage des algorithmes . . . . . . . . . . .
9.3.2 Public et privé . . . . . . . . . . . . . . . . . . .
9.3.3 Transparence et opacité du monde virtuel . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
74
74
74
74
75
75
75
76
78
79
79
79
80
4
1
Préhistoires de l’ordinateur (1900–1945)
Les origines de l’ordinateur moderne sont multiples, elles viennent de contextes
différents. En simplifiant quelque peu, trois contextes importants sont à distinguer :
1. Le calcul scientifique ;
2. L’administration (de l’état et des entreprises) ;
3. La cryptographie (enchiffrement et déchiffrement des communications)
Dans chacun de ces contextes, des machines à calculer, à ordonner, sont développées,
qui deviendront ultérieurement les précurseurs de l’ordinateur moderne. L’ordinateur moderne est né à l’issue d’une convergence de machines dans ces trois
contextes, convergence accélérée par la Deuxième Guerre Mondiale.
1.1
Equipes de calcul dans les bureaux, 1900–1940
Avant l’ordinateur, il y avait les calculateurs, ou en Anglais, avant le ‘computer’, il y avait le ‘computor’ humain. Dès le début du 20 siècle plusieurs bureaux
de calcul s’organisent qui font des calculs sur commande, ou, quand il s’agit de
grandes entreprises ou des universités, qui travaillent exclusivement pour une
entreprise, resp. université. Les plus importants clients sont des institutions nationales (scientifiques, militaires, administratives...), mais aussi des laboratoires
industrielles (comme Bell, DuPont, Telefunken...). Dans ces bureaux, ce sont
surtout des femmes (aux Etats-Unis aussi des noirs) qui font le travail de calcul, parce qu’elles sont moins chères à payer. Pour leur aider dans ces calculs,
plusieurs instruments de calcul étaient disponibles : Calculatrices mécaniques,
tables (graphiques), et plus tard les machines de Hollerith avec les cartes perforées (‘punched cards’).
Les versions commerciales de calculatrices Des machines et des tables à
calculer avaient déjà été développées au 17e siècle (p.ex. Schickard, Pascal, Leibniz...), mais leur construction, en particulier pour la réalisation des mécanismes
de multiplication et division, était difficile ou impossible à cause des limites
techniques de l’époque. A l’âge de l’industrialisation (19e siècle), la technologie
à construire des machines complexes et subtiles (mais toujours mécaniques, mû
par la vapeur, force manuelle etc.) avait atteint la presque perfection. Cela rendait possible de construire des calculatrices qui pouvaient effectuer les quatre
opérations arithmétiques (+, -, ×, :) et de les produire comme produit de masse.
Sur ces machines, il faut taper le nombre à ajouter, soustraire, multiplier ou diviser, effecteur une manipulation à la main, et la machine calcule le résultat.
Ce sont ces machines qui sont utilisées dans tous les bureaux de calcul où
des manuels d’utilisation sont écrits pour leur usage spécifique. Les calculatrices ensemble avec des tables numériques faisait que les bureaux de calcul
étaient bien efficaces dans leur travail. Dans ce contexte, une connaissance extensive et importante (‘know how’) sur des méthodes numériques (algorithmes)
et l’organisation des calculs (la séquence, la partition des tâches...) s’ammasse,
5
Fig. 1 – La calculatrice de Brunsviga et une publicité qui utilise la tête de Gauss
connaissance qui plus tard, avec l’avènement de l’ordinateur digital après la 2e
Guerre Mondiale, sera la base pour l’analyse numérique, ‘nouveau’ domaine des
mathématiques.
Les Analyseurs différentiels Dans les bureaux pour le calcul scientifique,
il s’agissait surtout de calculer des solutions approximatives pour les équations
différentielles, comme p.ex. les équations qui gouvernent les problèmes balistiques, les problèmes d’aérodynamique etc. Ces problèmes ont une importance
pratique, la balistique pour l’armée (trajectoire de balle de canons), l’aérodynamique
pour l’aviation etc. Comme ces calculs d’approximation prenaient beaucoup de
temps et étaient bien répétitifs, des outils et appareils avaient été développés
pour mécaniquement trouver des solutions approximatives. Des machines spécialisées,
qui en fait ‘incarnent’ le problème physique auquel l’équation différentielle correspond, sont développées dans les universités de la France, de l’Allemagne,
des l’Angleterre et des Etats-Unis. Aux Etats-Unis, une machine très puissante
était développée par Vannevar Bush, l’analyseur différentiel, une sorte de version
électrique des appareils développés auparavant. Ce sont des machines électriques
mais analogiques (sans relais on/off, mais avec des résistances qui peuvent varier de manière continue). Le premier modèle électrique fonctionnait en 1927
construit par Vannevar Bush (MIT), plus tard (1934) en Angleterre D.R. Hartree (Manchester) construira une machine plus simple.
Les machines de Hollerith Dès la fin du 19e siècle, la fabrication des machines électriques commence. Comme il y avait une forte demande en force
d’ordonner, trier, classer et additionner de données simples dans les administrations, avec comme exemple extrême le récensement de la population. Avec le
récensement, on devait traı̂ter des millions de fiches, p.ex. le récensement aux
6
Fig. 2 – Differential Analyzer et un exemple d’installation pour une équation
différentielle
7
Etats-Unis de 1880 dura 9 années à traı̂ter, et comme il y avait un récensement
tous les 10 années, on craignait de ne jamais venir à bout du traı̂tement d’informations. A cause de cette réalisation, le gouvernement américain avait organisé
un concours pour l’invention d’une machine qui pourrait mécaniser certains aspects de ce traı̂tement de fiches. Ce concours fût gagné par Herman Hollerith qui
présenta une machine électrique en plusieurs unités : Une unité pour perforer les
cartes qui contiennent les informations en forme codée ; une unité pour ordonner
et trier les cartes selon certains critères ; une unité pour lire les cartes et les stocker dans des circuits électriques ; et finalement une unité qui pouvait prendre
des décisions logiques simples (si A est 1 alors...) et ajouter un à un régistre
(cad. compter combien de X ont la propriété de Y etc.). Une perforation correspondait à un oui pour une oui/non question (marié/non marié ; homme/femme ;
encodages pour l’âge, nombre d’enfants etc.). Les machines pouvaient faire une
sélection, faire de décisions simples, basées sur les combinaisons de trous dans
les cartes (reliant les trous parce que par là passe l’electricité). Les machines de
Hollerith ont fait que le récensement de 1890 fût fait en trois années seulement.
Hollerith commença une société : Tabulating Machine Company, qui deviendra
plus tard IBM, International Business Machines. Le principe de vente de Hollerith et plus tard d’IBM, c’était de jamais vendre une machine, mais toujours la
louer avec du personnel, système de vente qui sera repris pour les ordinateurs
dans les années 1950.
1.2
L’art et la science des relais et les précurseurs électromécaniques de l’ordinateur
La technologie des relais était en plein développement autour de 1900. Le
relais est un circuit électromécanique qui permet la commutation de liaisons
électriques. Les deux positions d’un relais, ouvert et fermé, faisaient que dans
un médium continu, l’électricité, on avait la possibilité d’y introduire un élément
discret, avec seulement deux états. Cet élément pouvait être utilisé comme
élément de commutation (comme les commutateurs de lumière), ou comme
élément de mémoire (qui stocke un état). Dans les laboratoires de téléphone
et télégraphie tout un art dans la construction de circuits complexes avec relais s’était développé, synthétisant des circuits pour mainte tâche, mais en particulier pour l’organisation et l’automatisation de réseaux téléphoniques. Cet
art de l’ingénieur se transformera en une science dans les années 1930 quand
indépendamment dans plusieurs pays2 , on réalise que la logique booléenne peut
servir à symboliser les circuits électriques. Ceci implique qu’on peut appliquer les
techniques mathématiques-algébriques pour construire des circuits qui réalisent
des fonctions arithmiques binaires (p.ex. additionneur binaire, ‘binary adder’).
L’apport des mathématiques convertit un art d’ingénieur en une science. Avec
cette science, la synthèse de fonctions devient plus facile et on peut envisager la
2 Victor Shestakov (1935/1941), Russie ; Konrad Zuse (1937), Allemagne ; Claude Elwood
Shannon (1937/1938), Etats Unis ; Nakasime et Hanzawa (1938), Japon ; Hansi Piesch (1939),
Autriche.
8
Fig. 3 – La machine Hollerith et les auxiliaires
pour perforer une carte ; Principe
9
de lecture
Carte perforée de la machine Hollerith ; Carte perforée standardisée IBM (utilisée jusque dans les années 1960)
Fig. 4 – Le principe d’un relais électromécanique ; Le circuit de Eccles-Jordan,
ou flip-flop qui peut être utilisé comme unité de mémoire pour un ‘bit’ (0/1)
synthèse de circuits et machines encore plus complexes. Comme p.ex. des calculatrices (quatre opérations + racine), ou des fonctions logiques qu’on trouve
dans les machines Hollerith (choix, décision, sélection de données, tabulation).
Le résultat sont des machines pour le traı̂tement des données assez générales,
mais encore avec une vitesse moyenne (qqs additions par seconde), et sans grands
moyens de programmabilité. Le nombre de programmes qu’on pouvait exécuter
avec ces machines était déterminé par le combinatoire des fonctions présentes
dans la machine, il était presque impossible de synthétiser une nouvelle fonction qui n’était pas présente, pour cela, il fallait ajouter une nouvelle pièce de
machine.
1.2.1
Les machines Bell
En 1940, George Stibitz avait utilisé la technique de relais electromécaniques
pour réaliser des circuits pour les quatre opérations élémentaires sur les nombres
complexes, qui étaient souvent utilisés dans la théorie de l’électricité dans l’équipe
de calcul à Bell Laboratories. Plus tard, on construisit à Bell Labs un modèle
II (1943, Relay Interpolator) et un modèle III et IV (1944, pour les calculs balistiques). Une version encore plus générale (modèle V) fût construit en 1947.
Les modèles II à V étaient tous construit pour l’armée américaine, Aberdeen
Proving Ground où le comportement des canons fût étudié et le calcul des trajectoires effectué. Les machines Bell sont des machines spécialisées, mais le modèle
III à V pouvaient lire une bande perforée qui contenait les ‘programmes’. Le
programme reste néanmoins externe à la machine à calculer.
1.2.2
La machine d’Atanasoff-Berry
A l’université d’Iowa, où se trouvait aussi une équipe de “human computers”, le professeur Atanasoff et son étudiant Berry construirent une machine
10
Fig. 5 – La sequence Controlled Calculator de Aiken, Vue général et Structure
qui pourrait calculer des problèmes balistiques (1939–1942). La machine ne marchera pas, mais sera une des inspirations pour John Mauchly qui bâtit plus tard
l’ENIAC.
1.2.3
Automatic sequence controlled calculator
(1943–1944) LA calculatrice dont les calculs sont contrôlés automatiquement
en séquence fût construite par Howard Aiken à l’université de Harvard. Elle
était utilisée par le groupe de calculatrices de Grace Hopper3 dans le Bureau
of Ordnance’s Computation Project (calculs balistiques). Aiken s’était inspiré
des machines de Hollerith mais “the machine should compute lines instead of
columns”. La programmation de la machine était fait par des rouleaux perforés
qui dictaient la séquence des opérations (sans conditionnel, mais avec itération).
La perforation de ces rouleaux s’effectuait sur une autre machine, une machine
à faire des programmes. Programmation et calculation sont donc physiquement
séparées. Les machines à la Aiken, entièrement électromécaniques, seront reproduites dans plusieurs pays de l’Occident et y ont un rôle important pour
préparer le terrain pour la construction ultérieure d’un ordinateur électronique.
3 Notice : Grace Hopper sera une des mères de la programmation, chez UNIVAC et chez
l’armée américaine.
11
Fig. 6 – Le Z1 à la maison de Zuse ; le Z4 avec Zuse qui regarde la bande de
programme
1.2.4
Les machines de Zuse.
En Allemagne, un homme seul, Konrad Zuse (1910–1995) construisait une
série de machines de complexité croissante. Zuse, après ses études à l’université
technique de Berlin (Allemagne), avait envisagé de construire des machines pour
faciliter et mécaniser le taux des calculs qu’un ingénieur avait à faire. En 1941 il
construisit le Z3, machine à calculer aux relais téléphoniques (sans itérations et
conditionnels). En 1944–1945 il bâtit le Z4, premier ordinateur qui, en principe,
pouvait effectuer n’importe quel sorte de calcul, de programme (si on triche
un peu, l’itération p.ex. en collant la bande de programmation en boucle).4
Néanmoins, la programmation se faisait à la main, ou à l’aide d’une machine
spécialisée de programmation (‘Planverfertigungsgeraet’). Les Nazis n’étaient
pas intéressés par les machines de Zuse et ses constructions ne fûrent pas financées. Après la Guerre, Zuse commença une entreprise pour commercialiser
ses idées et machines, mais il fût faillite dans les années 1960.
1.3
L’apport de la cryptologie pendant la deuxième Guerre
Mondiale (1933–1945)
La cryptologie était devenu une discipline scientifique (basée sur des concepts
mathématiques) et professionnelaisée pendant le 19e siècle. La professionalisation de l’armée et l’éducation pratique et théorique des ingénieurs avaient aidé
dans ce développement. Avant 1900, c’est surtout l’état et en particulier l’armée
qui s’intéresse à la cryptologie (application militaire), aprè 1900, avec le commencement de l’ère des télécommunications, cad. le développement des réseaux
téléphoniques et télégraphiques, aussi les entreprises développent un intérêt prononcé pour la cryptologie (application civile). La Première Guerre Mondiale
stimulera une première mathématisation des techniques cryptologiques (les tra4 Cette machine fût louée à l’université de Zürich après la Guerre, où sa présence stimulera
des études sur la programmation des machines.
12
vaux de Lester Hill), la Deuxième Guerre Mondiale verra une véritable explosion
des techniques cryptologiques, et dans l’enchiffrement (machines d’encryptage)
et dans le déchiffrement (à l’aide des maths et des machines).
1.3.1
La communication télégraphique en code Morse
L’énigma L’énigma était une machine d’encryptage et décryptage, inventée
par l’Allemand Scherbius, commercialisée dans les années 1920 et utilisée dans
beaucoup de pays avant et après la guerre. Une version de l’énigma était utilisée par la marine allemande pendant la deuxième Guerre Mondiale pour ses
communications télégraphiques.
Dans l’Enigma, 10 lettres étaient couplés avec 10 autres lettres de l’alphabet
avec des fils électriques (donc des substitutions telle que A ↔ Q). Alors 3
rotors (roues ou tambours) étaient choisis (d’un ensemble de 3 dans les années
1930, de 5 après 1941). Chaque rotor conduit une lettre à une autre lettre
de l’alphabet (substitution alphabétique). Mais par chaque nouvelle lettre à
encrypter, les rotors tournent, et la substitution alphabétique change. Après les
trois rotors, il y a un réflecteur, qui laisse retourner le signal électrique encore
une fois par les rotors, mais en sens inverse. Deux caractéristiques de l’énigma
la rendraient attaquable. D’abord, à cause du réflecteur, aucune lettre n’était
encryptée comme soi-même. La plus importante faiblesse était néanmoins que
l’énigma était une machine réciproque : si on connaı̂t l’installation de l’énigma
de l’encrypteur, et on reçoit un message encrypté, on peut utiliser une énigma
avec la même installation pour décrypter le message.
Exploitant ces faiblesses, Marian Rejeweski et son équipe de mathématiciensdécrypteurs en Pologne avaient déchiffré plusieurs messages de l’énigma avec 3
rotors (1932–1939). Ils avaient utilisé la propriété qu’aucune lettre n’était encryptée comme soi-même pour réduire le nombre des combinaisons possibles
(utilisant la théorie des groupes), et avaient bâti une machine mécanique (en
1938) qui aidait à décrypter les messages. En fait, la ‘bomba’ était une combinaison de 3 pseudo-énigmas avec des configurations changeantes. A cause de
la réciprocité de l’énigma, une telle approche était possible. Après l’invasion
de la Pologne, Rejewski et quelques autres de son équipe communicaient leurs
résultats aux Français et aux Anglais, et fuyaient la Pologne, pour travailler
d’abord en France (de 1939 à 1940, Chateau de Vignolles, après 1940–1942 à
Uzès), et finalement en Angleterre.
Utilisant les informations des Polonais, l’équipe de décryptage à Bletchley
Park (Government Code and Cypher School (GC & CS) ), où travaillaient à peu
près 10.000 personnes (dont 80 pourcent de femmes), continuait les attaques
sur l’énigma avec 5 rotors. Une équipe à Bletchley Park (il y avaient d’autres,
travaillant sur p.ex. la SZ42 ou les codes japonais) développa une version plus
grande et électromécanique de la bomba polonaise, the Bombe avec 36 pseudoénigmas. La théorie de la bombe était le travail d’Alan Turing, ensemble avec
Gordon Welchman.
13
Fig. 7 – En haut : le système de circuits dans l’Enigma ; la ‘bomba’ des Polonias ;
au milieu : La ‘Bombe’ des Anglais
14
Fig. 8 – Le Colossus
1.3.2
La communication par teleprinter
La SZ42 La machine de Lorenz, dont une version était la SZ42, était utilisée
par les Allemands pour encrypter des messages par teleprinter, donc à plus haut
débit que le télégraphe. La SZ42 était plus lourde comme machine que l’Enigma,
et était utilisée seulement pour des messages prioritaires et importantes. Le principe de la machine était la génération des séquences aléatoires qu’on additionnait
par XOR (ou exclusif) au message à transmettre (Vernam-encoding). C’est le
principe du one time pad avec un stream cipher, chiffre générée ad hoc.
Le problème de déchiffrer les messages encryptées avec la SZ42 (nom de code :
Tunny) était attaqué à Bletchley Park sous la direction du mathématicien Max
Newman. L’ingénieur Tommy Flowers et une équipe bâtirent le Colossus, une
machine aux tubes à vide, pour aider dans ce déchiffrement. La machine comparait deux courants de données (data streams) et comptait les accords entre les
deux. On pouvait ‘complexifier’ un accord, cad. on pouvait définir des fonctions
booléennes pour contrôler les relations entre les deux courants. Le premier courant de données était le message encrypté, l’autre un code d’encryptage généré
par une simulation de la SZ42. Un horloge (clock ) synchronisait les deux courants, et la vitesse était de 5000 caractères comparées par seconde. Une première
version, Mark I (avec 1500 tubes à vide), était prête fin 1943, une deuxième version, Mark II (avec 2400 tubes) fin 1944. Cette machine est un des aspirants
au titre de premier ordinateur, mais c’est une machine spécialisée ! sans stored
programs, sans programme qu’on peut mettre en mémoire.
15
2
2.1
ENIAC (1946-1949), ordinateur de transition
Le projet de Mauchly et Eckert
L’ENIAC (Electronic Numerical Integrator And Computer) était présenté
au public le 15 février 1946 à l’université de Pennsylvania, dans les bâtiments
de la Moore School pour les ingénieurs. Le commencement de la construction
date de 1943, quand les Ballistic Research Laboratories de l’armée américaine
à Aberdeen (Maryland) avaient contracté le professeur John W. Mauchly and
l’ingénieur Prespert J. Eckert pour la construction d’une machine électronique
à la Moore School pour faire des calculs balistiques.
Depuis les années 1930 la Moore School avait eu une équipe de calculateurs et calculatrices (150 personnes), et l’école avait aussi des ingénieurs qui
avaient de l’expérience dans la construction d’instruments électroniques, p.ex. ils
avaient construit un differential analyzer fin 1934 et avaient accumulé beaucoup
d’expérience dans le maintenu et l’utilisation de cette machine.
Mauchly était un professeur de lycée, plus tard prof associé à la Moore
School, qui s’intéressait aux instruments de calcul et l’utilistion d’éléments
électroniques (il avait p.ex. visité Atanassof). Il voulait construire une machine
pour avancer le calcul scientifique, en particulier pour la prédiction des temps
météorologiques. Eckert était un ingénieur, ancien étudiant de la Moore School
et maintenant en service de la Moore School. Ensemble, ils avaient fait une proposition pour la construction d’une machine à calculer électronique, qui utilisait
des tubes à vide (et pas de relais). Cette proposition fût accepté par l’armée
américaine, parce qu’ils avaient encore besoin de puissance calculatoire en plus
pour les tables balistiques. Les machines de Bush, de Bell, de Aiken etc. ne
suffisaient pas à tenir le pas avec la Guerre.
2.2
L’architecture de l’ENIAC
La machine consistait de 17 468 tubes à vide, 1 500 relais et 70 000 résistances.
L’ensemble pesait 30 tonnes et occupait 67 mètres carrés. La machine était
décimale. Il y avaient 20 accumulateurs, dont 4 pouvaient être combiné dans le
multiplicateur, et encore 4 autres dans le diviseur (resp. machine à extraire des
racines). Il y avait aussi une imprimante, un lecteur et un perforateur de cartes
perforées, un transmetteur de constantes, 2 tables de fonction, une unité pour
réguler le cycle de la machine et une unité pour l’initiation de la machine. Enfin,
il y avait aussi le master programmer, l’unité de programmation centralisée. Pour
organiser la communication entre tous ces unités, il fallait mettre des cables (de
données et de programmation) entre eux, le cablage était la ‘programmation’
de l’ENIAC.
L’unité pour réguler le cycle de la machine émittait une poulse chaque 1/5000
sécondes, on appelait ce rhythme le temps d’addition parce qu’on pouvait faire
une addition par cycle. Le temps pour effectuer un certain calcul sur l’ENIAC
peut donc être estimé en temps d’addition. L’unité la plus lente était le lecteur
resp. le perforateur de cartes, elles avaient besoin de 0.5 sécondes resp. 0.6
16
sécondes par carte. Pour que ces opérations puissent être synchronisées avec
les autres opérations dans la machine, on avait ajouté un mécanisme spécial,
l’interlock, qui arrêtait toute autre opération jusqu’à ce que le lecteur ou le
perforateur avaient fini (un mécanisme semblable existait pour le diviseur).
L’unité des constantes et les tables de fonctions étaient le mémoire fixe de la
machine, mémoire qui ne change pas pendant un calcul. Dans l’accumulateur on
trouve le mémoire de travail (20 fois 1010 −1) et une partie de la programmation
locale de la machine.
L’accumulateur était l’unité de base de l’ENIAC. Un accumulateur pouvait
contenir un nombre entre 0 et 1010 − 1, avec un signe P (+) ou M (-). Les signes
correspondaient à 0 et 9 respectivement. Le nombre était représentée dans l’accumulateur par 10 décades et un PM compteur. L’accumulateur communiquait
avec les autres unités de la machine par des cables. Il y avaient des cables de
programmation, qui transmettaient des signaux de programmation et activaient
certains circuits dans l’accumulateur. Et il y a avaient des fils numériques, qui
transmettaient des nombres, cad. des ensembles de signaux électroniques correspondant au contenu (nombre) de l’accumulateur. Par accumulateur il y avaient
12 points d’entrée et 8 points de sortie pour des signaux de programmation, ainsi
que 5 points d’entrée et 2 points de sortie (une sortie A pour le nombre dans l’accumulateur, et une sortie S pour le complément) pour les signaux numériques.
2.3
La programmation de l’ENIAC (avant 1947)
L’ENIAC avant le branchement fixe des années 1947–1948 (ceci facilitait la
programmation de l’ENIAC mais le tranformerait aussi en une machine sérielle)
était une machine parallèle qui devait être programmé et localement (dans les
accumulateurs) et centralement (avec le master programmer ). La programmation de l’ENIAC dans cette configuration originaire était difficile, comme disait Jean Bartik, l’une des programmeuses de l’ENIAC, c’était “a son-of-abitch to program”. On discutera deux procédés nécessaires pour la programmation de l’ENIAC, l’itération et le conditionnel. Ces deux, avec les opérations
arithmétiques, rendaient la machine “universelle”, cad. la machine pouvait effectuer n’importe quel calcul (dans les limites du mémoire fini et des séries
d’opération aussi finies dont on disposait sur l’ENIAC).
2.3.1
Itération et contrôle de la séquence des ‘blocks’ d’opérations
Une itération, cad. la répétition d’une séquence fixe d’opérations, pouvait
être programmé avec le master programmer. Cette unité consistait de dix stepper
counters chacun ayant 6 stepper stages (compteurs) qu’on pouvait configurer (à
un nombre entre 1 et 2000). Chaque fois qu’une poulse de programmation entre
le stepper (indiquant le fin d’une séquence à répéter) le stage ajoute un à son
contenu. Si le contenu est moins que le nombre configuré d’avance, une poulse
de programmation est émise pour activer à nouveau la séquence d’opérations
contrôlé par ce stage. Si le contenu égale le nombre configuré d’avance, le stepper
17
18
Fig. 9 – ENIAC, vue sur la chambre de l’ENIAC, vue sur un accumulateur
Fig. 10 – ENIAC, un stepper counter du master programmer
counter passe au prochain stage (qui contrôle les itérations d’une autre séquence
d’opérations).
2.3.2
Le concept d’un programme vide (dummy program) et les
conditionnels
Dummy program. Dans l’ENIAC les signaux de programmation restent des
signaux de programmation, ainsi que les signaux numériques restent des signaux
numériques. Pour le conditionnel néanmoins, il était nécessaire de convertir un
signal numérique dans un signal de programmation. Pour cela on utilisait des
adapteurs spéciaux et les “programmes vides” (dummy programs). L’adapteur
spécial convertit le signal venu d’une sortie A ou S numérique d’un accumulateur
dans un signal électrique compatible avec le voltage des signaux de programmation. Pour ne pas rompre le rhythme des cycles de la machine, on devait
synchroniser ce signal converti avec les autres signaux. Cela se faisait en circuitant le signal converti par une entrée de programmation d’un accumulateur, et
en attendant qu’il revient par la sortie de programmation du même accumulateur. Par cette attente le signal était synchronisé.
Conditionnels. Il y avait en gros deux modes de brancher un conditionnels.
La première méthode utilisait les deux cables numériques de sortie (A et S) d’un
accumulateur pour différencier entre deux états (plus ou moins que zéro, avec
une cable sur le signe PM). Avec cette méthode, un accumulateur complet est
branché pour le conditionnel, et ne peut plus être utilisé pour d’autres calculs.
Dans la seconde méthode, on n’utilise qu’une sortie (A ou S) d’un accumulateur
(et l’accum. reste donc disponible pour des calculs), et on la combine avec un
stepper counter du maı̂tre-programmeur.
2.3.3
Comparaison avec d’autres machines contemporaines
Dans un test en 1948, un calcul de 800 points d’un trajectoire prenait un
à deux jours de préparation et programmation et 15 minutes de calcul sur
l’ENIAC. Le même calcul sur les machines Relay de Bell prenait peu de temps
pour la préparation, mais 70 heures pour le calcul. Les machines d’IBM (conversion des machines administratives pour les calculs), finalement, avaient besoin,
19
Fig. 11 – ENIAC, les deux modes de brancher un conditionnel
Fig. 12 – Un programme pour calculer n, n2 et n3 pour n = 0 à 200 et imprimer
tout ca (1946)
20
en théorie, de 8 jours pour le même travail, en pratique plutôt 4 semaines (plusieurs interruptions, trop besoin de cartes perforées...), ce qui était en fait la
vitesse des équipes de calculateurs et calculatrices humain(e)s.
Il est évident de cette comparaison, que la vitesse sépare l’ENIAC de ses
précurseurs, c’est un saut quantitatif dans le traı̂tement et/ou calcul des données
et/ou nombres. Il est aussi évident que le plus grand problème pour l’utilisation
de ces nouvelles machines était la préparation et la programmation. Il y a ici
plusieurs ‘bottlenecks’ (embouteillages). On a ce qu’on appelle le ‘von Neumann
bottleneck’, que la vitesse de la machine est limité par le débit des données dans
le passage du mémoire fixe au mémoire dynamique de calcul (donc sur l’ENIAC
des cartes perforées aux accumulateurs). Et on a aussi, problème que deviendra
pressant fin des années 1960 (sous le nom de ‘software crisis’), l’embouteillage
induite par la programmation.
2.4
Un système de programmation pour l’ENIAC
Comme la programmation de l’ENIAC, avec des cables et adapteurs spéciaux
donc des connections directes entre les unités, prenait de huit heures à plusieurs
jours, il devenait évident, que, si on voulait utiliser l’ENIAC comme une machine
flexible et capable d’une variété de calculs, on avait besoin d’une autre forme
de programmation.
2.4.1
L’idée de ‘stored programming’ sur l’ENIAC
Déjà en 1944 Mauchly et Eckert avaient pensé qu’on pouvait mettre les
commandes dans les tables de fonctions. Dans la table de fonctions on a une
colonne de x, et une valeur f (x) de 12 chiffres qui y est associé (qu’on pouvait
fixer avec des interrupteurs (switch)). Le nombre d’une commande consistait de
deux chiffres décimales. Le premier chiffre du nombre de la commande activait
l’un des 10 stepper counters du master programmer, le deuxième chiffre activait
un des 6 stages du stepper counter. Avec le nombre et par le master programmer,
une séquence particulière d’actions était donc activée.
L’idée n’était pas incluse dans l’ENIAC de 1946, mais indépendamment de
Mauchly et Eckert, R.F. Clippinger (officier du BRL), Adèle Goldstine (programmeuse et femme de H.H. Goldstine) et John von Neumann arrivaient à la
même conclusion, mettre les programmes dans le mémoire de l’ordinateur, là où
on pouvait les réutiliser et récombiner (ce qui était impossible avec des cables).
Cette idée est connue sous le nom de “stored-program” ou programmes stockés
en mémoire.
2.4.2
Le vocabulaire mis sur l’ENIAC
La question d’inclure quels ordres et comment brancher de manière fixe la
machine, cad. fixer le vocabulaire des opérations simples de programmation,
n’est pas facile. Il y a des constraintes de la part de la machine, de la part de
la programmation, et, enfin de la part de la logique (quelles opérations simples
21
sont nécessaires pour synthétiser des programmes plus complexes, voir, n’importe quel autre programme). Dans la discussion entre John von Neumann avec
Clippinger, Nick Metropolis (du projet Manhattan), Klari von Neumann (sa
femme et programmeuse), Adèle Goldstine, Betty Snyder-Holberton (programmeuse) etc. cette question est lentement résolue. En 1948, Nick Metropolis et
Klari von Neumann installent la machine pour ce vocabulaire.
Un accumulateur (6) était utilisée comme compteur de commandes (on
y ajoutait 1 chaque fois qu’une commande était finie), un autre (8) comme
mémoire pour les valeurs de la table de fonction. Il y avait des ordres de transfers (de Accum. 15 à Accum. x et vice versa) ; des ordres arithmétiques (add.,
complément, signe, ‘shift’, mult. div. et racine) ; des ordres entrée/sortie (lire et
imprimer des cartes) ; des ordres de contrôle (un ‘halt’, un conditionnel sur le
signe de l’Accum. 15, et un ‘jump’, un saut direct)
Le code mis sur l’ENIAC en 1948 est décrit par R.F. Clippinger dans un
rapport “A Logical Coding System Applied to the ENIAC”. Deux upgrades de
cette converter code étaient développés dans les années à suivre, en 1949 et
en 1951. La machine était six fois plus lent qu’avant ce rebranchage dans une
machine séquentielle (parce que la lecture du code dans les tables de fonctions
et l’activation de l’opération par le master programmer durait 7 cycles), mais
cette perte en vitesse de calcul était largement compensée par le gain en vitesse
de programmation.
22
3
3.1
Les années pionnières de l’ordinateur (1946–
1954)
La machine à la von Neumann : EDVAC
Le dessin d’une nouvelle machine, plus flexible et surtout programmable que
l’ENIAC, avait déjà commencé en 1944, quand l’ENIAC était près à être fini.
Des discussions entre Eckert, Mauchly, les ingénieurs de l’ENIAC, mais aussi
avec H.H. Goldstine et le mathématicien John von Neumann, préparaient la
voie pour la conception de l’EDVAC (Electronic Discrete VAriable Computer).
Des rapports sur cette machine encore à bâtir étaient préparé par Mauchly et
Eckert (resté classifié jusque dans les années 1950) et par John von Neumann
(déclassifié directement). Ce dernier rapport, First draft of a report on the EDVAC (1946), a circulé aux Etats-Unis et en Europe occidentale, et est devenu le
document de référence pour la construction des premiers ordinateurs. Ce rapport
est également à la base d’une dispute de priorité sur l’invention de l’ordinateur.
Cette dispute sera menée au tribunal plus tard (années 1964-1973) comme Honeywell v. Sperry Rand (deux entreprises d’ordinateur des années 1960) et le
juge décidera finalement que, parce que le Draft avait circulé partout, que l’architecture de l’ordinateur moderne est dans le domaine public, décision capitale
pour le développement commercial des ordinateurs.
John von Neumann était un mathématicien d’origine hongroise. Il avait travaillé en Allemagne chez Hilbert sur des questions de l’axiomatisation de la
physique et de la logique, et était émigré aux Etats-Unis dans les années 1930
(à cause de Nazis) où il travailla à l’Institute for Advanced Study de Princeton.
Il était aussi membre de plusieurs comités du gouvernement américain, entre
autres de la commission sur l’énergie atomique. Dans First draft of a report
on the EDVAC (1946), von Neumann s’inspirait d’un article de McCullough et
Pitts (1943), “A Logical Calculus of the Ideas Immanent in Nervous Activity”.5
Dans la description de von Neumann, les détails de l’ingénieur disparaissent
en faveur d’une structure claire et logique de la machine, qui compare la machine à un cerveau. Il est décrit ce qu’on appelle aujourd’hui, l’architecture von
Neumann. Dans cette architecture on trouve 5 components
5 Cet article construit une analogie entre des formules logiques (booléennes) et des combinaisons de neurones (cfr. circuits électriques).
23
On voit dans cette architecture que la programmation (unité de contrôle),
l’opération (arithmétique et logique) et le mémoire sont bel et bien séparées.
Dans l’ENIAC, c’était différent : la programmation se trouvait et dans une
unité spéciale, et dans les accumulateurs ; aussi, le mémoire se trouvait dans les
tables de fonctions et dans les accumulateurs etc.
Autres caractéristiques de l’architecture von Neumann sont :
1. la séquentialité (la sérialité) des opérations
2. le concept stored program : le fait que les programmes peuvent être mis
dans le mémoire. Les programmes ne sont donc pas extérieurs à la machine
(comme chez Aiken ou Zuse, où les programmes étaient sur des cartes
perforées et jamais dans la machine à calculer), et peuvent être consultés
et aussi modifiés par la machine
A quelques exceptions près, cette architecture est encore aujourd’hui à la base
des ordinateurs. Deux problèmes (‘bottlenecks’, embouteillages) se font ressentir dans une telle architecture : D’abord la vitesse de la machine est déterminée
largement par la vitesse du mémoire (et mémoire était cher jusqu’en 1955, donc
limité en quantité) ; puis, il n’y avait pas de prévisions pour faciliter la programmation. Le premier problème sera résolu avec des nouvelles technologies des
années 1950, le deuxième problème ne deviendra très apparant vers le milieu des
années 1950. Les langages de programmation, et plus tard, la programmation
structurée, seront des réponses à cette problématique.
3.2
Les descendants de ASCC et EDVAC dans le monde
Les développements des ordinateurs aux Etats-Unis dépassent de loin, avec
peut-être la seule exception du Royaume Uni, ceux des autres pays pendant les
années 1946–1964. Néanmoins, inspiré par la lecture de First draft of a report
on the EDVAC de John von Neumann, plusieurs pays se mettaient à construire
leur propre ordinateur. A côté de von Neumann, il s’avère que Howard Aiken
et sa machine (ASCC et successeurs) exerça une influence considérable hors des
Etats-Unis jusqu’au milieu des années 1950.
24
3.2.1
Aux Etats-Unis
Aux Etats-Unis, plusieurs entreprises sont impliquées dans la construction
des ordinateurs. Ils sont pour la plupart contractées par le gouvernement américain
(l’armée en particulier), bien que l’ordinateur devient lentement un produit commercial (à partir de 1952). A part les entreprises, la construction des ordinateurs se fait aussi dans les centres de recherche, comme les universités, parfois
en coopération avec des entreprises. D’importants ordinateurs réalisés dans les
universités sont : le MANIAC et le IAS machine à Princeton (après les plans
de von Neumann pour l’EDVAC, et pour l’utilisation scientifique, en particulier
pour des calculs pour la bombe à hydrogène) ; le Whirlwind à MIT (pour la
simulation d’aviation, et comme partie dans le projet SAGE, Semi Automatic
Ground Environment) ; le SEAC et le SWAC etc.
Bienque IBM avait p.ex. participé dans la production de Mark I de Howard
Aiken, ce n’est qu’en 1952 qu’ils entrent vraiment le marché des ordinateurs
éléectroniques, voyant que c’était une concurrence pour leurs machines à tabuler.
En 1952 ils présentent l’IBM 701 Electronic Data Processing Machine, et à
partir de ce moment ils dominent le marché grâce à leur réseau de vente que
les autres entreprises n’avaient pas. En 1954 ils introduisent l’IBM 704, avec un
mémoire magnétique, ainsi que l’IBM 650. Le 704 et le 650 sont deux côtés de
l’activité d’IBM, le premier est une machine coûteuse pour l’usage scientifique
(123 vendus), le second, une machine moins coûteuse, plus petite, et destiné
pour des applications commerciales (2000 vendus).
On peut comparer les exploits d’IBM avec le Eckert-Mauchly Computer Corporation. La société de Eckert et Mauchly avait été fondée après que Mauchly et
Eckert avaient quitté la Moore School avec l’intention de commercialiser l’idée
de l’ordinateur. La société eût des problèmes financiers dès le début. En 1950, ils
deviennent partie de Remington Rand, entreprise de machines à taper. Malgré
ces problèmes, il réussissent en juin 1951 de présenter l’UNIVAC (Universal Automatic Computer). 20 exemplaires en sont vendus. On voit donc que, bien que
IBM entre qu’en 1952 vraiment dans le marché des ordinateurs, elle sera dominante pour les prochaines décennies (jusqu’à l’âge des ordinateurs personnels).
Sept autres entreprises sont en concurrence avec IBM, mais beaucoup plus petit. A cause de cela, on les appelle les sept nains (IBM étant Blanche Neige),
ces sont : Burroughs, UNIVAC, NCR, Control Data Corporation, Honeywell,
RCA et General Electric. En 1970 le département ordinateur de GE devient
une partie de Honeywell, et UNIVAC (Eckert-Mauchly Computer Corporation,
en 1950) et RCA (en 1971) deviennent une partie de Remington Rand plus tard
Sperry Rand.
3.2.2
En Angleterre
A Cambridge D.R. Hartree, déjà impliqué dans la construction d’une differential analyzer en 1935, ensemble avec Maurice Wilkes commencaient à bâtir
une machine qu’on appelait l’EDSAC (Electronic Delay Storage Automatic Calculator). La machine était finie en mai 1949. L’EDSAC est souvent vu comme
25
le premier ordinateur avec programmes en mémoire interne (parce que l’ENIAC
n’était pas construit comme telle, et que l’UNIVAC ou EDVAC étaient finis
que plus tard). Cet ordinateur était aussi produit une seconde fois, en version
commerciale, alors appelé LEO 1 (Lyons Electronic Office).
The EDSAC
A Manchester Quelques mois après l’EDSAC, les ingénieurs à Manchester
avaient aussi fini leur machine, le Manchester Mark I. La machine serait remplacé
en 1951 par une version améliorée, et produite comme produit commercial, le
Ferranti Mark. Sur cette machine, on utilisa pour la première fois un registre
pour les indices des valeurs à utiliser. Il y avait, dans l’ENIAC recablé, déjà
deux registres, un pour la commande à exécuter, un pour le valeur à utiliser.
Maintenant, sur l’EDSAC, on vot une petite généralisation de ces idées-là, qui
ressemble l’allocation en mémoire, pointers, d’aujourd’hui. Il est aussi à noter,
qu’Alan Turing a écrit le manuel de programmation pour cette machine.
3.2.3
Autres Pays
Influence de Aiken ou Stibitz (*) ; influence de von Neumann (+)
– A Londres : l’ARC*, APEC+ par Booth et ses associés
– Suède : le BARK* (relais) en 1950 ; BESK+ en 1953
– Pays-Bas : l’ARRA (aux relais) en 1951, l’ARRA (aux tubes à vide) en
1954, l’ARMAC en 1956
– France : machine de l’institut Blaise Pascal en 1951 (influence de l’ENIAC) ;
compagnie Bull, le Gamma en 1956
– Suisse : le Z4 (relais), acheté de Konrad Zuse en 1950 ; ERMETH* (1951–
1955)
– Allemagne : le G1 et G2 en 1951 et 1954 à Goettingue ; le DERA* à
Darmstadt (1951–1956) ; le PERM+ à Munich (1952–1956) ; et bien sûr
Konrad Zuse
26
–
–
–
–
Belgique : une machine* construite par Bell, 1951–1954
Russie : le MESM en 1950, BESM+ en 1953
Australie : le CSIRAC+ (1949)
le Japon : ETL Mark I et II* (relais) en 1952 et 1955 ; le TAC+ en 1952–
1956
Dans tous les pays, les ordinateurs étaient construits dans et pour les universités, bien que en certains cas, une entreprise industrielle (souvent d’origine
américaine) était contracté pour la construction (p.ex. Belgique, France, Suisse).
3.3
Qui est-ce qui est le premier ordinateur ?
Cette question a suscité pas mal de discussion et on peut donner des réponses
très différentes. Beaucoup dépend de la définition qu’on donne de l’ordinateur.
Est-ce que cette machine doit être ‘general-purpose’ (généraliste) ? est-ce que
les programmes doivent être stockés en mémoire ? est-ce que la vitesse et la
technologie utilisée sont importantes ? est-ce que les calculs effectués et l’utilisation virtuelle compte ? etc. Selon la définition, et très souvent selon inclinaison
nationaliste, la réponse peut être la Z4, le Colossus, l’ENIAC, l’EDSAC ou encore d’autres. La table suivante mets certains caractéristiques importants dans
la définition d’ordinateur en valeur :
Machine
Bell Model III
Aiken Mark I
Z4
Colossus
ENIAC
EDSAC
3.4
Année
1943
1944
1944
1942-44
1944-46
1949
Pays
USA
USA
Allemagne
UK
USA
UK
Relais
X
X
X
-
Tubes
X
X
X
Progr. Ext/Int
Ext
Ext
Ext
Ext
Ext/Int
Int
Itér.
Oui
Oui
± Oui
Oui
Oui
Oui
Problèmes de programmation et premiers essais
Une fois que l’architecture dite de von Neumann (avec les programmes
stockés en mémoire) était devenue le modèle pour les ordinateurs à construire,
la programmation d’une machine ne nécissitait plus l’arrangement de plusieurs
cables et adapteurs, mais la détermination d’une séquence d’instructions élémentaires
suffisait. Pour chaque machine on avait qqs dizaines d’instructions élémentaires
disponibles. Il n’existait pas une liste plus au moins fixe de telles instructions
élémentaires (comme maintenant avec l’assembler code pour les microprocesseurs). En gros il y avait quatre classes d’instructions élémentaires,
– des instructions de transferts (entre le mémoire et les registres) ;
– des instructions arithmétiques (add., complément, signe, ‘shift’, mult. div.
et racine) ;
– des instructions I/O, entrée/sortie (lire et imprimer des cartes, des bandes
magn.),
– des instructions de contrôle (un ‘halt’, un conditionnel, un saut direct).
27
Cond.
Non
Non
Non
Non
Oui
Oui
Il y avait en gros deux manières d’encoder les instructions. Les instructions pouvaient avoir la structure suivante : [instruction, valeur, adresse de la prochaine
instruction] (two address instruction) ; ou bien [instruction, valeur] (one address
instruction). Pour la seconde manière (p.ex. sur l’EDVAC), il était sous-entendu
que la prochaine instruction était dans la position immédiatement après l’instruction exécutée.
Dans les premières années (1946–1952), comme on considérait les ordinateurs
surtout comme des grandes machines à calculer, le problème de la programmation était plutôt le problème de traduire un algorithme mathématique dans une
séquence d’instructions élémentaires d’ordinateur. Là où il y avait des différences
entre mathématiques et programmation, là on trouvait les plus grands problèmes
de ces premiers essais. D’importantes différences sont entre autres :
– En et pour soi, il n’y a pas de différence entre opérateur et opérand (entre
instruction et donnée) dans la machine tandis que cette différence est
capitale en maths
– En maths un nombre peut être n’importe quel nombre (d’un nombre fractionnel à la période infinie jusqu’à un nombre extrêment grand), tandis
que dans une machine, le nombre est toujours entre des limites du hardware d’où naı̂tra lentement le besoin d’avoir de différents types de données
(data types), et d’où vient le problème d’arrondissement dans le calcul. Le
problème de ‘scaling’ (échelle) mangeait la majorité du temps de programmation. L’alternance entre nombres entiers (‘integers’) et nombres
fractionnaires (‘floating point’) y faisait partie.
– En mathématiques on a sn+1 = −sn , en programmation, s = −s (assignment), on ne peut multiplier les variables à l’infini, mais il faut faire un
plan des locations de mémoire disponibles et les allocer aux variables dans
le programme
– En mathématiques plutôt des ‘relations’, ‘équations’, etc. ‘stables’, tandis
qu’en programmation il faut expliciter les mécanismes de contrôle comme
le conditionnel, le loop, ...
– En mathématiques, beaucoup de choses ou de pas sont sous-entendus mais
pas explicités (le mathématicien les ajoute en travaillant, ou voit comment
il peut compléter ou faire qqc.), sur un ordinateur, il faut tout expliciter
et tout exprimer en commandes élémentaires
Aux Etats-Unis : Visions différentes, John von Neumann et Haskell B.
Curry Autour de l’ENIAC et l’EDVAC, les premiers langages pour faciliter la
programmation de ces machines étaient développés. H.H. Goldstine, ensemble
avec John von Neumann, publiaient Planning and coding of problems for an
electronic computing instrument (1947–1950) en trois volumes. Dans ces volumes, ils montrent comment synthétiser plusieurs algorithmes en utilisant les
instructions élémentaires de l’EDVAC. Une structure systématique et logique
pour leur langue est absente, seulement les organigrammes (‘flow diagrams’)
sont utilisés. Un trait logique était présent dans leur rapports, la substitution
partielle (commande Sp ), où on pouvait opérer sur une instruction (qui était
28
encodée comme un nombre) comme sur un nombre. Comme ça, on pouvait modifier un programme pendant l’exécution. Par conséquence, il n’y avait pas de
stricte séparation entre instruction et nombre. Pour von Neumann et Goldstine,
l’ordinateur ne serait jamais rien de plus qu’une grande machine à calculer, il
suffisait alors d’épéler en détail les algorithmes mathématiques qu’on voudrait
utiliser, on n’avait pas besoin d’une langue intermédiaire pour explorer la programmation de la machine. Le seul algorithme de ‘compilation’ dans les trois
volumes était un algorithme compliqué et peu général pour insérer une routine
déjà existante dans un programme.
Une approche plutôt structurelle est donnée par le logicien H.B. Curry dans
deux rapports On the composition of programs (1949–1950). Ces rapports ne
seront jamais publiés et n’auront pas d’influence sur le développement des langages de programmation. Curry partait exactement du problème que von Neumann et Goldstine donnent comme une pensée après, cad. comment combiner
des routines existantes dans un programme. Pour faire cela, Curry donne une
classification de programmes simples (la classification dépend du nombre d’instruction avec lesquelles on calcule, le nombre de substitutions partielles si on
veut), et donne des algorithmes très généraux pour assembler des simples routines dans un programme complexe. Les travaux de Curry annoncent en fait
l’informatique comme discipline scientifique.
29
En Angleterre : Wilkes, Wheeler et Gill L’équipe de programmeurs de
l’EDSAC, M. V. Wilkes, D. J. Wheeler, et S. Gill publient en 1951 le livre
The preparation of programs for an electronic digital computer. With special
reference to the EDSAC. C’est le premier livre de programmation, dans lequel
on trouve l’explicitation de plusieurs algorithmes récurrentes, mais aussi une
routine élégante pour insérer une sous-routine dans un programme. Bienqu’une
approche systématique et logique manque dans ce livre, on y trouve beaucoup
d’idées et méthodes pratiques pour programmer une machine, ainsi que des
concepts (comme l’insertion d’une sous-routine, “synthetic orders”, microprogrammation) qui deviendront important dans le développement des langages de
programmation.
30
4
4.1
La diversification des ordinateurs (1954–1964)
Innovations technologiques
Mémoires L’un des principaux embouteillages des premiers ordinateurs était
le mémoire. D’abord le mémoire externe et fixe (± ROM, disque dur d’aujourd’hui) en forme de cartes perforées était lent (demi-seconde pour lire ou écrire
versus plusieurs milliers d’additions par seconde). Puis, le mémoire interne, de
travail (± RAM, mémoire de travail d’aujourd’hui) était vite, mais cher et souvent peu fiable (beaucoup de problèmes techniques). En général, on n’avait que
quelques ‘mots’ de mémoire de travail (p.ex. 14 sur l’ENIAC recablé). Les technologies utilisées pour le mémoire de travail dans les années 1940-1950 étaient
ou bien peu fiable (tubes à vide, p.ex. ENIAC, EDSAC), ou bien peu précis
(tambours magnétiques, ‘magnetic drum’, p.ex. Manchester Mark I), ou bien
lent (relais électromécaniques, p.ex. Bell, Aiken), ou bien, cher et encore en
développement expérimental (mémoire à mercure, ‘mercury delay lines’ UNIVAC I). La première solution fiable et générale seront les tores magnétiques
(‘ferrite core memory’), développés dans les années 1949–1952 sur le Whirlwind
à MIT. Ils deviendront la technologie préférée dans les années 1950–1960 (p.ex.
IBM 7090, PDP-1, CDC 6600) avant que, autour de 1970, les chips RAM les
remplacent.
En ce qui concerne le mémoires fixe : Les cartes perforées restent le médium
préféré, à cause de la continuité avec le passé (cfr. IBM et les machines Hollerith), mais en 1951 la bande magnétique est introduite sur l’UNIVAC. En 1959,
aussi IBM va lentement offrir les bandes magnétiques comme médium de stockage, mais les cartes seront utilisées – souvent en conjonction avec des bandes
– jusqu’au milieu des années 70.
Circuits de calcul Le transistor bipolaire (sémi-conducteur) est inventé en
1947/48 à Bell Laboratories par Shockley, Bardeen et Brattain. Le principe est
l’assemblage de couches (en ‘sandwich’) de métaux conducteurs, en particulier
le germanium et le silicium. Les propriétés de ces métaux font que sous certains
voltages, certains couches deviennent conductrices qui avant résistaient (ou vice
versa), ou bien que certaines couches vont amplifier ou moduler un signal. Les
seules propriétés physiques de ces métaux font du transistor un interrupteur
binaire à deux états qui peut être commuté avec le voltage. Le transistor sera
utilisé à partir de 1955 pour les ordinateurs, remplaçant les tubes à vide qui
étaient moins fiables, plus difficiles à maintenir et avaient plus de ‘dégât’ de
chaleur.
Les transistors, dans des transformations ultérieures, resteront la base des
ordinateurs jusqu’à aujourd’hui. Des alliages améliorées de métaux ainsi que
des principes de production en masse, jusqu’à l’impression de circuits entiers en
silicone, ont rendu possible la miniaturisation progressive de circuits logiques.
Vers 1960 on a l’invention des circuits intégrés, où les connections entre transistors sont imprimées machinalement. Le circuit intégré est inventé en 1959,
indépendamment par Kilby et Noyce. Plus tard, l’idée du circuit intégré sera
31
mené à bout avec le microprocesseur, où un processeur complet (plus au moins
une petite machine universelle) est imprimé en une seule fois, une invention
qui date de 1970 par Hoff, Mazo et Faggin. Ces deux innovations ont donné
naissance à de nouveaux types d’ordinateurs, nouvelles ‘générations’ d’ordinateurs, moins chers et plus accessibles. Le circuit intégré est à la base du succès
des “mini-computers” (années 1960) et plus tard les microprocesseurs seront
fondamentaux pour l’avènement des ordinateurs personnels (dès 1977).
4.2
La diversification des ordinateurs, le tournant 1960
(1959–1964)
A côté des ordinateurs développés dans les universités, souvent en coopération
avec l’armée et une entreprise, la production des ordinateurs aux Etats-Unis se
fait dès les années 1950 que dans peu de localités : Il y a une énorme entreprise,
IBM, et il y a sept petites. Les chiffres sont parlantes : En 1960 IBM propose
son modèle 1401 avec transistors, 20.000 exemplaires en sont vendus, par contre,
du modèle UNIVAC III (1962) 96 sont vendus. La situation va néanmoins se
changer dès 1960 à cause de nouvelles technologies que IBM est lent à répérer
(variations sur les transistors, bandes magnétiques pour le mémoire, partage de
temps ...) et à cause d’une diversification dans les modèles d’ordinateurs. A coté
de “mainframe”, les années 1960 voient la naissance du “mini-computer” et du
superordinateur.
32
En général, il y a une méditation sur l’architecture de l’ordinateur autour
de 1960, pour la rendre plus simple et plus efficace et polyvalente à la fois.
Les machines comme l’IBM/360 ou les PDP ont en fait moins de commandes
élémentaires, mais utilisent l’idée de microprogrammation pour varier ce vocabulaire essentiel aux détails spécifiques de hardware. Il y a une dizaine de
commandes élémentaires (comme addition, transfert, branchement), et une commande spéciale qui, au lieu de lire le mot qui suit comme donnée, comme nombre
ou adresse à additionner, transférer etc., lit le mot comme une sorte de microprogramme où chaque bit indique une petite commande (comme ‘shift’, perforation,
lire point sur écran, transférer à un registre de test etc.). Avec la microprogrammation, toute la machine reste accessible par code machine, mais il faut la
chercher dans les bits. Pour ceux qui veulent distance de la machine, les commandes élémentaires sont faciles à retenir et utiliser, et le gamme croissant de
logiciels donne tous les moyens pour l’utilisation quotidienne de l’ordinateur.
IBM/360 : la machine multifonctionnelle Les deux lignes de la production IBM, scientifique et commerciale, se rencontrent dans la série IBM/360.
L’IBM/360, présenté en 1964, était vendu comme système multifonctionnelle et
modulaire, cad. on peut toujours étendre le système en achetant de nouveaux
modules. L’architecture de l’IBM/360 est devenu un classique, et a déterminé
plusieurs standards jusqu’aujourd’hui.
CDC 6600 : les “supercomputers” En 1962 il était devenu clair, qu’il
y avait un marché spécialisé pour des ordinateurs dévoués au calcul intensif.
La société CDC (Control Data Corporation) et son ingénieur Seymour Cray
présentaient le CDC 6600 en 1964, c’était le premier super-ordinateur qui est
devenu un succès commercial. Plus, les années 1970, Cray commence sa propre
entreprise, malcontent avec le cours de CDC, et produire la série de superordinateur Cray dont le nom deviendra synonyme pour superordinateur jusque
dans les années 1990.
PDP–8 : les “minicomputers” La société DEC (Digital Equipment Corporation) avait lancé son premier ordinateur PDP-1 (Programmed Data Processor
modèle 1) en 1960. Comme il leur manquait l’argent et le réseau de distribution
d’IBM, DEC a poursuivi dès le début une stratégie différente. Leur produit était
appelé mini-computer, et parce que DEC n’avait pas les moyens de développer
tout un paquet pour utiliser cet ordinateur (y compris p.ex. le personnel, n’oublions pas qu’IBM louait ses machines avec personnel), ils incitaient leurs clients
à développer des programmes pour l’ordinateur eux-mêmes. Les PDP étaient
en particulier populaires aux universités et centres de recherche aux fonds restreints. Contrairement aux machines IBM, l’utilisateur pouvait maintenant directement accéder à la machine et lui-même changer les programmes ou même
l’architecture ! Avec leurs modèles PDP-1 (1960, inspiré par le TX-0), PDP-8
(1965, inspiré par le LINC, 20.000 vendus) et le PDP-11 (1970, 170.000 vendus), DEC devenait dans les années 1960-1970 un compétiteur sérieux pour le
33
géant IBM, mais Ken Olson, PDG de DEC, manquera l’arrivée de l’ordinateur
personnel, convaincu que les gens ne veulent pas un ordinateur dans leur maison.
34
35
36
37
38
39
4.3
Diversification des langages de programmation 1954–
1964
Avec la distribution croissante des ordinateurs dans la population et les
utilisations de plus en plus variées, les logiciels devenaient de plus en plus importants. Néanmoins, avant l’arrivée de l’ordinateur personnel (1977), personne
ne pensait à vendre seulement des logiciels, tout le monde pensait encore en
paquet : ordinateur et logiciel se vendent ensemble, tout à fait préfabriqué sur
mesure comme chez IBM, ou avec un minimum de programmes mais tout un
manuel pour ajouter soi-même des choses comme chez DEC.
Dans une première période (1950–1954) le problème de base était : comment
construire un langage de programmation ? quels principes, quels outils peuvent
aider dans l’élaboration d’un langage de programmation ? Une fois que ces questions fondamentales clarifiées, on voit, à partir de 1954, les premières vraies
langages de programmation avec utilisation très générale qui sont développés.
C’est à partir de 1956 qu’une diversification selon l’usage et le style de la langue
commence. On peut distinguer en gros trois styles de langue de programmation :
1. les langues impératives, toute ligne est une commande (comme FORTRAN
ou FLOWMATIC) ;
2. les langues fonctionnelles, toute ligne est une fonction (comme LISP) ;
3. les langues orientées objet, chaque ligne spécifie un objet de programme
et ses propriétés et communications avec d’autres objets (object oriented
(comme Simula-67 et Smalltalk, seulement dès les années 1970)
4.3.1
Premières langues (autour de 1954)
Le développement de langages de programmation propres ne commence qu’à
partir de 1952, quand plusieurs ordinateurs sont construits et doivent maintenant être utilisés par différents groupes de clients. Comme disait Grace Hopper, l’une des pionnières de la programmation, on ne peut pas attendre q’un
général apprend les maths seulement pour faire qqc avec cette machine coûteuse
qu’il a achetée. Il faut un langage intermédiaire, quelque part entre la langue
quotidienne et la liste d’instructions élémentaires de la machine. Les sortes de
langages de programmation qui sont développées dans les années 1952–1956
dépendent pour leur architecture du groupe d’utilisateurs en vue, scientifique,
militaire ou commercial.
Programmer ‘trier’ sur l’UNIVAC Pour l’UNIVAC, Eckert et Mauchly
avaient en vue des utilisateurs d’affaires, cad. des institutions gouvernementales
comme le Bureau of Census, mais aussi des sociétés privées comme Totalisator Company ou Northrop Aircraft Company. En particulier, avec l’UNIVAC
File Computer, ils voudraient être concurrentiels avec IBM et ses machines aux
cartes perforées pour classer, trier et organiser des tas de données. Déjà très
tôt, dès 1948, Mauchly avait organisé une équipe de programmeu(s/r)eu(r/se)s,
pour faciliter l’accès à la machine pour les utilisateurs. Chef de l’équipe était
40
Grace Hopper et le groupe avait comme membres des anciennes programmeuses
de l’ENIAC comme Jean Bartik et Betty Holberton. Dans un premier temps, ils
développaient un Short Code ce qui correspondait à un “dictionnaire électronique”.
Plus tard, Betty Holberton commença à développer des algorithmes très
généraux pour trier des données, mais aussi trier des séquences d’instructions.
Avec ces algorithmes on pouvait prendre plusieurs sous-routines, et les classer
de manière à ce que les références entre variables de ces sous-routines fonctionnent comme voulu, et que l’attribution de positions de mémoire pour ces
variables soit exécutée comme voulu. Ces algorithmes, bienque d’abord conçus
comme des équivalents des machines à trier d’IBM si on veut, deviennent par ces
généralisations des précurseurs des algorithmes de compilation. C’est ainsi que
la Eckert-Mauchly Computer Corporation développera l’un des premiers compilateurs propres (compiler ). Ce programme de compilation est appelé A-O, et
développé par Grace Hopper et autres en 1952. Une version améliorée, l’A-2,
sera mis sur les UNIVACs vendus dès 1953. Le programme est assez primitif et
étend en fait des pièces de pseudo-code automatiquement. Une sorte de Short
Code améliorée avec allocation automatique des resources.
Programmer le Z4 à Zurich En Suisse, l’université de Zurich avait acheté
de Konrad Zuse le Z4 (aux relais) en 1949–50. Plusieurs scientifiques commencaient à utiliser cette machine pour leurs calculs, et à cause de quelques exposés
de Zuse sur sa méthode de programmation, aussi quelques uns commençaient à
s’intéresser à la programmation comme problème en et pour soi. Heinz Rütishauser développa en 1952 une langue algébrique pour programmer le Z4 (avec une
itération mais sans conditionnel). L’expansion des parenthèses et des boucles,
ainsi qu’une version d’indexage de valeurs y étaient présentes. C’est probablement le premier “compiler”.
Indépendamment de Rütishauser, mais aussi en contact et avec Zuse et le Z4,
l’Italien Corrado Böhm développerait aussi à Zurich pour sa thèse une langue
de programmation avec compilation (1950–52). Son langage consistait seulement d’assignments (allocations). En 1955–1959, F.L. Bauer et K. Samelson,
développeraient les idées de Böhm, dans leur article “Sequential formula translation”, publie dans les Comm. de l’ACM en 1959. Ce sera ultérieurement une
influence importante sur les langages de programmation (en particulier ALGOL) et marquera la fin d’une sorte d’évolution parce que dans leur langage,
41
les expressions symboliques des mathématiques seront devenues le langage de
programmation lui-même.
Programmer des formules mathématiques sur le Whirlwind Pour les
application scientifiques, on avait en effet surtout besoin d’une méthode automatique pour ‘traduire’ des expressions mathématiques en code pour la machine.
En mathématiques, il ne faut pas déclarer les variables utilisées, et l’ordre des
opérations se fait par expérience, tandis que sur un ordinateur, trouver une location de mémoire pour une variable et des méthodes pour le répérer plus tard,
ainsi qu’un ordre strict pour effectuer les opérations sont impératives. A cause
de l’importance des problèmes scientifiques dans l’utilisation des premiers ordinateurs, le langage des mathématiques et ce problème de traduction aura une
influence considérable sur le développement et la forme des premiers langages
de programmation.
Sur le Whirlwind, ordinateur avancé développé à MIT pour l’armée américaine,
on voulait, entre autres, calculer des équations différentielles complexes, pour
simuler des phases d’aerodynamique. Parce qu’il y avait une grande lacune entre
la notation de ces maths avancés et les séquences d’instructions élémentaires à
mettre sur le Whirlwind, deux mathématiciens, Laning et Zierler, écrivaient une
routine pour traduire des expressions symboliques mathématiques en séquences
d’instructions automatiquement. Leur “A Program For Translation of Mathematical Equations for Whirlwind I”, publié en 1954 donne pour la première fois
(à part Curry et les Allemands) des routines pour analyser des expressions
mathématiques et traduire cela automatiquement dans des séquences d’instructions avec allocation de positions de mémoire. L’analyse des parenthèses
ainsi que le concept de stack (empilement) y sont introduits (la précédence des
opérateurs manque encore). Tout de même, c’est pas un langage de programmation propre, parce que seulement des formules math. peuvent être traduits,
pas des expressions générales.
Développer FORTRAN pour l’IBM 704 Chez IBM, naturellement, on
travaillait déjà depuis 1952 à l’élaboration d’un langage de programmation.
L’équipe était dirigé par John Backus, qui en 1954, ayant lu le rapport de La-
42
ning et Zierler, essaya de généraliser leurs idées dans un langage complet qui deviendra FORTRAN, l’IBM Mathematical FORmula TRANslating system (pour
l’IBM 704). Une première version sera publié en 1954 comme Automatic Speedcoding, en 1957, FORTRAN est présenté et dès 1958 le langage sera inclus pour
tous les ordinateurs d’IBM et deviendra un des langages de programmation
les plus utilisés. En FORTRAN, les expressions mathématiques et de contrôle
peuvent être traduit en instructions de la machine automatiquement, on pouvait définir les types de données, en plus, on pouvait ajouter des commentaires
(que la machine ignore en traduisant) et il y avait une variété de commandes
entrée/sortie (presque toujours absent chez les précurseurs et très important
pour rendre FORTRAN populaire, parce qu’on peut commander et la machine
à calculer et ses périphériques I/O).
4.3.2
Deuxième phase : Différenciation (1955–1965)
Avec l’élaboration d’un compilateur, le principe d’empilement, l’analyse des
parenthèses etc. les principies essentiels des premiers langages étaient connus.
Une diversification, surtout selon les communautés qui utilisaient les ordinateurs, aura lieu dans les années 1950-1960.
Langues pour le traı̂tement des données pour les entreprises commerciales L’équipe de Grace Hopper à UNIVAC développait MATH-MATIC
et plus important FLOWMATIC (1955–57). Ce dernier était un langage conçu
pour les entreprises commerciales ou bureaux d’affaires et avait une écriture
très proche de langue quotidienne. Ce langage sera plus tard l’inspiration pour
COBOL (Common Business Oriented Language) en 1959 et SNOBOL (String
Oriented symbolic Language) en 1962–67, deux langues spécialisées, le premier
pour les applications d’affaires, le second pour les manipulation des strings
(chaı̂nes de symboles).
43
Langues pour les problèmes scientifiques En 1958, John McCarthy, l’un
des pères de l’intelligence artificielle et professeur à MIT, développait LISP (LISt
Processing), particulièrement pour la programmation des problèmes en IA. C’est
le premier langage qui est purement fonctionnel (et qui s’inspire du calcul λ de
A. Church d’ailleurs). A cause de ce caractère fonctionnel, le programmeur est
constraint à tenir une certaine discipline dans ses programmes, cette discipline
inspira les défendeurs du style dit structural dans les années 1960. Chaque ligne
est une fonction (et en théorie tout le programme peut être écrit comme une
seule fonction), et les fonctions sont définies par récursion (on appelle la fonction
dans la fonction même), ce qui est un alternatif pour l’itération. Ce langage,
d’un intérêt théorique, sera utilisée souvent dans des cours d’informatique, et
inspirera le groupe d’informaticiens du projet ALGOL.
44
5
La naissance d’une discipline : De la cybernétique
à l’informatique
L’informatique aujourd’hui est devenu une vaste discipline qui peut avoir
plusieurs visages, dépendants des universités et pays qui l’organisent. On a
une informatique théorique/mathématique, informatique/robotique, informatique/ingénieurie, informatique/média... L’informatique comme discipline est
pourtant assez jeune, disons dès le début des années 1960, d’abord aux EtatsUnis, puis en Europe (en France p.ex. promu par l’état dans le “Plan Calcul”
de 1966) et finalement dans le reste du monde. Une sorte de précurseur de
l’informatique est la cybernétique qui était très à la mode dans les années 1950.
5.1
La cybernétique
Le mot “cybernétique” a été introduit par Norbert Wiener dans son livre
Cybernetics. Or Control and Communication in the Animal and the Machine de
1948. Cette prétendue nouvelle science s’inspirait de nouveaux développements
techniques et théoriques de la Deuxième Guerre Mondiale. La naissance de
l’ordinateur, la théorie de l’information de C.E. Shannon, les systèmes “antiaircraft” etc. semblaient avoir des propriétés en commun et les concepts en
commun semblaient se généraliser et s’appliquer aux autres sciences comme la
biologie, la sociologie, la psychologie etc. Le concept central était “feedback”
(rétro-action) et information.
Sur des conférences cybernétiques des années 1950 (en particulier les conférences
Macy 1946–1955), on retrouvait une diversité de chercheurs, entre eux pas peu
de pionniers en ‘informatique”. Dans cette ambiance, une “théorie des automates” se formait. L’idée de base était tirée d’un article de McCullough et Pitts
(1943), “A Logical Calculus of the Ideas Immanent in Nervous Activity”. On y
trouve un rapprochement entre le système neural, l’ordinateur et la logique :
Because of the “all-or-none” character of nervous activity, neural events and the
relations among them can be treated by means of propositional logic. It is found
that the behavior of every net can be described in these terms with the addition
of more complicated logical means for nets containing circles ; and that for any
logical expression satisfying certain conditions, one can find a net behaving in
the fashion it describes.
One more thing is to be remarked in conclusion. It is easily shown : first, that
every net, if furnished with a tape, scanners connected to afferents, and suitable efferents to perform the necessary motor-operations, can compute only such
numbers as can a Turing machine ; second, that each of the latter numbers can
be computed by such a net [...] This is of interest as affording a psychological
justification of the Turing definition of computability and its equivalents, Church’s λ – definability and Kleene’s primitive recursiveness. If any number can be
computed by an organism, it is computable by these definitions, and conversely.
Deux parties importantes de l’informatique future (logique booléenne et la machine de Turing) se trouvent déjà dans cet article.
45
La théorie des automates gagnait en poids avec la contribution de John
von Neumann, General and logical theory of automata (Hixon lecture 1951)
et pendant quelques années c’était l’un des paradigmes les plus populaires
pour faire de la recherche théorique sur l’ordinateur. Parallèle à cette recherche
théorique, on a de la recherche pratique, chez les ingénieurs d’ordinateurs (qui
se désintéressaient assez vite à la cybernétique), et chez les ingénieurs de robots (qui restaient cybernéticiens). La fin de cette époque de multidisciplinarité
se situe autour du milieu des années 1950. Cela est symptomatique dans les
actes d’un colloque de 1955, Automata Studies, éd. par Shannon et McCarthy
en (1956), on y voit une division entre cybernétique (plus tard ‘artificial intelligence’) et informatique
“”The papers have been divided into three groups. The first group consists of
papers dealing with automata having a finite number of possible internal states
[i.e, the brain and all actual physical machines] ... The second group of papers
deals with the theory of Turing machines and related questions, that is to say,
with automata having an unlimited number of possible states ... The third section
of the book contains papers relating more directly to the synthesis of automata
which will simulate in some sense the operation of a living organism”
Le deuxième groupe, à cette époque encore ‘théorie des automates’, deviendra
le noyau de l’informatique théorique des années 1960.
5.2
La naissance de l’informatique
Quand les premiers départements d’informatique (ou de cybernétique, de
traı̂tement d’information etc.) commencent à s’organiser dès les années 1960, il
fallait décider quoi inclure dans le curriculum d’un étudiant d’informatique. Cela
dépend largement des intérêts présents dans l’université que organise la formation, mais en gros, on peut distinguer entre une informatique qui est théorique
(concepts abstraits, souvent mathématiques), et une informatique qui est plutôt
pratique (ingénieurs, orientée vers la machine ; ou, applications, orientée vers la
programmation). Dans une formation informatique on trouve les éléments des
deux orientations, et ici on veut retracer comment certains éléments de cette
formation se sont installés. Il s’agit de 1) la logique booléenne ; 2) le concept de
la machine universelle ; 3) l’idée d’une science de programmation.
5.2.1
Les circuits électroniques et la logique
En 1937 C.E. Shannon défend sa thèse magistériale, A Symbolic Analysis
of Relay and Switching Circuits (publié en 1938), où il expose l’application
de la logique binaire/booléenne aux circuits électroniques (avec 1+1=1 !). Les
principes de base sont les suivantes :
– 0 = circuit fermé ; 1= circuit ouvert
– circuit en parallèle = multiplication
– circuit en série = addition
Très important dans Shannon sont les exemples, là il donne la construction des
fonctions logiques, d’une fonction de sélection, d’un addition binaire, etc. Ce sont
46
Fig. 13 – Circuit pour l’addition binaire d’un nombre avec un chiffre (après
Shannon)
ces exemples qui montrent à tout le monde, que la construction d’une calculatrice
électrifié est possible, et qu’on peut combiner des fonctions élémentaires dans un
réseau compliqué en utilisant des techniques mathématiques de simplification si
nécessaire.
Bienque la technique de Shannon et autres reste valide jusqu’aujourd’hui,
on a depuis inventé encore d’autres techniques. A mentionner particulièrement
est l’application de la logique probabiliste à la construction des circuits avec
des éléments instables dans les années 1950. On avait vu dans la construction
des premiers ordinateurs, que souvent des éléments ne marchaient pas, et qu’il
faudrait inclure une certaine ‘rédondance’ d’éléments pour sauvegarder le bon
fonctionnement en cas qu’un seul élément ne marche pas. Si on donne à chaque
élément d’une machine une certaine probabilité entre 0 et 1 de fonctionnement
normal (p.ex. 1/2 serait sur deux valves vides, en moyenne, un ne marchera pas),
on peut arriver à un calcul de circuits qui correspond aux logiques probabilistes.
Des papiers importants sur ce thème sont E. F. Moore and C. E. Shannon,
“Reliable Circuits Using Less Reliable Relays” (1956) et John von Neumann,
“ Probabilistic Logics and the Synthesis of Reliable Organisms from Unreliable
Components”, les deux dans Automata Studies (1956).
5.2.2
Comment la machine de Turing (modèle de calculabilité) est
devenu un concept central en informatique
La thèse de Church-Turing comme aboutissement du programme de
Hilbert Dans la suite d’un programme mathématique très ambitionné, le programme dit “formaliste” de Hilbert, trois logiciens/mathématiciens obtiennent
un important résultat en 1936. Le programme de recherche de Hilbert insistait sur la forme des sytèmes mathématiques, cad. l’interprétation reste hors du
système, et on peut concevoir les maths comme un jeu d’échec, un jeu formel
de signes, mais un jeu fini. Les prémisses sont que toutes les mathématiques
doivent découler d’un ensemble fini d’axiomes correctement choisis ; que les
démonstrations sont faites avec des moyens finis (mais pas nécessairement construc47
tifs !) et qu’il peut être démontré que cet ensemble est cohérent et consistent
(comme p.ex. la géométrie). Chez Hilbert, on trouve une croyance très accentuée
qu’un tel projet doit aboutir, une croyance dans le progrès des sciences en général
(“il n’y a pas de ignorabimus dans les maths” ; “wir muessen wissen, wir werden
wissen”).
Trois logiciens (E.L. Post, A. Church et A. Turing) trouvent presqu’en même
temps (1936) le résultat qu’un algorithme général pour les mathématiques n’existe
pas, et, résultat qui en est l’autre face, que tous les calculs imaginables se laissent
exprimer dans certaines formalismes. Tandis que les approches de Post et Church
partaient de systèmes existants, axiomatiques de la logique pour arriver à trouver qu’ils pouvaient formaliser n’importe quelque calcul, Turing poursuit une
autre route. Il commence par l’analyse de ce qu’est un calcul :
All arguments which can be given are bound to be, fundamentally,
appeals to intuition, and for this reason rather unsatisfactory mathematically. The real question at issue is “What are the possible
processes which can be carried out in computing a number ?
We may now construct a machine to do the work of this computer
[the abstract computor]. To each state of mind of the computer corresponds an “m-configuration” of the machine. The machine scans
B squares corresponding to the B squares observed by the computer.
In any move the machine can change a symbol on a scanned square
or can change any one of the scanned squares to another square distant not more than L squares from one of the other scanned squares.
The move which is done, and the succeeding configuration, are determined by the scanned symbol and the m-configuration.
Utilisant cette abstraction, Turing commence à définir des machines qui peuvent
faire certaines opérations/calculs et parvient finalement à la défintion d’une machine universelle, machine qui peut simuler n’importe quel calcul resp. machine.
Bienque le résultat de Post-Church-Turing semble négatif (il n’y a pas d’algorithme général pour les maths), ils obtiennent en fait plutôt un résultat positif : N’importe quel calcul peut être effectué par une machine de Turing, calcul
lambda, forme normale etc. Autrement dit, il y a des formalismes qui peuvent
exprimer tout ce qui est calculable. Au lieu de non-décidabilité vient la calculabilité. Cette thèse est appelée thèse de Church-Turing : “Anything that can
be calculated by a human being, can be computed by a Turing machine (and
conversely)”.
48
L’insertion de la machine de Turing dans l’informatique comme discipline Bienqu’aujourd’hui le lien entre les ordinateurs comme machines physiques, construites par les ingénieurs, et les machines de Turing, machines théoriques
et logiques, semble évident, historiquement, ce n’était pas le cas. Biensûr, quelques
fondateurs comme Turing et von Neumann avaient dans les années 1950 indiqué
de liaisons très générales entre ces machines puissantes et les idées en logique
pure. En fait, théorie et machine étaient encore très éloignées l’une de l’autre,
et la “théorie des automates” (comme on appelait alors cette branche théorique
de l’informatique pas encore née) était plutôt une théorie générale qui pouvait
aider à fixer les possibilités des nouvelles machines en général, mais pas en aucun détail. Ce n’est que dans les années 1960, quand lentement se forment les
départements d’informatique et que des manuels sont publiés, que la machine
de Turing y trouve sa place et devient le modèle préféré pour les recherches en
informatique théorique.
Pour l’insertion de la machine de Turing dans la théorie des automates, il
faut revenir à la naissance de la cybernétique et McCullough et Pitts (1943)
ou Von Neumann (1951). Les articles de Mccullough, Pitts et von Neumann
partent plutôt d’une resemblance générale, ou même prennent des métaphores
comme point de départ. Deux résultats importants des années 1950 fortifieront
les liens proposés d’une manière plus concrète :
1. E.F. Moore, “A simplified universal Turing machine” (1952), construit
une machine de Turing universelle avec 15 états (variation multitape), et
suggeste qu’un ordinateur digitale peut implementer cette machine
2. Hans Hermes, “Die Universalität programmgesteuerter Rechenmaschinen”
(1954), démonstration qu’on ordinateur digitale peut simuler une machine
de Turing, d’où il s’ensuit qu’un ordinateur digitale est universel (mais fini
biensûr)
Néanmoins la distance entre la machine de Turing et un ordinateur réel restait
assez grande. Cet intervalle fût franchi autour de 1960 quand l’informatique
comme discipline prend lentement forme. Dans l’élaboration des concepts pour
l’informatique naissante, on tente de modifier la machine originelle de Turing
pour qu’elle ressemble plus à une machine réelle. Ce but est clairement énoncé
par Hao Wang (qui travaillait chez Burroughs, puis Bell et finalement IBM)
dans un article, “A variant to Turing’s theory of computing machines” (1957) :
The principal purpose of this paper is to offer a theory which is closely related to
Turing’s but is more economical in the basic operations. [...] This self-contained
theory will be presented, as far as possible, in a language which is familiar to
those who are engaged in the use and construction of large-scale computers.
Ceci mène à une description d’une machine de Turing comme ensemble de média
et opérations ressemblant plus à un ordinateur : No physically realizable generalpurpose machine is truly general-purpose in the sense that all theoretically solvable computation problems can be solved by the machine. In each case, the storage unit is necessarily finite : the lenght of each instruction word is finite, and
there are only a definite finite number of adresses in the storage. [...] Consider
first a fictitious machine B which has an indefinitely expandable internal (paral49
lel) storage and which uses in addition a tape (a serial storage) that is divided
into a sequence of squares (cells) and could be extended both ways as much as we
wish. [...] Suppose that the addresses in the internal storage can be any positive
integers. Corresponding to the four types of operation, there are four types of
basic instructions :
(1) → : shift the head one square to the right, i.e. shift to scan the next
square to the right of the square originally under scan, the same purpose
can be accomplished by shifting the tape one square to the left
(2) ← : shift the head one square to the left
(3) * : mark the square of the tape under scan
(4) Cn : a conditional transfer
Of these, (1)-(3) are single instructions, while the conditional transfer is of the
form m.Cn , according to which the m-th instruction word (i.e., the instruction
word at the address m) is a conditional transfer such that if the square under
scan is marked, then follow the n-th instruction ; otherwise (i.e., if the square
under scan is blank), follow the next instruction (i.e., the (m+1)-th instruction).
Ce que Wang décrit est maintenant connu comme machine à registres (‘register
machine’), un concept équivalent à la machine de Turing, mais plus proche d’un
ordinateur concret dans sa description.
5.2.3
Programmation comme une discipline scientifique : L’apport
du mouvement d’ALGOL
Depuis 1955 un groupe en Allemagne se rassemble pour définir un langage
de programmation général : F.L. Bauer, H. Bottenbruch, H. Rütishauser, K.
Samelson ... Il s’y joint une commission de l’ACM : Alan Perlis, J.W. Backus
(FORTRAN), John McCarthy (LISP). Cette commission internationale, y compris les autres pays européens et la Russie, avance sur l’idée d’un langage de
programmation internationale et portable sur n’importe quelle machine et des
définitions d’un langage de programmation internationale sont proposées.
– ‘Preliminary report : international algebraic language.’ (1959), éd. par
Perlis et Samelson
– ‘Report on the algorithmic language ALGOL 60’ (1960), éd. par Backus
– ‘Revised report on the algorithmic language ALGOL 60’ (1962), éd. par
P. Naur
– ALGOL 68
Bienque ALGOL (pour ALGOrithmic Language) ne sera jamais un grand succès,
en particulier pas dans les Etats-Unis parce que là les entreprises de construction d’ordinateurs comme IBM et UNIVAC avaient déjà leurs langages sur
le marché. Néanmoins, ALGOL sera très important pour le développement
d’autres langages très largement utilisées (comme Pascal p.ex.), ainsi que pour
le développement de l’informatique comme discipline. ALGOL, ensemble avec
LISP, sera l’un des langages les plus utilisés dans l’enseignement académique de
la programmation.
Avec ALGOL va de pair une réflexion sur les logiciels. Tandis qu’au début,
les programmes étaient écrits seulement pour un très petit groupe d’opérateurs,
50
les années 1960 avaient montré qu’un programme peut avoir un ‘public’ plus
large. Un programme peut être modifié, élargi, généralisé par d’autres ; on peut
partager un programme avec d’autres qui travaillent sur une autre machine ; on
peut vouloir changer un programme dont on ne connaı̂t pas l’auteur et dont
le code est presque illisible etc. Ces problèmes de portabilité (comment porter un programme pour machine X sur machine Y) de compréhension et de
maintenance (comment comprendre ce qu’il y a dans un programme afin de le
changer ou modifier) font partie de la crise du logiciel (‘software crisis’) des
années 1960-1970.
L’une des réponses (plutôt théoriques) à ces défis de la crise du logiciel
étaient les travaux de E.W. Dijkstra, A. Perlis, D. Gries, C.E.R. Hoare, J.-O.
Dahl et autres dans les années 1960 et 1970. Ils étaient inspirés par le mouvement ALGOL, et ils lanceront l’idée de structured programming (la programmation structurée) pour instaurer plus de discipline et plus de carté dans les
programmes.6 P.ex. sans GOTO pour éviter la programmation dite ‘spaghetti’ ;
aussi avec déclaration de tous les variables utilisées ; avec des preuves qu’un
programme fonctionne ou au moins stoppe à un certain moment, problèmes de
synchronisation dans des systèmes de multi-programmation etc. Ils sont quasiment fondateurs de la programmation comme science.
Un fragment du livre Structured programming (1972), texte de Dijkstra,
6 Dahl développera aussi SIMULA-67 une langue de programmation qui vient d’ALGOL
mais, en incorporant des idées de “structured programming”, contient déjà quelques caractéristiques des langues orientés objet.
51
6
6.1
L’époque de “time-sharing”
Batch-processing vs. time-sharing
Avec la prolifération des ordinateurs dans les universités, laboratoires, administration, commerce et industrie dans les années 1955–1965, les demandes
qu’on posait aux systèmes devenaient de plus en plus diversifiées et de plus en
plus spécifiques pour ne pas dire individuelles. Deux formes d’ordinateur étaient
disponibles. D’abord il y avait les “mainframes” (genre IBM), où seulement
des opérateurs entraı̂nés pouvaient opérer la machine, les utilisateurs devaient
préparer leurs programmes sans machine, perforer les programmes sur des cartes
et apporter le masse de cartes à la machine, où les opérateurs introduisaient les
cartes dans la machine. A la fin du calcul, des cartes sortaient de la machine, les
résultats, que les utilisateurs pouvaient maintenant rapporter dans les bureaux.
Ce style d’utilisation et opération de l’ordinateur était appelé traı̂tement par
lots (“batch-processing”). A part les “mainframes”, on avait depuis 1958–1960
(p.ex. la série PDP, les SDS etc.) des “minicomputers”, où l’utilisateur pouvait
interagir directement avec la machine. Biensûr le temps qu’un seul utilisateur
pouvait avoir avec la machine était très limité et on devait réserver d’avance
quelques heures sur le “minicomputers”. Dans les deux cas, c’était le temps de
la machine qui était considéré comme cher, le temps des êtres humains comme
moins cher. Par conséquence, l’utilisateur devait bien organiser et préparer son
temps (en direct ou en indirect) avec l’ordinateur. Une interaction en temps réel
(‘real time’) n’était presque pas possible.
A cause de ces limites, l’idée de “time-sharing” (temps partagé) est née à
la fin des années 1950. L’idée était que plusieurs utilisateurs peuvent travailler
en même temps sur un seul ordinateur par voie de stations à distance comme
p.ex. un ‘teletype’, sorte de machine à taper qui, par cable téléphonique, pouvait
communiquer avec l’ordinateur central. Biensûr, ‘en même temps’ est proprement dit impossible s’il s’agit d’un ordinateur séquentiel, mais comme l’ordinateur travaille beaucoup plus vite que l’être humain, les utilisateurs peuvent
avoir l’impression de travailler seul sur un ordinateur, tandis qu’en réalité leurs
entrées pour la machine sont stockés en mémoire tampon et mises dans une file
d’attente pour être exécuté par l’ordinateur.
L’idée de ‘time sharing’ est le plus souvent attribuée à l’informaticien Bob
Bemer en 1957 ou au mathématicien John McCarthy qui écriva en 1959 une
proposition pour utiliser l’IBM 7090 à MIT avec partage de temps. L’une des
premières installations d’un tel système est en 1962 par McCarthy, ensemble
avec Fredkin (l’un des ingénieurs du PDP-1) et J.C.R. Licklider (directeur de
recherche de BBN et adviseur pour l’armée américaine) sur un PDP-1. La
réalisation d’un système à partager le temps pour un ordinateur plus large,
l’IBM 7090, sera la tâche de Fernando J. Corbató à MIT, dont le système CTSS
(Compatible Time-Sharing System) sera publié en 1962. Autres systèmes seront
développés à Berkeley, à Rand avec le Johnniac (JOSS) etc.
Un développement ultérieur, d’abord pour envelopper CTSS dans un système
d’exploitation générale et flexible (voyez Multics), plus tard la transition de
52
“time-sharing” au réseau d’ordinateurs (Arpanet), se fera dans le cadre du Project MAC (the project on MAthematics and Computation, plus tard conçu
comme acronyme de Multiple Access Computer, Machine Aided Cognitions, ou
encore Man and Computer). Le projet MAC était installé à MIT et financé
par ARPA (Defense Advanced Research Projects Agency). ARPA avait été créé
pour répondre aux avances technologiques qu’avait fait l’U.R.S.S., notamment
le Spoutnik.
Dans la structure de l’ARPA, le département Information Processing Techniques Office (IPTO) était crée sous J.C.R. Licklider. Licklider était directeur
entre 1962 et 1964, il était suivi par Ivan Sutherland (1964–1968), et puis par
Larry Roberts (1968–1972). L’ARPA était l’agent majeur pour le financement
des recherches en informatique pendant cette période. Sous la guidance de Licklider, le développement de “time-sharing” était financé massivement (à part
aussi de l’IA), un effort poursuivi par ses successeurs dans cette fonction.
6.2
Time-sharing : Changements en software et hardware
La transformation du mode d’utilisation de l’ordinateur par le “time-sharing”
implique des modifications de la machine elle-même mais surtout des outils de
programmation.
Hardware Dans le hardware de la machine, on a besoin d’un “interrupt”
(interruption) qui peut arrêter temporairement le cycle des opérations dans la
machine, et qui, après l’arrêt, résynchronise les opérations dans le cycle. Parce
que chaque utilisateur avait besoin d’une portion de mémoire, pour stocker leurs
programmes, le mémoire fixe (en forme de disques durs, mais aussi grand qu’un
frigo) était élargi. Pour que plusieurs utilisateurs aient accès à la machine, on
avait besoin de plusieurs outils pour entrer des données, des “flexowriters” (machines à taper pour la machine), ou plus tard appelés “teletypes”, l’accès de l’utilisateur à la machine. Egalement, pour lire les résultats, l’ordinateur ‘répondait’
par ces mêmes flexowriters (dans un couleur différent). Avec le “teletype”, le circuit qui mets l’utilisateur en direct avec l’ordinateur est complet. Plus tard, un
écran sera utilisé pour la représentation de cet interaction homme-ordinateur.
Allocation de resources Si plusieurs utilisateurs utilisaient un ordinateur,
il devient nécessaire, pour le temps de l’utilisation, de leur réserver une partie
du mémoire, pas accessible aux autres. Aussi, on doit éviter qu’un utilisateur
peut effacer parties du programme central. Un système devient donc nécessaire
pour organiser ce partage de mémoire (avec mémoire virtuelle), mais aussi pour
organiser l’exécution des demandes des utilisateurs (qui viennent dans un ordre
aléatoire et asynchrone) par l’unique unité arithmétique. Le même problème
est valide pour l’utilisation à plusieurs des périphériques comme les bandes
magnétiques, les imprimeurs etc. A cause de ces problèmes, pour la première fois,
des systèmes d’exploitation (‘operating system’, OS) deviennent indispensables
pour utiliser un ordinateur.
53
Fig. 14 – Un exemple d’une configuration partage de temps dans le projet de
l’ARPA et schéma de la mémoire virtuelle
Langages de programmation conversationnelles A part les systèmes
d’exploitation, le mode de travail à temps partagé a aussi des implications pour
les langages de programmation. Tandis qu’avant 1964 presque tous les langages
étaient impératives et devaient être compilées avant exécution (des choses qui
correspondent à l’utilisation en lots, d’abord préparer tout et alors un seul tour
d’exécution), maintenant une autre sorte de programmation devient possible,
celle où on interagit plus directement avec l’ordinateur, où les pièces de code
sont interprétées selon que l’on les introduit dans le teletype, et selon qu’on
change certains paramètres ou pièces de code. Au lieu de langages compilés,
dès 1964, plusieurs langages interprétés seront développées. On les appelle, à
l’époque, aussi langages conversationnels (ou bien interactifs).
Ce n’est pas par accident que John McCarthy, développeur du premier langage fonctionnel LISP (1958), était aussi l’un des inventeurs de “time-sharing”.
Il avait besoin d’un tel système pour exploiter et explorer les caractéristiques
de son langage nouveau. Les langages conversationnels sont en fait une réponse
partielle au défi de repenser l’interaction homme-ordinateur. Dans un papier influentiel, “Man-Computer Symbiosis” (1962), J.C.R. Licklider avait analysé la
relation entre homme et ordinateur et avait trouvé que, tandis que l’ordinateur
est mieux que l’homme à rapidement exécuter des tâches longues et répétitives
(comme les calculs, administration etc.), l’homme est mieux que la machine
quand il s’agit d’explorer les choses, et trouver des solutions pour les problèmes.
54
De là, pour Licklider, il s’ensuit que la machine et l’homme se complementent
mutuellement et que le développement de l’ordinateur et l’informatique devrait
s’inspirer de ce fait. Avec les langages conversationnels p.ex. l’homme peut essayer plusieurs idées et calculs, et la machine va vite répondre et calculer. Cette
communication rapide est un système de rétroaction/feedback, où l’homme apprend de la machine comment changer ses idées et que la machine exécute les
idées changeantes.
Les plus connus et les plus influentiels des langages conversationneles sont
LISP, BASIC (Beginner’s All-purpose Symbolic Instruction Code, dév. par Kemeny et Kurtz, 1964 à Dartmouth) et APL (A Programming Language, notation inventée en 1957 par K. Iverson et dév. comme langue de programmation
1965–1966 à Harvard).
Applications C’est seulement avec l’avènement des “minicomputers” et du
“time-sharing” que des communautés de programmeurs commencent à se dédier
à l’écriture d’une variété d’applications petites, souvent récréatives. On les appelle souvent “hackers”. Avant, l’écriture des programmes était fermement en
mains des programmeurs des entreprises d’ordinateurs (qui développaient des
programmes généraux pour les utilisateurs), ou, en mains des programmeursutilisateurs, qui pour la plupart restaient entre les limites imposées par les programmes des firmes. La seule exception étaient les utilisateurs scientifiques, qui
développaient des pièces de code spécifique pour les problèmes scientifiques.
Maintenant, avec cette ‘ouverture’ de l’accès à l’ordinateur, la communauté des
personnes qui programment va se décupler et la programmation deviendra pour
eux un sport, “fun”. Comme ça, l’exploration de ce qui peut être fait avec les ordinateurs sur le plan du software commence. Des innovations importantes à cette
époque sont p.ex. les premiers jeux d’ordinateur (Spacewar, Space Travel...), les
premiers vires (Worms), les premiers éditeurs de texte et de typographie ...
6.3
Systèmes d’exploitation
Avec l’avènement de “time-sharing” on a également l’avènement des systèmes
d’exploitation. Avant 1964, ces systèmes d’exploitation définissaient surtout la
communication entre ordinateur et périphériques (bandes magnétiques, imprimeur...). Avec le “time-sharing”, il devient nécessaire de définir la communication entre la machine, ses unités entrée/sortie et ses multiples utilisateurs.
OS/360 Le système d’exploitation (OS) OS/360 était livré ensemble avec
la ligne 360 des ordinateurs IBM. Comme l’IBM/360 était développé comme
système flexible et extensible, le système avait comme tâche de définir et organiser les communications entre l’unité centrale et ses extensions. En particulier,
parce qu’il était nécessaire que la machine la plus élémentaire (et la moins chère)
de la famille 360 soit compatible avec les conglomérats les plus compliqués de la
même famille, OS/360 avait l’architecture de la machine la plus simple comme
55
56
point de départ, et tous les additions et communications étaient construites sur
ce base. Le système est développé pendant plusieurs années sous la direction de
F. Brooks, et deviendra synonyme avec la complexité et difficulté d’écrire un
grand projet de software avec plusieurs parties et plusieurs équipes.
Le système en 1964 ne contient pas encore des programmes pour le “timesharing”, c’est seulement en 1966 que sera introduit une nouvelle version de
l’OS/360, la variante MFT (Multiprogramming with Fixed number of Tasks)
et la variante MVT (Multiprogramming with Variable number of Tasks). On
différencie dans OS/360 entre ‘job’ et ‘task’, le premier est une tâche à faire
(une routine spécifique), le dernier une tâche qui doit être exécutée à un certain
moment dans un certain ordre d’autres ‘tasks’. Le ‘task’ est donc un ‘job’ qui
doit s’insérer dans la structure de temps et machine partagées.
Multics Tandis que l’OS/360 était d’origine un système de “batch-processing”
modifié pour faire “time-sharing”, ARPA et le projet MAC à la MIT, sous la
direction de F. Corbató, avaient décidé de développer un système d’exploitation
qui est conçu dès le début comme système “time-sharing” (inspiré par CTSS
en fait). Le système Multics (Multiplexed Information and Computing Service)
sera en développement plusieurs années (1963–1969), un travail d’ensemble avec
société Honeywell, General Electric et Bell Labs. Comme OS/360, la naissance
de ce nouvel système d’exploitation très complexe ne va pas de soi et sa naissance
est retardé par plusieurs problèmes. Bell Labs stoppa son engagement en 1969,
mais leur implication sera le commencement pour UNIX.
TENEX Pendant que Multics est crée à la MIT, l’équipe de chercheurs à
Beranek Bolt et Newman (BBN, bureau de recherche en acoustique et communications), est demandé de construire un système ‘time-sharing’ pour le PDP11 du Digital Equipment Corporation (DEC). Ce sera le système TENEX, en
développement entre 1969 et 1972 (première publication). Le système sera populaire chez les utilisateurs des “minicomputers”.
UNIX Vers la fin de l’implication de Bell Labs avec le projet Multics, le
groupe des programmeurs cherchait d’autres projets. K. Thompson, D. Ritchie,
D. McIlroy, J. Ossanna et quelques autres avaient l’idée de construire une version
simplifiée mais plus efficace de Multics, qui à cette époque était devenu un
projet presque trop large et trop compliqué avec une abondance de fonctions et
possibilités. En particulier, au lieu de mettre un tel système d’exploitation sur un
“mainframe” (comme le GE 645 pour Multics), le groupe voudrait installer leur
système sur un “mini-computer”, le PDP-10. En 1969, une première version
était prête, en 1974, une version plus avancée du système était officiellement
décrite.
Des innovations importantes sont le fait que tous les objets dans le système
(ou bien fichier, ou bien périphérique, ou bien utilisateur) sont tous représentés
de la même manière (comme un “file”, un fichier) ; les hiérarchies entre fichiers
(dans les dossiers) et aussi entre utilisateurs (user-superuser) avec protection ; le
57
concept de “pipe” (tube), avec lequel on peut attacher la sortie d’un programme
à l’entrée d’un autre programme ; etc. En général, avec UNIX, une certaine philosophie de programmation est associée, où il est moins important d’avoir un
très grand program général qui fait tout, mais plutôt intéressant d’avoir une
multitude de programmes petits qu’on peut combiner et modifier aisément. Les
relations et communications entre programmes deviennent le foyer d’attention.
Pendant les années 1969–1972, K. Thompson développa le langage de programmation C comme langage pour programmer sous UNIX.
58
Fig. 16 – Publicité de General Electric pour leur système de partage de temps
59
7
7.1
L’ordinateur personnel
“Real-time” – le projet Whirlwind et ses descendants
Whirlwind Le Whirlwind, originalement conçu comme une machine pour simuler des vols en avion pour le militaire, était un ordinateur expérimental du
début des années 1950 développé dans le cadre du projet SAGE (Semi Automatic Ground Environment), un projet qui avait reçu des financements massifs de
l’armée. Le chef du projet était Jay Forrester, l’ingénieur principal R.E. Everett.
Dans cet ordinateur le ferrite core mémoire était utilisé pour la première fois,
ainsi qu’un des premiers presque compilateurs, le algebraic translator de Laning
et Zierler. C’était donc un projet pionnier, aux limites des possibilités technologiques, avec l’objectif d’avoir un ordinateur qui pouvait organiser la réaction
automatique sur une situation complexe pendant une guerre. Les données qui
venaient de radars, radio etc. devaient être communiquées et traı̂tées dans cet
ordinateur avec une vitesse qui était concurrentielle avec la vitesse de l’ennemi,
“in real time” (en temps réel).
A cause du fait que cet ordinateur devrait et calculer et communiquer en
“temps réel”, des instruments et des méthodes d’interaction plus directe avec la
machine étaient recherchées. Dans le Whirlwind, pour la première fois, un écran,
cad. un cathode ray tube (CRT), était utilisé pour visualiser certaines données,
ainsi qu’un light pen (crayon de lumière) pour interagir avec cet écran. Le light
pen sera un des précurseurs pour le souris et pour les écrans tactiles. Biensûr,
cette expérience d’interaction directe avec l’ordinateur était réservée à un très
petit groupe d’utilisateurs.
Un light pen développé pour le TX-0 (1960)
Test Computer, les TX, PDP-1 et LINC En 1951, pour tester le nouveau
type de mémoire (les tores en ferrite), on construivit une copie (amélioré en
fait) du Whirlwind qu’on appela MTC (Memory Test Computer). Parce que cet
ordinateur n’avait qu’une seule tâche, beaucoup de temps de travail restait libre
et c’était donc une occasion pour certains de rassembler de l’expérience avec un
ordinateur au contact direct. L’ingénieur principal du MTC était Ken Olson.
60
Fig. 17 – Le TX-2 et le programme Sketchpad d’Ivan Sutherland
Quand Ken Olson allait à Lincoln Laboratory à Lexington, Massachusetts,
il y commença à construire un ordinateur ensemble avec Wesley Clark, le TX-0.
Cet ordinateur était inspiré par ses expériences avec le MTC mais voulait utiliser
la nouvelle technologie des transistors sur une petite machine afin d’avoir plus
d’expérience pour la construction d’une machine plus ambitieuse à transistors,
machine qui deviendra le TX-2, autre ordinateur sur-financé du projet SAGE.
Autour du TX-2, beaucoup de développements en logiciel (p.ex. Sketchpad, mais
aussi expérience avec des réseaux) seront faits. Le TX-0 par contre deviendra
l’inspiration principale du premier ordinateur PDP-1 (1959) de DEC, entreprise
fondée par Ken Olson après son départ de la recherche académique à MIT et
Lincoln.
Wesley Clark n’avait pas joint l’aventure entrepreneuriale de Olson et était
resté à Lincoln Laboratory. Il y développa en 1962 le LINC, ordinateur qui
devrait fonctionner comme aide dans des recherches expérimentales en psychologie, biologie, chimie, médecine etc. Les instruments pour le entrée/sortie était
développés tels que le traı̂tement des signaux analogiques, le représentation des
données sur un cathode ray tube, l’interaction avec les programmes, étaient optimales. Largement inspiré de ses expériences avec le TMC, TX-0 et TX-2, clark
voulait amplifier l’expérience ‘personnelle’ d’un ordinateur, et le LINC fût l’un
des premiers ordinateurs construits dès le début pour l’usage ‘personnel’, mais
biensûr, pas comme produit de masse.
7.2
7.2.1
La naissance de l’ordinateur personnel
Visions et idées sur le futur de l’ordinateur en 1965
Au milieu des années 1960, l’idée de “time-sharing” était lentement en train
de se divulguer, le “minicomputer” était justement arrivé, et IBM venait de
61
Fig. 18 – Le LINC
lancer son système 360. Avec tous ces développements, il n’est pas surprenant,
que différentes visions sur l’avenir de l’ordinateur étaient articulées.
Beaucoup mettaient sur l’idée d’une relation différente entre utilisateur et
ordinateur, relation qui devrait évoluer vers qqc plus directe plus interactive,
mais les manières comment ils comptaient réaliser cette idée étaient assez divergentes. Pour J.C.R. Licklider, directeur de l’ARPA 1961–1962 et promoteur de
“time-sharing”, c’était surtout le symbiose entre machine et ordinateur, l’interaction, qui lui semblait important. La manière de réaliser ce projet sur le plan
technologique ou pratique lui était un peu indifférente, d’abord il comptait sur
les utilisateurs en réseau dans un système “time-sharing”, plus tard, sur des ordinateurs en réseau, et en même temps il soutenait des projets qui travaillaient
vers un ordinateur plus personnel, comme le projet de Douglas Engelbart.
Dans le team du TX-2, Ken Olson et Wesley Clark réprésentent des opinions
affiliées mais bien différentes. Ken Olson croyait dans les “minicomputers”, et
sa société DEC en était le promoteur et fabricant le plus important et influentiel. Avec les PDP, l’ordinateur devenait accessible pour plus de personnes,
et, comme l’architecture et les programmes étaient décrites en détail et donc
source ouverte, les utilisateurs pouvaient eux-mêmes changer ou modifier l’ordinateur, ou bien ajouter et contribuer des parties et programmes. Néanmoins
Olson voyait ces communautés d’utilisateurs dans un système “time-sharing” sur
un seul PDP comme un stage final. Notamment, l’idée de l’ordinateur personnel
lui était étranger : “There is no reason for any individual to have a computer in
his home.” Par contre, pour Wesley Clark, il était important, qu’un utilisateur
pouvait développer une relation personnelle et directe avec la machine. Avec le
LINC, Clark avait produit l’un des premiers ordinateurs personnels.
Une autre vision, bien influentielle sur la naissance de l’ordinateur personnel, était celle de Douglas Engelbart. Il avait conçu l’idée de l’augmentation de
l’intellect humain en 1962. Pour Engelbart, l’évolution de l’ordinateur devrait
62
Fig. 19 – Travail à NLS
aller dans la direction d’augmenter les facultés humaines, vision près de celle de
Licklider, mais plus focalisée sur les sens et les perceptions humaines. Ensemble
avec Bill English, qui était l’ingénieur du projet, Engelbart travaillait à l’université de Stanford sur un projet qui s’appellait NLS (oNLine System), financé
par ARPA et NASA (depuis 1962 à 1968). Dans le projet, Engelbart et English
développaient un système d’ordinateur avec un écran et une prototype de souris
pour selectionner des choses sur l’écran (précurseur du souris d’aujourd’hui), et
aussi une sorte de précurseur d’un éditeur de textes avec WYSIWYG (ce que
l’on voit c’est ce que l’on aura). Avec écran et souris, l’homme pouvait plus
directement apparenter ses mouvements normaux (avec la main, avec les yeux)
aux choses qui se passent dans l’ordinateur (sur l’écran). L’augmentation de l’intellect, c’est la prolongation des sens et mouvements humains par la technologie,
mettant homme et ordinateur en communication directe.
7.2.2
Xerox PARC
En 1970, la société XEROX, connue pour leurs machines de photocopies,
avait fondé un centre de recherche à Palo Alto, Xerox PARC. L’idée était
de développer le bureau du futur. Dans ce centre, plusieurs chercheurs (dont
plusieurs venaient du projet d’Engelbart ou des projets soutenus par ARPA)
développaient dans les années 1970 à 1976 les essentiels de l’ordinateur personnel. En particulier les langages orientés objet et les environnements graphiques
(GUI : Graphical User Interface) y étaient mises à point. Bienque la direction de
Xerox n’ait jamais pu réaliser le potentiel de ces recherches en termes de profit
(sauf l’imprimeur laser), le projet à Xerox PARC a été le noyau de beaucoup
d’idées que des petites entreprises à la fin des années 1970 vont recueillir. Des
gens comme Bill Gates (Microsoft) ou Steve Jobs (Apple) doivent une grande
partie de leur inspiration à Xerox PARC. En fait, on pourra même dire que certaines visions de Xerox PARC attendent encore leur réalisation aujourd’hui ou
sont en train de se réaliser, comme p.ex. le Dynabook de Alan Kay qui semble
63
Fig. 20 – L’Alto et les “fenêtres” de Smalltalk-72
préfigurer un iPad.
Alto A Xerox PARC, on développa un ordinateur personnel, l’Alto. Non seulement, le souris était partie de ce système, mais aussi un écran avec WYSIWGT
(remarquez que l’écran doit resembler un page DINA4).
Smalltalk, ou un langage de programmation orienté objet L’un des
grands novateurs à Xerox PARC était Alan Kay, développeur de la langue Smalltalk7 et, ensemble avec d’autres, des environnements graphiques.
Tandis que dans les langages impératifs ou fonctionnels, chaque ligne représente
ou bien une commande, ou bien une fonction, dans les langages orientés objet,
chaque ligne de code représente un objet et une ou plusieurs actions. Le langage,
miroitant la représentation des choses et l’association des idées dans l’esprit humain, est organisé autour des objets, auxquels sont associés des actions, des blocs
de mémoire et des relations possibles avec d’autres objets. La programmation
alors, c’est l’organisation de la communication entre ces objets. Les règles d’un
langage OO sont :
7 Deux langages de programmation ont profondément inspiré Kay, d’abord la langue de
programmation pour enfants LOGO, développée par Feurzeug et Seymour Papert en 1967,
puis la première langue orientée objet SIMULA, développée 1962–1967 par Dahl et Nygaard
à Oslo.
64
1. Chaque chose est un objet
2. Des objets communiquent par l’envoi ou la reception des messages (qui
sont eux aussi des objets)
3. Objets ont leurs propre mémoires (qui sont eux aussi des objets)
4. Chaque objet est une instance d’une classe (une classe est aussi un objet)
5. Une classe contient le comportement qui est propre aux tous objets dans
la classe (le comportement sont une liste d’objets dans un programme)
6. Pour exécuter un programme, il faut envoyer une commande au premier
objet, le reste du programme sera le message envoyé
Dans les versions successives de Smalltalk (72 et 76) les environnements graphiques pour programmer dans cette langue deviennent de plus en plus détaillés
et pratiques. On y introduit des “fenêtres” (un objet ou programme correspond
au fenêtre), dans des listes déroulantes et des ménus on trouve les propriétés
des objets ou programmes, et par des icônes on peut adresser des objets ...
7.3
Commercialisation et prolifération de l’ordinateur personnel ou PC 1977–1990
La commercialisation de l’ordinateur personnel commence à partir de 1977.
Ce sont des amateurs qui vendent un paquet d’assemblage, une puce Intel 8800,
l’une des premières microprocesseurs bon marché, et quelques pièces entrée/sortie
et mémoire. Le premier paquet qui connût un grand succès, c’est l’Altair 8800
en 1975–77, après, l’Apple I en 1977 et l’Apple II en 1978 (avec écran et lectrice
de disques de mémoire). Autres modèles de ces premières années sont le Tandy
RadioShack TRS 80 (1977–79) ou l’Atari (1980). Les supports de mémoire fixe
étaient des cassettes (bande magnétique) et des floppy disks.
Avec l’avènement de l’ordinateur personnel, on a également la naissance
d’une industrie du logiciel. Les programmes qui avant étaient livrés ensemble
avec la machine, ou bien développés par des amateurs-programmeurs deviennent
dans le processus de démocratisation de l’ordinateur des produits commerciaux.
P.ex. la petite entreprise (en 1975) Microsoft vendait une version de BASIC qui
n’avait besoin que de 4K de mémoire et qu’on pouvait installer sur un Altair
ou PDP-11. Quand IBM entra avec grand retard le marché des ordinateurs
personnels avec le IBM PC en 1981, ils achèteront leur système d’exploitation
de Microsoft, le MS-DOS base du succès futur de cette entreprise de logiciels.
Pas seulement des langages de programmation ou systèmes d’exploitation
pouvaient être vendus, des programmes-applications également. Les logiciels
tableurs p.ex. ont joué un rôle important dans la ventre des premiers ordinateurs
personnels. Visicalc, un tableur, pouvait seulement fonctionner sur un Apple et
n’a pas mal contribué à leur succès dans les années 1980 (la notion de ‘killer
app’). Les jeux vidéo, portés pour ordinateur perso, deviendront également une
industrie en et pour soi (Pong, PacMan...).
Une fois que cette sorte d’ordinateurs devient générale et un succès commercial (vers le milieu des années 1980), et qu’IBM domine le marché avec son IBM
65
Fig. 21 – L’Altair 8800 et l’Apple II
PC (dès 1981) et ses compatibles, on introduit aussi lentement des systèmes
d’exploitation avec environnement graphique. On aura l’Apple Macintosh 128K
en 1984 sur le Macintosh Lisa, le GEM (Graphical Environment Manager) sur
l’ATARI (1984–85), et finalement Microsoft Windows 1.0 en 1985. La société
Microsoft, ayant commencé avec une version de BASIC pour l’Altair 8800, deviendra, d’abord avec MS-DOS, puis avec Windows, dominante sur le marché
des logiciels / software pour IBM PC et compatibles dans les années 1980–1990.
66
Fig. 22 – La vision d’Alan Kay pour le Dynabook (début années 1970)
67
8
Le réseau des ordinateurs
8.1
Les communications après la seconde Guerre Mondiale
Réseaux téléphoniques L’un des grands projets de (télé)communications
avant la deuxième guerre mondiale était la construction et organisation de
réseaux téléphoniques nationales. Plusieurs problèmes techniques de la transmission (linéaire) des signaux ont dû être résolus, entre autres, l’optimalisation
de la capacité des cables téléphoniques, réduction de la proportion entre bruit
et information etc. La théorie mathématique de la communication qu’écrive
Claude E. Shannon en 1946–47 en sera le résumé théorique et le commencement
de nouvelles recherches et applications. La ligne téléphonique était spécialisée
dans la transmission de la voix humaine, cad. la capacité de la ligne y était
adaptée, la compression et la discrétisation du signal analogique aussi. La transmission se fait comme un courant de poulses éléctroniques (des bits si on veut, la
numérisation de la voix) ininterrompu (parce que pour le temps qu’une conversation dure, il y a aura toujours quelqu’un qui parle).
Un autre problème dans l’élaboration de ces réseaux téléphoniques (autre
que la transmission), était l’organisation du réseau, cad. comment connecter
deux utilisateurs dans un réseau ? Au début, on avait des opérateurs humains
qui répondaient aux coups de téléphone, et, en utilisant le numéro de téléphone,
branchaient le coup de téléphone dans un ensemble de cables, pour qu’une ligne
s’établit entre appeleur et appelé (circuit switching). Plus tard, d’abord en utilisant des relais, puis en utilisant des circuits électroniques aux transistors, on
automatisera l’opérateur humain.
Applications du réseau téléphonique à la machine, années 1943–1958
Déjà dans les années 1940–1950 on a utilisé le réseau téléphonique pour communiquer avec les premiers ordinateurs. On peut citer en particulier trois systèmes
ordinateur-communication :
1. La calculatrice pour les nombres complexes (aux relais) de George Stibitz,
le Bell Model I, était connectée à distance avec trois “machines à taper”
(teletype) externes pour la conférence des mathématiciens en 1940.
2. Aussi à Bell Labs, on avait construit un système de communication cryptographique pour des conversations téléphoniques encryptées, le X-System
(1943–1946). Il y avait une douzaine d’installations dans le monde (dont
un chez Roosevelt, un chez Churchill, et même un dans un bateau du
général Douglas MacArthur). Bienque ce système n’implique pas d’ordinateur propre, des méthodes pour digitaliser des signaux analogiques, pour
synchroniser les transmissions etc. y étaient développées.
3. Le projet SAGE (Semi Automatic Ground Environment), était un grand
projet de l’armée américaine durant les années 1950 à 1980. L’ordinateur
Whirlwind pour analyser en temps réel les mouvements d’un avion en
faisiat partie. Dans le projet SAGE on voulait analyser les mouvements
68
de plusieurs avions, vus de plusieurs centres de défense militaire, traı̂tant
en temps réel des signaux reçus de plusieurs systèmes de radar, radio et
les centres entre eux. En 1958, le système était mis en fonction, reliant 23
centres (avec ordinateurs) dans un réseau. C’est probablement ce réseau
qui suggéra à J.C.R. Licklider ses idées sur le symbiose entre machine et
homme en 1962. Plus tard encore , le système SAGE donna naissance au
système SABRE, un système commercial de réservations d’avions.
Partage de temps Beaucoup des idées développés dans les systèmes “timesharing” contribuaient eux aussi à la naissance de l’idée de mettre plusieurs ordinateurs dans un réseau, p.ex. l’idée de messagerie électronique (“mail”) existait
déjà dans un système partage de temps. Cf. séance sur le “time-sharing”.
8.2
8.2.1
Réseaux globaux d’ordinateurs 1970–...
Arpanet
Comme le développement de “time-sharing”, les premiers pas vers un réseau
global d’ordinateurs aux Etats-Unis était fortement financé et stimulé par ARPA.
Surtout sous la direction de Robert Taylor et plus tard Larry Roberts, les pièces
d’un réseau national entre universités étaient lentement mises en place. Deux
grands problèmes étaient à résoudre. D’abord, comment connecter des ordinateurs différents avec des systèmes d’exploitation différents ? Puis, comment
optimaliser l’utilisation des lignes de communication entre ordinateurs, est-ce
que cela devrait resembler les réseaux téléphoniques, oui ou non ?
Le premier problème fut résolu par Wes Clark (l’ingénieur du LINC) en
1967 (pendant une discussion avec Larry Roberts et autres qui étaient en train
de réaliser le réseau ARPANet) qui proposa que les différents ordinateurs ne
communiquent pas directement entre eux, mais communiquent tous avec une
machine standardisée, et que le réseau serait donc ces machines qui organisent
la communication entre eux. Cette machine sera le IMP (Interface Message
Processor ), prêt en 1968. On y ajoutera plus tard une autre sorte de machine, le
TIP (Terminal Interface Processor ), afin que des utilisateurs pouvaient accéder
(par téléphone plus modem) directement dans ARPANet (donc sans que son
ordinateur soit connecté dans le réseau par un IMP). (ce sont à peu près les
précurseurs des modems)
Le deuxième problème était en fait déjà résolu quand le groupe de l’ARPANet se rassemblait pour la première fois 1966–67, bienqu’ils ne le savaient pas.
Parce que la communication entre ordinateurs n’est pas continuelle, pas ininterrompue, construire et conserver une ligne directe entre deux ordinateurs n’était
pas économique. Le système du téléphone, brancher un circuit direct entre deux
interlocuteurs, était donc à modifier. En plus, contrairement à la transmission de
la voix (qu’on peut encore comprendre s’il y a du bruit), des informations entre
ordinateurs doivent être conservées tel quel, en plus, elles sont déjà digitales dès
le début.
69
Une solution était la commutation de paquets (packet switching). Ce concept
avait été inventé indépendemmant par plusieurs personnes déjà. En 1964 Paul
Baran de la RAND Corporation avait décrit cette méthode de transmission dans
On Distributed Communications. Baran faisait ses études pour le projet SAGE,
on voudrait déterminer un système de communication qui serait résistant aux
attaques, de là, il était arrivé à un système décentralisé où les communications allaient par blocs. En 1965, l’Anglais Donald Davies au National Physical
Laboratory avait également inventé cette méthode. Avec la commutation des
paquets, on n’envoie pas des courants de signaux, mais des blocs, des paquets.
Deux manières étaient possibles pour codifier la destination du paquet. Ou bien,
on peut étiquer le paquet avec l’adresse de l’ordinateur, ou bien, on peut l’étiquer
avec la connexion, la route qu’il faut suivre.
A commencer de 1969, l’ARPANet naquı̂t :
1. Leonard Kleinrock au Network Measurements Center à UCLA, avec un
SDS Sigma 7 computer au SignEXtend operating system
2. Douglas Engelbart au Stanford Research Institute (SRI), avec un SDS-940
computer au Genie operating system
3. Le Culler-Fried Interactive Mathematics centre à l’université de California
à Santa Barbara avec un IBM 360/75 computer au OS/MVT operating
system
4. Dave Evans et Ivan Sutherland à l’université de Utah, Graphics Department, avec un DEC PDP-10 computer au Tenex operating system.
5. ...
Ceci montre déjà la variété des ordinateurs et systèmes d’exploitation.
8.2.2
Protocoles
L’étiquettage des paquets était en 1969 encore une technique à développer.
A ARPANet, ce développement courait par des RFC (Request for Comments),
une forme informelle avec des propositions disseminées par mail dans le groupe
des programmeurs (voire : http ://www.faqs.org/rfcs/). Toutefois, ce n’était pas
seulement à ARPANet que ce développement eût lieu. Plusieurs idées venaient
d’autres sites où on construisit un réseau entre ordinateurs.
Déjà en 1970, l’université de Hawai se rattachât à l’ARPANet, mais parce
qu’ils avaient besoin de communication entre ordinateurs sur différents ı̂les,
on ne communiquât pas avec des cables téléphoniques mais avec ondes radio
(entre les ı̂les). Ce réseau fût appelé Alohanet et avait biensûr besoin d’autres
spécifications dans les protocoles, parce que, contraire à ce qui se passe dans un
réseau aux cables, deux paquets peuvent arriver en même temps. Plusieurs solutions fûrent proposées (entre autres des blocs de temps par ordinateur), mais
finalement on arrivât à ce qu’un ordinateur va envoyer et réenvoyer le même
paquet à un ordinateur, jusqu’à ce que celui-ci l’accepte. Cette idée inspira Bob
Metcalfe de Xerox PARC pour écrire un protocol PUP (PARC Universal Packet)
en 1973–75. Ce protocol sera le modèle pour communication par Ethernet, la
70
communication entre ordinateurs dans un seul bureau (et plus tard utilisé pour
WiFi etc.). Ce réseau local (LAN, local access network) sera le noyau pour le
réseau global plus tard.
Une autre évolution peut être trouvé en France. Là, l’IRIA (Institut de
Recherche en Informatique et Automatique, maintenant INRIA) finançât un
réseau national d’ordinateurs aux universités, qu’on appelât Cyclades. En 1973,
le réseau fonctionnait, et l’ingénieur Louis Pouzin et autres avaient développé
un autre style d’étiquettage, qu’ils appelaient le Datagramme. Au lieu d’encoder
la connexion dans le paquet, ils encodaient des propriétés de l’ordinateur qui
était addressé. La responsabilité de l’envoi du paquet était donc pas seulement
une responsabilité du réseau, mais aussi de l’ordinateur qui doit recevoir.
Finalement, tous ces évolutions et bien d’autres idées seraient mis dans un
ensemble de protocoles pour l’ARPANet. Le protocole TCP/IP (Transmission
Control Protocol and Internet Protocol ) qui a été développé par Robert Kahn
et Vinton Cerf en 1974 et deviendra standard.
8.2.3
Commercialisation et prolifération
Le réseau sortira que lentement de l’environnement militaire et académique.
Dans les années 1980, ARPANet (maintenant géré par la NSF, National Science
Foundation) s’était décidé pour utiliser le protocole TCP/IP et pour la version
Berkeley de UNIX comme standard pour tous les utilisateurs/ordinateurs dans
leur réseau, surtout des utilisateur militaires et académiques. En même temps,
avec le succès de l’ordinateur personnel, plusieurs ordinateurs avaient déjà été
intégré dans des réseaux locaux (LAN). Ces réseaux locaux vont lentement se
connecter dans un réseau de plus en plus englobant, par ligne téléphonique et
par modem, une fois que l’accès à l’ARPANet devient libre (mais payant) pour
tout le monde en 1991 par les efforts du sénateur Al Gore.
La popularité du web néanmoins ne vient qu’une fois que l’accès à ce monde
nouveau devient plus attractif et flexible. Comme avec l’ordinateur personnel,
il faut une sorte de ‘augmentation de l’intellect humain’ qui relie ce monde nouveau aux sens et une stratégie commerciale qui porte cette augmentation en
forme digestible au grand public. Une première pièce qui rend le Web digestible
est l’idée du World Wide web et de l’hypertexte, qui a un rôle un peu comme
les premiers programmes typographiques (‘text-based’) ou MS-DOS qui avaient
rendu l’ordinateur perso attractif. En 1989 Tim Berners-Lee et Robert Cailliau
au Conseil Européen pour la Recherche Nucleaire (CERN) avait développé les
idées hypertext et hyperlink et lancent le nom WWW (world wide web). Le Hypertext Transfer Protocol (HTTP) et le Hypertext Markup Language (HTML)
restent encore aujourd’hui base de l’accès textuel au Web, où un simple click
sur des mots vous mène à un site. Puis, le programme MOSAIC y ajoute la
sensibilité de l’oeil, en mêlant image et texte sur l’écran. MOSAIC est au Web
quelque peu comme Windows pour l’ordinateur personnel. MOSAIC est à la
base des navigateurs web (‘web browser’) d’aujourd’hui, dont Netscape et Internet Explorer.
71
72
Fig. 23 – Le réseau ARPANet en décembre 1972, structure et logique ; et le
réseau Cyclades en mi-1974
73
9
9.1
9.1.1
Futurs et/ou sublimations de l’ordinateur
Matérialisations futures de l’ordinateur
La loi de Moore
La Loi de Moore a été exprimée en 1965 dans Electronics Magazine par
Gordon Moore, directeur de Fairchild Electronics, l’une des entreprises qui commercialisera le microprocesseur. Sur des observations, Moore avait postulé que
la complexité des semiconducteurs proposés en entrée de gamme doublait tous
les ans à coût constant depuis 1959 et que, par extrapolation, cette croissance
exponentielle continuerait. Néanmoins, les lois de la physique, de l’électricité,
puissent bien y mettre un terme à cette croissance, vu que la miniaturisation à
des limites physiques.
Fig. 24 – Graphique de la loi de Moore
9.1.2
Hybrid computing
L’idée de calcul/ordinateur hybride est aussi vieille que l’ordinateur même.
Comme cette histoire de l’informatique a montré, avant la naissance propre de
l’ordinateur digitale et générale, on a des machines analogiques pour faire des
calculs. Très tôt, on avait conçu l’idée de coupler une machine digitale (pour le
traı̂tement d’informations) avec une machine analogique (pour mésurer/calculer
74
la solution à p.ex. équations diff.). En particulier dans les années 1960–1970 on
voit une vogue pour cette sorte d’ordinateur, et en quelque sorte, le LINC p.ex.,
qui à de très bons interfaces avec des instruments analogiques, peut aussi être
conçu comme une machine digitale spécialisée dans la communication avec des
instruments analogiques et dans le traı̂tement de ces signaux analogiques.
Tant que les ordinateurs devenaient plus vite, plus précis et moins chers,
les ordinateurs hybrides deviennent moins populaires (il devient plus facile de
simuler un processus analogique). Néanmoins, dans les dernières années, on voit
un nouvel intérêt dans cette forme d’ordinateur, en particulier dans des formes
avec un ordinateur digitale classique et un ‘ordinateur’ non-classique, en particulier des organismes biologiques, des membranes, des cellules, des molécules
etc.
9.1.3
DNA computing et molecular computing
Parce qu’on sait que le calcul avec le silicium a des limites (sous une certaine
limite de miniaturisation, les lois de l’électricité ne marchent plus et deviennent
majorées par les forces intra-atomiques), on a depuis longtemps cherché d’autres
média de calcul. Avec cette recherche était souvent liée l’espoir d’aller au delà
de la limite de Church-Turing, trouver donc une machine qui pourrait résoudre
le problème d’arrêt. Ceci s’explique par le fait que la thèse de Church-Turing
s’appuie en partie sur l’analyse des processus de calcul chez l’homme, qui utilise
des média discrets comme papier et encre. Avec les puces de silicium, on a aussi
affaire à des processus discrets, et certains croient, en changeant le médium de
calcul, de passer la limite de Church-Turing. En pratique, néanmoins, cela ne
marche pas, et ce restent plutôt des spéculations philosophiques.
La recherche d’autres média de calcul est intéressant en et pour soi, parce
que ceci pourrait donner naissance à des ordinateurs plus efficaces en vitesse ou
en mémoire. On a des modèles p.ex. pour le calcul avec des quanta (mécanique
quantique), calcul qui serait en parallèle et avec une mémoire presque “gratuite”
(à cause des lois de la méc. quant.), mais ce reste un modèle théorique seulement.
Plus proche d’une concrétisation est le modèle de calcul avec l’ADN (ou avec des
molécules). Ici, on utilise des séquences d’ADN pour ‘calculer’ (par les processus
de réplication d’ADN) solutions à certains problèmes. A cause de la structure de
l’ADN, un ordinateur ADN serait très efficace pour le stockage d’informations,
et très vite pour certains calculs (mais pas tous). Pour le moment, on a construit
des ‘ordinateurs’ ADN qui peuvent factoriser 6, ou faire un seul syllogisme.
9.2
9.2.1
Sublimations de l’ordinateur
Ambient Computing
En général, ce qu’on appelle intelligence ambiante ou ‘ambient computing’
(souvent aussi ‘ubiquitous computing’ ou ordinateur/calcul omniprésente) ne
veut dire qu’il y a des ordinateurs partout, mais qu’on ne les appercoive pas,
ou plus. En effet, on retrouve des micro-ordinateurs un peu partout, dans
75
Fig. 25 – L’utilisation d’ADN pour “calculer” la route la plus courte
téléphones portables, dans des lave-linges, dans les RFID, etc., et on se promenant quelque part, ou même en utilisant ces instruments, on n’est que rarement conscient du fait qu’on est entouré par de petits ordinateurs, enfouis dans
d’autres mécanismes électroniques. Comme il devient clair par cette histoire
de l’informatique, ce n’est pas une évolution nouvelle, on peut retrouver cette
tendence dans les années 60, chez ceux qui veulent démocratiser l’ordinateur et
son usage, et rendre certains aspects moins visible pour améliorer l’interaction
entre homme et machine. Les environnement graphiques, les langages de programmation, le souris, etc. sont tous des moyens qui rendent le calcul dans les
ordinateurs moins visible. L’intelligence ambiante va un pas plus loin, en ce que
pas seulement le calcul (l’intérieur, le mécanisme de l’ordinateur) devient invisible, mais l’ordinateur en et pour soi (l’extérieur, la matérialité dans la quelle
se passe le traı̂tement d’informations). Avec l’intégration dans des réseaux, des
machines, des environnements quotidiens etc. c’est une évolution qui n’est pas
encore finie.
9.2.2
Cloud Computing
L’une des réalisations de l’intelligence ambiante est le ‘cloud computing’ (calcul/ordinateur dans les nuages). Les idées de base (et les idées technologiques)
viennent en fait du temps de ‘time-sharing’. Là, on voulait que tout le monde
avait accès à demande sur un ordinateur central, dans le ‘cloud computing’
on a des machines électroniques chez les utilisateurs, et ils peuvent accéder à
demande à des logiciels, des environnements de programmation, de travail, ou
76
Fig. 26 – Schéma pour l’évolution de l’ordinateur et la situation de l’intelligence
ambiante
77
Fig. 27 – Schéma pour les modes d’interaction dans le ‘cloud computing’
même à des serveurs complets à partir de leur petit instrument, logiciels, environnements etc. se trouvant sur un serveur d’une entreprise qui offre la service.
On distingue trois sortes de service : Software-as-a-Service (SaaS) ; Platform-asa-Service (PaaS) ; Infrastructure-as-a-Service (IaaS) ; chacune avec ses propres
modalités et propres protocoles de sécurité.
9.2.3
La fin de la machine universelle ?
Les ordinateurs se trouvent dans notre vie quotidienne le plus souvent sous
forme de microprocesseurs intégrés dans des outils électriques, téléphones mobiles, lecteurs, caméras etc. Ces microprocesseurs, bienqu’en principe des ’machines universelles’ imprimées en silicone, y effectuent que des calculs et programmes très spécifiques. Ce ne sont plus des machines à faire n’importe quoi de
calculable, mais des machines spécialisées. La programmabilité de l’ordinateur,
l’un de ses caractéristiques, devient une propriété seulement accessible pour les
producteurs de la machine. Pour l’utilisateur, la programmabilité se perd ou
se réduit sérieusement à un éventail de possibilités pré-établies. En particulier,
avec leur ‘user-friendliness’ (gentil pour l’utilisateur) l’adaptation aux besoins
de l’utilisateur (ou dans beaucoup de cas : consommateur) est mené au bout.
Le produit commercial y gagne, une grande partie des utilisateurs également,
mais la relation dynamique parce que programmable entre ordinateur et homme
s’aplatit considérablement.
78
9.3
9.3.1
Discussions légales, actuelles et futures, sur l’ordinateur
Le patentage des algorithmes
En ce qui concerne les mathématiques, tout est source ouverte (‘open source’). Ce que des mathématiciens avant nous ont trouvé et inventé, il nous est libre
d’utiliser ces techniques, idées et concepts à notre guise, et de les développer ou
même défigurer en d’autres choses. Il n’y a pas quelque chose comme droit d’auteur en mathématiques, seul une obligation morale de mentionner honnêtement
nos précurseurs. En informatique, la situation est bien différente. Même que dans
les années 1950, 1960, voire même les années 1970, presque personne voyait le
logiciel comme produit commercial, depuis l’arrivée de l’ordinateur personnel et
l’industrie du logiciel, les programmes et leurs parties valent de l’argent. Partie performante d’un programme sont les algorithmes qui en et pour soi, si on
fait abstraction, font partie des mathématiques, mais dans leur adaptation et
intégration, leur écriture dans une application, deviennent code et deviennent
soumis au copyright et au patentage. La question du patentage soulève pas mal
de issues légaux, comme p.ex. sont les maths patentables ?, mais aussi d’issues
politiques, est-ce qu’il ne doit pas avoir des programmes qui doivent être source
ouverte pour des raisons de transparence démocratique, ou pour des raisons
d’accès public aux certaines facilités ? Aussi, les années 1990 ont vu la naissance de plusieurs mouvement en faveur de ‘open source’, comme p.ex. la Free
Software Foundation de Richard Stallman qui a mis au point la GNU General
Public Licence.
9.3.2
Public et privé
Avec l’avènement des navigateurs du Web, les portales du Web, les moteurs
de recherche et les réseaux sociaux, ainsi que l’intégration d’informatique dans
beaucoup d’aspects de notre vie quotidienne (pensons aux caméras publics, les
cartes bancaires, les puces ID etc.), l’ordinateur semble aujourd’hui avoir changé
la frontière entre ce qui est public et ce qui est privé. Est-ce que cette transformation est inévitable et va-t-elle inévitablement changer notre expérience de
public/privé, ou est-ce qu’on a affaire à un problème politique et doit-on penser
aux contra-stratégies ?
D’abord, ce n’est plus dans nos propres mains de contrôler nos communications dans un réseau. Tandis que d’une lettre, il n’en reste qu’une version papier
qu’on peut garder, cacher ou brûler si on veut, d’un mail, des copies peuvent
rester présentes sur le(s) serveur(s) utilisés, il nous est a priori impossible de le
récupérer et détruire. Avec l’étendue du Web, des informations peuvent aussi
être transmises beaucoup plus vite et beaucoup plus de personnes à la fois.
Reproduction et dissémination sont plus faciles que jamais.
Comme on utilise les services d’un moteur de recherche ou un réseau social,
ce moteur ou ce réseau notent vos coordonnées, vos mouvements et actes sur le
Web, les stockent dans des bases de données et l’analysent. Avec ces informations, ils peuvent vous offrir des publicités sur mesure et c’est avec cet argent
79
qu’ils financent leurs services libres. Malheureusement, on n’a pas le choix et
que très rarement la transparence dans ce transfert de privé aux services commerciales. La transformation de votre histoire privée d’utilisateur, l’ensemble de
vos traces numériques, en profil de consommateur vaut-elle la commodité des
services offertes librement et publiquement ?
9.3.3
Transparence et opacité du monde virtuel
Sous toute apparence du Web, il y a des programmes et algorithmes qui
mettent ces apparences en scène. Immergé dans l’expérience surfer, on a souvent
tendance à oublier cela. En fait, les entreprises du Web préfèrent qu’on oublie
cela, juste comme la majorité des clients et tous les bouchers ne veulent pas voir
comment les bêtes sont abattus. Néanmoins, cette commodité bloque l’accès aux
mécanismes qui régissent le Web et l’ordinateur. La transparence apparente
dans l’expérience du Web, de l’ordinateur, etc., obtenue avec peine par des
dizaines d’années de programmation, est contrebalancé par l’opacité de toute
cette programmation. Même si on ne veut pas savoir comment une chose marche
pour l’utiliser, il y a des situations où c’est capitale que cette option de remonter
à la construction de la chose existe. Si on utilise une connexion sécurisé pour
les transactions bancaires, on doit, en principe, avoir l’accès à l’architecture de
cette connexion, sinon, si la sécurité est en danger, on ne peut pas savoir quels
risques qu’on prend, ni comment les éviter ou remédier. Comme Alice au pays
des merveilles, il faut parfois regarder derrière le miroir.
80
Littérature
Sources en ligne :
– Le site du cours (avec des pdf par séance) :
http ://ufr6.univ-paris8.fr/Math/sitemaths2/spip/
– Journal, IEEE Annals for the History of Computing :
http ://www.computer.org/annals
– Grande archive avec des documents : http ://bitsavers.org/
– Computer History Museum et ses collections en ligne, entre autres sur le
PDP-1, IBM-Stretch, Fortran, des entretiens avec des pionniers de l’informatique, des brochures de publicité etc. : http ://www.computerhistory.org/collections/
– Charles Babbage Institute : http ://www.cbi.umn.edu/
– The Virtual Museum of Computing (avec beaucoup de liens) :
http ://icom.museum/vlmp/computing.html
Livres généraux sur l’histoire de l’ordinateur :
– Philippe Breton, Une histoire de l’informatique. Paris, Éditions du Seuil
(coll. Points Sciences), 1987, 1990
– Jean-Yvon Birrien, Histoire de l’informatique, collection Que sais-je, no2510,
Éd. PUF
– Girolamo Ramunni, La physique du calcul, Histoire de l’ordinateur, Paris,
Hachette, 1989.
– Herman H. Goldstine, The Computer : from Pascal to von Neumann.
Princeton, NJ : Princeton University Press, 1972, 1993
– Michael R. Williams, A History of Computing Technology, Los Alamitos,
CA : IEEE Computer Society Press, 1997.
– Paul E. Ceruzzi, A History of Modern Computing, Cambridge, MA : The
MIT Press, 1998.
– Martin Campbell-Kelly and William Aspray, Computer : A History of the
Information Machine, New York : BasicBooks, 1996.
81