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