3. La suprématie du logiciel et des périphériques

Dans la mesure où l'immense majorité des ordinateurs vendus durant cette période relèvent de la même architecture, et même assez précisément puisqu'ils respectent souvent les versions successives du « compatible PC » défini par IBM, puis de l'architecture i386 (et successeurs) définie par Intel, toutes respectant une certaine compatibilité ascendante, le hardware, de l'unité centrale en tout cas, n'a que peu de marge d'évolution. La créativité et l'innovation investiront donc un peu le domaine des périphériques et surtout celui du logiciel (software), qui connaîtra une évolution considérable durant l'ère de la loi de Moore, comparable à celle qu'a connu le hardware durant la période précédente. Périphériques et logiciels prennent progressivement le pas sur le matériel à la fois comme moteur de l'évolution technique et comme source principale de valeur ajoutée. Dans les deux cas, il s'agit d'étendre les services rendus par l'ordinateur, au point d'ailleurs parfois de créer de nouvelles machines qui ne sont plus reconnues comme des ordinateurs par leurs utilisateurs.

L'évolution du logiciel était peu significative et surtout peu séparable de l'évolution du matériel lui-même durant les premières générations, celui-ci étant largement assimilé à de la documentation technique, fournie avec le matériel. Elle devient déterminante à partir des années 1970, au point que David Fayon parle même d'« ère du logiciel » pour désigner une période proche de celle que nous appelons « ère de la loi de Moore ». Cette histoire nécessiterait à elle seule un cours au moins aussi détaillé que celui-ci. Nous nous limiterons, ici, à quelques éléments d'appréciation de l'évolution en remontant un peu en amont de l'ère de la loi de Moore.

3.1. Émergence et spécialisation des systèmes d'exploitation

À l'époque des calculateurs électroniques et des premiers ordinateurs on ne peut pas réellement parler de programmation ; il serait plus exact de parler d'une configuration de la machine, comme pour les machines de Turing. Pour autant l'architecture de von Neumann amorce un processus durable : les programmes peuvent désormais être enregistrés en mémoire puis sur des mémoires de masse. Ils peuvent donc gagner en complexité, progressivement. Les premiers programmes sont des programmations de la machine : ils décrivent séquentiellement les opérations qu'elle doit effectuer. Il s'expriment d'abord en langage machine puis seront ensuite rendus plus lisibles à l'aide de langages de description de programmes en langage machine : les langages « assembleurs »[19]. Dans les années 1950 et au début des années 1960 les ordinateurs étaient si chers qui fallait les faire travailler en permanence. C'est l'origine des dispositifs de partage de temps (time sharing, 1961) et des systèmes multitâches (1958) puis multiutilisateurs : le moment de réflexion d'un utilisateur peut être le temps de calcul d'un autre. Ces méthodes permettront la mise en place des premiers grands systèmes partagés de banque et de réservation aérienne [Negroponte, p. 95].

Avec l'augmentation en complexité des ordinateurs (années 1970-1980) et surtout l'apparition des périphériques, en particulier de stockage, il devient nécessaire de disposer de logiciels de plus en plus spécialisés : firmware, systèmes d'exploitation, applications. Le firmware s'occupe des fonctions matérielles les plus élémentaires et de l'amorçage du système (c'est le BIOS des PC). Le système d'exploitation gère les périphériques (au début guère plus que l'affichage en mode texte, le clavier et les disques) et l'exécution des applications[20]. Les applications sont au service de l'utilisateur. Plus tard (années 1990-2000), les fonctions se spécialiseront encore, le système d'exploitation, en particulier, se décomposant en de nombreuses sous-unités œuvrant de conserve : noyau, pilotes, HAL, gestionnaire de fenêtres et d'affichage, bibliothèques diverses, serveurs de données etc.

[Verroust] évoquant les années 1980 : « À cette époque les systèmes n’avaient ni la capacité ni la nécessité d’utiliser les systèmes d’exploitation pour mini et grands ordinateurs. Les premiers systèmes d’exploitation appelés moniteurs offraient seulement des fonctionnalités très basiques, et étaient chargés le plus souvent depuis de la mémoire morte. CP/M fut l’un des pionniers en matière de système d’exploitation installé sur un disque (et non sur mémoire morte). Ce système d’exploitation influença largement la conception de PC-DOS. Ce dernier, choisi par IBM comme système d’exploitation pour ses premiers PC, fit de Microsoft l’une des compagnies les plus rentables au monde. Les principales alternatives durant les années 1980 sur le marché des systèmes d’exploitation furent Mac OS en 1984, AmigaOS et Atari en 1985 et OS/2 en 1987. » Les années 1990 voient l'extension de la norme Unix et de systèmes de conception proche : linux (1991), WinNT (1993), MacOS 9 (1999) puis MacOS X (2001). La décennie 2000 voit l'explosion des OS “embarqués” (dont les netbooks et autres iPod). De même que les mini-ordinateurs dépassèrent en nombre puis en usage les gros systèmes, puis que les micro-ordinateurs dépassèrent les mini-, aujourd'hui l'informatique embarquée (téléphones, tablettes, nanos, netbooks, électroménager…) dépasse (largement) la micro-informatique.

3.2. Multiplication des langages de programmation

Si les firmwares restent longtemps, et encore maintenant, programmés en assembleur, les systèmes d'exploitation et les applications réclamaient des méthodes plus élaborées de programmation.

Le premier vrai langage de programmation effectivement utilisé est le FORTRAN (FORmula TRANslation) mis au point de 1953 à 1957 [Breton, p. 166]. Il s'agit d'un langage impératif, c'est à dire d'une succession d'instructions. D'autres langages seront développés pour répondre à des besoins particulier. Le FORTRAN était destiné principalement au calcul scientifique (il est encore marginalement utilisé, malgré la faiblesse de sa syntaxe). Le COBOL (COmmon Business Oriented Language), créé en 1959, est encore utilisé en gestion. L'Intelligence artificielle, un secteur de la recherche informatique, utilisera abondamment le LISP (1958), langage de programmation fonctionnelle[21], dans les années 1970-1980, puis le PROLOG (1972), langage de programmation logique[22], pour la construction de systèmes experts. Pour les bases de données on conçu un langage de description, de manipulation et de contrôle, le SQL (1970).

À côté de ces langages spécialisés, les programmeurs et les théoriciens avaient besoin de langages généralistes. C'est à cette fin que fut créé ALGOL (1958), dont dériva le Pascal (et ses nombreux dérivés : Turbo Pascal, Delphi...). Pour gagner encore en généricité et en commodité est créé en 1963 le langage de haut niveau BASIC, explicitement dédié aux débutants : Beginner's All-purpose Symbolic Instruction Code. Lui aussi eut une riche descendance, dont le Visual Basic, le VBscript et VB.Net de Microsoft.

Enfin, avec la montée en complexité des programmes, il devenait de plus en plus pénible de traiter et de nommer différemment des procédures similaires du seul fait qu'elles s'appliquaient à des objets différents. On inventa donc, à partir de la recherche en Intelligence artificielle, des langages capables de définir des procédures ou des classes d'objets de façon abstraite, c'était la programmation orientée objet[23]. Aujourd'hui les principaux grands langages de programmation généralistes ont évolué et permettent une programmation objet.

Parmi tous ces langages une famille occupe une place à part par l'influence qu'elle aura sur Internet, les logiciels libres, puis le web. Le C est créé au début des année 1970 de conserve avec le système d'exploitation Unix par Dennis Ritchie et Ken Thompson au sein des laboratoires Bell. Unix (1969) était une forme de réaction aux systèmes d'exploitation extrêmement complexes et lourds de l'époque et en particulier Multics. Il était conçu pour fonctionner sur les petits systèmes (mini-ordinateurs) qui commençaient à se répandre à l'époque. Le C visait un objectif nouveau à l'époque de portabilité. Il deviendra C++ (1985) en acquerrant la programmation objet. Du C++ dérivera une version épurée, Java (1995), pour porter encore plus loin la portabilité et permettre une utilisation comme langage interprété. De Java découlera une simplification, Javascript (1995). Enfin PHP est extrêmement proche, dans son esprit et sa syntaxe, de cette famille de langages. Aujourd'hui, pour la programmation web côté serveur, Java domine largement les grosses applications et PHP les petites. Pour la programmation web côté client Javascript est le standard de fait. Dans l'absolu Java occupe la première place des langages, C la seconde et C++ la troisième[24].

Parmi les éléments les plus déterminants de la révolution industrielle (milieu 18e siècle-milieu 20e siècle) figure probablement les principes de division du travail, non seulement au sens social (répartition entre catégories, classes ou castes) ou au sens économique (qui culmine avec le taylorisme), mais également au sens technique avec la normalisation des pièces détachées. Il en va de même en informatique : une part toujours plus grande du travail des différents logiciels consiste en tâches qui ne lui sont pas spécifiques et qui peuvent donc être standardisées et rédigées une fois pour toute. À l'époque de FORTRAN cette idée est encore extrêmement rudimentaire : le langage permet simplement de définir des sous-programmes. Peu à peu cette notion se formalisera et les “bouts” de programmes, que l'on appelle « procédures » ou « fonctions », se regrouperont (à partir de la fin des années 1950) en ensembles appelés « bibliothèques. » Ces bibliothèques sont intimement liées, dans un premier temps, à un langage et à un système d'exploitation. Par exemple les opérations de manipulation de fichiers ou de communications entre processus, sont très génériques et n'ont pas à relever de chaque application en propre : il est beaucoup plus efficace de disposer de procédures standardisées regroupées en bibliothèques standards. Plus généralement, l'utilisation de telles bibliothèques permet de mettre en oeuvre les principes informatiques (théorisés) de modularité (separation of concerns) et d'encapsulation (information hiding)[25]. Ces principes seront considérablement développés et rendus rigoureux par la programmation orientée objet. Aujourd'hui on appelle « framework » un ensemble cohérent de bibliothèques (voire une seule, dans certains discours commerciaux).

3.3. Extension à de nouveaux usagers

Les applications de grande diffusion apparaissent relativement tard dans l'histoire de l'informatique. Le marché étant d'abord occupé par des programmes conçus à façon. Le premier tableur, Visicalc, est commercialisé en 1979. Aujourd'hui encore les applications destinées au grand public semblent peu nombreuses et dans la plupart des registres, un ou deux acteurs s'accaparent l'essentiel des parts de marché. Ces application constituent, toutefois, un marché considérable et exercent, jusqu'aux années 2000, une influence considérable sur le reste de la production.

Jusqu'aux années 1960, les ordinateurs sont, pour l'essentiel, des machines dédiées à un usage particulier et donc sont au services d'usagers spécifiques et formés, qui peuvent donc s'adapter à l'ordinateur. À partir des années 1960, avec l'apparition des mini-ordinateurs, on voit le début du généralisme, qui sera considérablement amplifié dans les années 1980, avec le nouveau marché des ordinateurs personnels (PC). En 1960, Joseph Licklider[26] écrit La symbiose Homme-machine : l'interface Homme-machine (IHM) devient un élément des systèmes et applications. En 1963, Ivan Sutherland crée la première interface graphique (GUI) pour le logiciel de CAO sketchpad. En 1968, Douglas Engelbart invente souris[27] et fenêtres. De 1971 à 1977, le centre de recherche Xerox PARC développera de nombreux dispositifs qui équiperont, peu à peu, l'ensemble de l'informatique grand public, jusqu'aux années 2000 : l'ordinateur personnel, le modèle WIMP (fenêtres (windows), icones, menus et pointeur) et la métaphore du bureau, la souris, le réseau local ethernet, l'imprimante laser et le traitement de texte WYSIWYG what you see is what you get, 1974) qui sera popularisé par Apple à partir de 1983. La plupart des ordinateurs personnels adopteront un environnement de travail qui suivra les mêmes principes : X window (1984), Macintosh (1984), Windows 1.0 (1985). Tout cela permettra l'apparition et l'extension rapide de la bureautique durant les années 1980. Après une maturation rapide de ces logiciels, ont s'intéressera, durant les années 1990, à l'aspect, aussi bien des documents que des applications elles-mêmes. D'une part, on verra apparaître les premiers logiciels de publication et de communication imprimée et à l'écran ; d'autre part, les éditeurs, en particulier Apple, attachera une importance de plus en plus marquée au look et au design des logiciels.

Du fait de l'extension considérable de l'informatique des années 1980 et le renouvellement rapide des logiciels, apparaissent, dans les années 1990, les premiers phénomènes dits de “pourrissement des bits”. La plupart des applications enregistrent leurs données dans des formats qui leur sont spécifiques, formats qui varient également, pour un même logiciel, d'une génération à la suivante. De ce fait les données ne sont parfois plus lisibles ou plus utilisables en pratique après seulement quelques années. Autre difficulté : l'impossibilité de transmettre des données d'un utilisateur à un autre — ce qui devient de plus en plus gênant avec le développement des communications numérisées, des consolidations et des croisements de données. Quelques informaticiens prennent conscience de ces difficultés dès les années 1980, mais la question ne devient vraiment reconnue, en particulier des décideurs, qu'au cours des années 1990. Elles ont conduit à plusieurs types de réponses, principalement : les logiciels libres, les sources ouvertes (open-source) et les exigences d'interopérabilité. Ces difficultés ont été particulièrement mises en lumière à l'occasion des grandes manoeuvres contre le « bug de l'an 2000. » Elles ont conduit un certain nombre d'États et d'entreprises, au cours des années 2000, à mettre en œuvre des plans d'interopérabilité et de conservation de données.

En 1983, Richard Stallman lançait un appel aux hackers pour la création d'un unix libre : le projet GNU. Linux, commencé en 1991, permet de donner à ce projet toute sa maturité. À l'époque, le mot « libre » (« free ») ne renvoie pas tant à la gratuité qu'à l'absence de secret : ce mot vient de la tradition du mouvement des droits civiques des années 1960 et 1970 [Flichy, p. 224-225]. GNU/linux ne connaîtra qu'un succès d'estime sur les ordinateurs proprement dit, mais il se développera en revanche considérablement sur les dispositifs embarqués qui se développent considérablement au cours des années 2000 : “boxes” d'accès à Internet, settop boxes et autres dispositifs mobiles, en particulier ordiphones et tablettes sous la forme du système Android.

Au cours des années 2000, la puissance des ordinateurs devient considérable, il devient possible à de nombreux ordinateurs de traiter le son et la vidéo, et même de synthétiser des images de scènes complexe (« réalité virtuelle ») en temps réel. Les jeux vidéos prennent une importance considérable durant cette période, tant en terme de temps de jeu, d'influence culturelle, que de marché (dépassant, au début des années 2010 l'industrie cinématographique).

Les années 2000 voient également se développer les logiciels et interfaces web. Nous y reviendrons plus loin.



[19] Les programmes en assembleur, destinés aux humains, sont « compilés » en langage machine pour être ensuite exécutés. Chaque machine ou famille de machines, puis chaque processeur ou famille de processeurs, possède son propre langage assembleur, très proche en réalité du langage machine lui-même pour ce qui concerne sa sémantique.

[20] Cf. le cours de Technologies informatiques et multimédias.

[21] La programmation fonctionnelle, sans écarter complètement la programmation impérative, est construite sur le principe de la définition et de l'application de fonctions. Mathématiquement, elle met en oeuvre le lambda-calcul définit par Church en 1935.

[22] Les programmes sont des ensembles de règles de déductions.

[23] Le premier langage orienté objet est le Simula (1960). Celui qui diffusa largement l'idée est Smalltalk (1980), beaucoup utilisé en Intelligence artificielle. Celui-ci eut une influence considérable.

[24] Source : le Tiobe Programming community index (index de popularité, pas de nombre de lignes de code produites) : Java 19%, C 15%, C++ 11%, PHP 10%, C# 4%, Javascript 4%. En groupant les différentes versions du C (C, C++, C#) : 30%. En tout : 63%, près de deux tiers.

[25] En réalité la définition de la separation of concerns va souvent plus loin que la modularité et inclut tous les procédés permettant de séparer une tâches en sous-tâches indépendantes que l'on peut traiter chacune de façon plus efficace, voire normaliser. C'est la transposition dans le domaine informatique de la division du travail. De même l'information hiding est le principe général qui consiste à cacher toutes les décisions de conception d'une procédure susceptibles de changer à l'avenir. Son aspect principal est l'encapsulation, le fait de cacher tous les mécanismes internes et structures de données d'une procédure, mais le terme information hiding peut également recouvrir d'autres aspects dont le polymorphisme (un même nom correspond à des procédures différentes, selon le type d'objets auxquels on l'applique).

[26] Joseph Licklider (1915-1990) a un intérêt ancien pour les questions d'interaction entre Homme et ordinateur. Psychologue, il fait, en effet, partie de l'équipe qui conçoit la console du SAGE. Il jouera plus tard un rôle important dans la création d'Internet.

[27] Engelbart brevette la souris en 1970, mais on sait que des dispositifs similaires ont existé, depuis au moins les années 1960, au Xerox PARC.