L'héritage de Dennis Ritchie (1941-2011)

Dennis Ritchie (debout) et Ken Thompson devant un PDP-11 en 1972 Chez Bell.

La semaine dernière, à l’occasion de la disparition de Steve Jobs, Geoffray évoquait l’héritage technologique que celui-ci avait apporté à la communauté des développeurs en général et Java EE en particulier. N’en déplaise aux intégristes (comme le Molah Stallman), aux grincheux ou aux incultes, cet apport est bien réel et la micro informatique de 2011 doit beaucoup à l’Apple II, au Macintosh ou à Next Step. Evidemment quasiment toutes ces “inventions” attribuées à Jobs ne sont que du recyclage d’idées mises au rebut par d’autres (Xerox pourrait aujourd’hui être à la place d’Apple ou Microsoft), mais n’est-ce pas ce que tous les innovateurs font : aller plus haut en montant sur les épaules des géants qui les ont précédés ? Les épaules sur lesquelles Jobs est monté sont nombreuses, mais celles de Dennis Ritchie sont probablement les plus larges. Car si la micro-informatique doit beaucoup à Jobs, l’informatique en général doit encore plus à Dennis Ritchie qui nous a quitté le week-end dernier à l’age de 70 ans.

L’histoire

A la fin des années 60, Ritchie travaillait aux Bell Laboratories avec Ken Thompson au développement d’un nouvel OS : Unix. La première version du système fut écrite en assembleur, mais rapidement, ils réalisèrent qu’ils auraient besoin d’un langage de plus haut niveau pour développer la seconde version, notamment pour gérer les structures de données indispensables au différentes fonctions de l’OS. La première tentative en Fortran fut rapidement abandonnée et  Ritchie proposa de créer un  nouveau langage basé sur le language B créé par Thompson quelques années plus tôt.

Plusieurs légendes courrent au sujet du langage B : Thompson l’aurait nommé de la sorte d’après le nom de sa femme “Bonnie” ou moins romantique d’après le nom du language BCPL dont il était inspiré. J’avais pour ma part entendu raconté que le B était pour Bell. Toujours est-il que l’itération suivante s’appelerait logiquement le language C.

La langage B était interprété et comme Ritchie et Thompson avaient autant besoin de rapidité que de flexibilité, il décidèrent que le C serait compilé pour produire un code proche de la machine.

La première version du C n’était pas très différente de celle d’aujourd’hui quoiqu’un peu moins étoffée. Les types étaient déjà là ainsi que les fameuse structures de données (struct{};pour les intimes).

En résumé, C fut inventé pour pouvoir écrire un programme et ce programme était le noyau Unix, rien que ça…

En 1973, Ritchie publia un article scientifique sur le langage C et 5 ans plus tard, lui et son collègue Brian Kernighan (qui avait rédigé les premiers tutoriels sur C et qui força un peu la main de Ritchie) publièrent le classique “C programming language“.

Bell ayant laissé ouvert et accessible le code source d’Unix, il se répandit avec le C dans les université comme une trainée de poudre pour atteindre le succès qu’on lui connait.

L’héritage

Est-il besoin d’expliquer l’importance de ces deux inventions sur ce blog ? Je ne pense pas (ou alors vous vous êtes vraiment perdu). Je résumerai juste par deux schéma trouvé sur le Web :

History of programming language (sur http://civilprogrammers.blogspot.com)/

dans ce premier schéma qui présente un aperçu des principaux langages par décénie et héritage, on voit bien que tous les langages utilisés aujourd’hui ont C comme ancêtre commun et gardons à l’esprit également que leur compilateur et/ou environnement d’éxécution ont été ou sont encore écrit en C.

Historique simplifié d'Unix (Wikipedia)

Ce deuxième schéma illustre une version simplifiée de la galaxie Unix. En parcourant ce diagramme on se rend compte qu’en dehors de Windows (qui reste donc l’OS grand public le plus propriétaire mais est malgré tout développé en C), tous les autres sont basés sur Unix. Les deux premières cases du haut c’est Ritchie, la troisième colonne c’est Steve Jobs (au passage on peut voir, que Darwin, la version de BSD qui constitue la base de Mac OS X a son code ouvert (en fait open source mais avec une licence non reconnue par l’OSI)). Ainsi, si Jobs fait partie de l’héritage de beaucoup d’entre nous Ritchie fait partie de notre Héritage à tous.

C’est parfois bon de se sortir le nez le l’IDE pour se rappeler que nous avons une histoire. Car, Etre compétent ou expert techniquement ne suffit pas pour faire un bon développeur. La culture informatique doit également s’appuyer sur le passé. Comprendre la raison d’être des outils que nous utilisons et connaître leurs ancêtres est capital. Ca évite de dire des imbécilités ou de ré-inventer la roue.

“Celui qui ne connait pas l’histoire est condamné à la revivre”
K. Marx

#include <stdio.h> main(int argc, *char argv[]){ if(argc!=1) exit(1); else { char *dennis="Dennis"; char *world="World"; if(strcmp(dennis,argv[0])==0) { printf("Hello %s says %s n",world,dennis); printf("Good bye %s says the %s n",dennis,world); exit(0); } }