Dennis Ritchie
Fiche rapide
- Nom complet : Dennis MacAlistair Ritchie
- Naissance : 9 septembre 1941
- Décès : 12 octobre 2011
- Nationalité : américaine
- Formation : physique et mathématiques appliquées à Harvard
- Bell Labs : à partir de 1967
- Domaine : systèmes d’exploitation et langages de programmation
- Contributions majeures : langage C et UNIX
- Collaboration majeure : Ken Thompson
- Distinction : prix Turing en 1983 avec Ken Thompson
1967 : Dennis Ritchie rejoint les Bell Labs
Dennis Ritchie rejoint les Bell Laboratories en 1967. Il y passera l’essentiel de sa carrière.
Les Bell Labs constituent alors l’un des grands centres de recherche industrielle américains. Les équipes travaillent aussi bien sur les télécommunications et l’électronique que sur les mathématiques et l’informatique.
Ritchie arrive dans cet environnement après des études à Harvard, où il s’est intéressé à la physique puis aux mathématiques appliquées et à l’informatique.
Il rejoint bientôt des travaux liés à Multics, un ambitieux système d’exploitation en temps partagé développé conjointement par le MIT, General Electric et les Bell Labs.
Multics cherche à permettre à de nombreux utilisateurs de travailler simultanément sur un même ordinateur. Son architecture est cependant particulièrement ambitieuse et complexe.
Lorsque Bell Labs se retire du projet, plusieurs chercheurs conservent l’idée qu’un ordinateur doit offrir un environnement de programmation interactif, mais cherchent une approche beaucoup plus simple.
1969 : la naissance d’UNIX
En 1969, Ken Thompson commence à développer un nouveau système sur un ordinateur de la Digital Equipment Corporation (DEC) : le PDP-7.
Dennis Ritchie rejoint rapidement le travail avec Thompson et plusieurs autres chercheurs des Bell Labs.
Le système qui deviendra UNIX reprend certaines idées importantes expérimentées avec Multics, notamment le temps partagé et l’utilisation interactive de la machine, mais avec une philosophie beaucoup plus simple.
Au lieu de construire un système gigantesque capable de tout réaliser, les développeurs privilégient progressivement des composants relativement petits, compréhensibles et pouvant être combinés.
Une machine modeste : le PDP-7
Les premières versions d’UNIX fonctionnent sur un PDP-7, une machine DEC 18 bits qui n’est déjà plus récente lorsque Thompson commence ses expérimentations.
Les ressources disponibles sont limitées. Cette contrainte contribue à imposer une certaine sobriété dans la conception du système.
UNIX doit rester suffisamment compact pour fonctionner sur une machine relativement modeste tout en fournissant un environnement utilisable par les programmeurs.
Du PDP-7 au PDP-11
Le projet prend une nouvelle dimension lorsque les Bell Labs obtiennent un PDP-11.
À partir de 1970-1971, le PDP-11 devient une plateforme importante pour le développement d’UNIX.
Le système reste cependant très dépendant de l’architecture sur laquelle il fonctionne, car une grande partie de son code est encore écrite dans un langage proche de la machine.
Cette situation pose un problème fondamental : comment écrire un système d’exploitation efficacement sans devoir le réécrire presque entièrement lorsque l’on change de processeur ?
La réponse viendra en grande partie du langage C.
De BCPL à B, puis de B à C
Le langage C n’apparaît pas soudainement. Il appartient à une filiation de langages destinés notamment à faciliter la programmation système.
Cette filiation peut être résumée ainsi :
BCPL → B → C
BCPL, conçu par Martin Richards dans les années 1960, influence directement le langage B développé par Ken Thompson.
B est utilisé dans les premières années d’UNIX, mais il possède une limitation importante : c’est essentiellement un langage sans véritable système de types.
Cette simplicité convient à certaines applications, mais elle devient gênante lorsqu’il faut exploiter efficacement l’architecture du PDP-11 et écrire un système d’exploitation complet.
La création du langage C
Dennis Ritchie transforme progressivement B pour répondre à ces nouveaux besoins.
Le développement du langage C se déroule principalement entre 1969 et 1973, avec une période particulièrement importante en 1972.
Ritchie conserve une grande partie de la syntaxe et de la philosophie de B, mais ajoute notamment une véritable notion de types de données et développe un compilateur produisant du code machine efficace.
Le résultat possède une caractéristique qui expliquera une grande partie de son succès : le C se situe à mi-chemin entre le langage de haut niveau et la programmation très proche du matériel.
Un langage proche de la machine
Le C donne au programmeur accès à des mécanismes indispensables à la programmation système :
- manipulation d’adresses mémoire ;
- utilisation de pointeurs ;
- opérations sur les bits ;
- structures de données ;
- tableaux ;
- fonctions ;
- contrôle précis de la représentation des données.
Ces possibilités permettent d’écrire des composants qui auraient auparavant nécessité de nombreux développements en assembleur.
Mais plus abstrait que l’assembleur
Le C ne décrit pourtant pas directement chaque instruction du processeur.
Une instruction écrite en C peut être traduite par le compilateur en différentes séquences d’instructions machine selon le processeur utilisé.
Cette différence est fondamentale.
En assembleur, le programme est étroitement lié à une architecture particulière. En C, une part importante du programme peut être conservée lorsqu’on change de machine, à condition de disposer d’un compilateur adapté.
Le C constitue ainsi un compromis particulièrement efficace entre contrôle du matériel et abstraction.
1973 : UNIX est réécrit en C
Cette relation entre le langage et le système atteint un moment décisif en 1973.
Une grande partie du noyau d’UNIX est alors réécrite en C. En septembre 1973, la traduction du système est déjà largement réalisée.
Ce choix est remarquable pour l’époque. Les systèmes d’exploitation sont encore généralement très dépendants du langage machine ou de l’assembleur du processeur sur lequel ils fonctionnent.
En utilisant le C, les développeurs séparent beaucoup plus nettement deux niveaux :
- le fonctionnement logique du système d’exploitation ;
- les caractéristiques particulières du matériel sur lequel il s’exécute.
Certaines portions restent nécessairement dépendantes de la machine, mais une grande partie du code source peut désormais être réutilisée.
Pourquoi cela rend-il UNIX plus portable ?
Imaginons un système d’exploitation composé de milliers d’instructions écrites directement pour un PDP-11.
Pour le faire fonctionner sur une autre architecture, il faudrait normalement réécrire une grande partie de ces instructions dans le langage machine du nouveau processeur.
Avec le C, la situation change.
Le même code source peut, dans une large mesure, être recompilé pour une autre architecture. Le compilateur se charge de produire les instructions machine correspondant au nouveau processeur.
Schématiquement :
programme C → compilateur → code machine du processeur
Changer de processeur ne signifie donc plus nécessairement réécrire tout le système.
Cette propriété jouera un rôle majeur dans la diffusion d’UNIX sur de nombreuses architectures au cours des années suivantes.
UNIX et C se développent ensemble
L’histoire du C et celle d’UNIX sont donc étroitement liées.
UNIX fournit au C un problème particulièrement exigeant à résoudre : écrire un système d’exploitation complet.
Inversement, le C fournit à UNIX un moyen de devenir moins dépendant d’une seule architecture matérielle.
Cette interaction contribue à expliquer pourquoi les deux technologies connaissent une influence aussi importante.
Le C n’est pas seulement utilisé pour de petits programmes d’application. Il démontre qu’un langage relativement abstrait peut néanmoins produire du code suffisamment efficace pour programmer le cœur d’un système d’exploitation.
1978 : le livre qui diffuse le langage C
En 1978, Dennis Ritchie publie avec Brian Kernighan l’ouvrage The C Programming Language.
Le livre devient rapidement une référence pour les programmeurs.
Il est souvent désigné simplement par les initiales de ses deux auteurs :
K&R.
L’ouvrage associe une présentation relativement concise du langage à de nombreux exemples de programmation. Pendant plusieurs années, il constitue de fait l’une des principales références décrivant le C avant sa standardisation officielle.
Sa manière d’enseigner le langage aura elle aussi une longue influence sur les ouvrages de programmation.
Une influence qui dépasse largement UNIX
Le succès de C finit par dépasser largement l’environnement pour lequel il avait été conçu.
Le langage est utilisé pour :
- les systèmes d’exploitation ;
- les compilateurs ;
- les outils système ;
- les applications scientifiques ;
- les logiciels embarqués ;
- les bibliothèques ;
- et de très nombreux logiciels d’application.
Sa syntaxe et plusieurs de ses concepts influencent ensuite directement ou indirectement de nombreux langages, notamment C++, Objective-C et plusieurs langages apparus ultérieurement.
Plus largement, le C contribue à populariser une manière de programmer dans laquelle les structures de contrôle, les fonctions, les types et les pointeurs sont combinés avec un accès relativement direct aux ressources de la machine.
Le prix Turing avec Ken Thompson
En 1983, Dennis Ritchie et Ken Thompson reçoivent ensemble le prix Turing, l’une des principales distinctions internationales en informatique.
Cette récompense reconnaît notamment leur contribution au développement d’UNIX et à l’évolution générale des systèmes informatiques.
Ritchie recevra également plusieurs autres distinctions au cours de sa carrière, notamment la National Medal of Technology aux États-Unis et, avec Thompson, le Japan Prize en 2011.
Pourquoi Dennis Ritchie est-il une figure majeure ?
L’importance de Dennis Ritchie ne vient pas d’une invention isolée.
Elle repose sur l’association entre plusieurs idées qui se renforcent mutuellement.
- Le langage C fournit un outil particulièrement efficace pour la programmation système.
- UNIX démontre qu’un système d’exploitation peut être largement écrit dans un langage de haut niveau.
- Cette approche améliore la portabilité du logiciel entre différentes architectures.
- La diffusion d’UNIX dans les universités contribue parallèlement à diffuser le langage C.
- Le C influence durablement les langages et les systèmes développés par la suite.
Le travail de Dennis Ritchie se situe donc au cœur d’une évolution essentielle de l’informatique : le logiciel devient progressivement moins dépendant d’une machine particulière.
Cette séparation croissante entre le programme et le matériel constitue l’une des conditions de la diffusion massive des logiciels sur des architectures différentes.
Repères chronologiques
- 1941 : naissance de Dennis MacAlistair Ritchie à Bronxville, dans l’État de New York.
- 1967 : entrée aux Bell Laboratories.
- 1968 : participation aux travaux liés à Multics.
- 1969 : début du développement d’UNIX aux Bell Labs sur PDP-7.
- 1969-1973 : période de formation du langage C.
- 1972 : période particulièrement importante dans le développement du C.
- 1973 : UNIX est largement réécrit en langage C.
- 1978 : publication de The C Programming Language avec Brian Kernighan.
- 1983 : prix Turing attribué à Dennis Ritchie et Ken Thompson.
- 1998 : National Medal of Technology avec Ken Thompson.
- 2011 : Japan Prize avec Ken Thompson.
- 12 octobre 2011 : décès de Dennis Ritchie.
À retenir
- Dennis Ritchie rejoint Bell Labs en 1967.
- Il participe avec Ken Thompson et d’autres chercheurs au développement d’UNIX à partir de 1969.
- Il transforme progressivement le langage B en langage C au début des années 1970.
- Le C associe programmation relativement proche du matériel et abstraction suffisante pour écrire des logiciels complexes.
- En 1973, UNIX est largement réécrit en C.
- Cette association entre UNIX et C contribue fortement à la portabilité des systèmes.
- Avec Brian Kernighan, Ritchie publie The C Programming Language en 1978.
- Son travail influence durablement les systèmes d’exploitation et les langages de programmation.
Sources documentaires
- Dennis M. Ritchie, The Development of the C Language, History of Programming Languages II.
- Dennis M. Ritchie, The Evolution of the Unix Time-sharing System.
- Dennis M. Ritchie et Ken Thompson, The UNIX Time-Sharing System.
- Brian W. Kernighan et Dennis M. Ritchie, The C Programming Language, 1978.
- Nokia Bell Labs, archives consacrées à Dennis Ritchie et à l’histoire d’UNIX.
- Computer History Museum, Dennis Ritchie Collection et ressources sur les débuts d’UNIX.
Crédit de la photo de couverture :
Denise Panyik-Dale —Flickr,CC BY 2.0,Wikimedia Commons.
