06.10.2026 · Signal Titans Editorial
Lignes de code du PDP-7 : les cinquante ans du composant Unix cat
Comment l'utilitaire Unix cat de Ken Thompson, créé en 1969, a évolué de l'assembleur au C puis au code BSD pour équiper les systèmes d'exploitation modernes.

En 1969, Ken Thompson s'est installé devant un ordinateur PDP-7 de la Digital Equipment Corporation pour rédiger la toute première version de l'utilitaire Unix cat. Le langage de programmation C n'existant pas encore, Thompson a conçu l'outil en assembleur PDP-7 à l'aide d'un assembleur sur mesure qu'il avait lui-même développé. Son assembleur étendait les instructions standards en permettant à des points-virgules de séparer plusieurs instructions sur une même ligne, et en introduisant des étiquettes numériques temporaires allant de 0 à 9 pour simplifier les sauts locaux. Selon la documentation d'époque du code source, cette implémentation initiale en assembleur de 1969 intégrait déjà des versions tamponnées pionnières des routines getc et putc pour gérer les opérations d'entrée et de sortie.
Les fondations en assembleur sur le PDP-7
Les extensions d'assembleur sur mesure conçues par Thompson pour le PDP-7 permettaient aux premiers programmes Unix de rester compacts tout en exécutant des routines matérielles de bas niveau. Les étiquettes temporaires de 0 à 9 réduisaient la charge de la table des symboles dans l'assembleur, ce qui permettait à Thompson de réutiliser des cibles de saut numériques au fil du fichier sans devoir inventer un nom unique pour chaque embranchement.
Le perfectionnement sur PDP-11 et la transition vers le C
Lorsque Unix a été porté sur le PDP-11 de Digital Equipment Corporation, cat a été réécrit afin d'exploiter le jeu d'instructions du nouveau système. La version PDP-11 a affiné le comportement du composant : s'il était appelé sans argument de fichier ou avec un simple tiret, il lisait directement l'entrée standard. Un virage structurel majeur est survenu avec la Septième Édition d'Unix, qui a introduit la première implémentation de cat rédigée en langage C. S'articulant autour d'une boucle de lecture classique de deux lignes qui traitait les caractères jusqu'à l'obtention d'un signal de fin de fichier, cette version de la Septième Édition ne reconnaissait qu'une seule option en ligne de commande : l'option -u, qui désactivait la mise en mémoire tampon par blocs de 512 octets configurée par défaut.
Les options de 4BSD et la réécriture Net/2 par Kevin Fall
À mesure que l'écosystème Unix évoluait dans les milieux académiques, la quatrième version de la Berkeley Software Distribution — connue sous le nom de 4BSD — a enrichi l'interface en ligne de commande de l'utilitaire en 1980. Cette version introduisait des options telles que -n, -b, -v, -s, -e et -t pour gérer le numérotage des lignes et l'affichage des caractères. En 1989, l'informaticien Kevin Fall a entrepris une réécriture complète de cat pour BSD Net/2, un projet destiné à éliminer le code source propriétaire d'AT&T Unix de la distribution. Fall a réorganisé l'outil en séparant son exécution en un mode brut (« raw ») réservé à la copie standard de caractères et un mode préparé (« cooked ») dédié à la gestion des options de mise en forme.
Systèmes d'exploitation modernes et pérennité du code
La réarchitecture proposée par Fall s'est révélée remarquablement durable au fil des décennies de déploiement des systèmes d'exploitation. Apple a intégré en 2007, au sein de Mac OS X 10.5 Leopard, une implémentation FreeBSD de cat datant de 2005 qui conservait la structure fondamentale du travail de Fall. Bien que les bibliothèques logicielles environnantes aient évolué, la structure sous-jacente du code de 1989 de Fall est restée intacte parmi les outils en ligne de commande du système. Aujourd'hui, inspecter le code source de cat sur une installation macOS moderne révèle que le nom de Kevin Fall figure toujours en toute première ligne de l'en-tête du fichier.
Le maintien en fonctionnement de la structure de code de Fall de 1989 sur des millions d'ordinateurs portables contemporains illustre la manière dont les artefacts logiciels fondateurs traversent les décennies de mutations informatiques. Alors que les interfaces utilisateurs et les frameworks applicatifs de haut niveau subissent des réinventions permanentes, les utilitaires essentiels comme cat subsistent car leur fonctionnement de base répond de manière fiable à des opérations fondamentales de traitement des données. Du code rédigé il y a trente ou cinquante ans reste ainsi activement exploité sous la surface des systèmes d'exploitation modernes.
Illustration éditoriale générée par IA ; ce n’est pas une photographie documentaire.