Fichier créé le 26 mai 1998.

Qu'est-ce que le bug de l'an 2000 ?

C'est le risque de voir apparaître de nombreuses pannes des ordinateurs à l'entrée dans la dernière année du siècle, l'an 2000 (qu'on confond souvent avec l'entrée dans le 21ième siècle qui ne se produira en fait que le 31 décembre 2000). Sans réaction de notre part, ces pannes se produiront à coup sûr et pour un nombre de machines si important qu'il existe un danger réel pour les personnes et les biens. En effet les ordinateurs sont maintenant quasiment omni-présents dans les domaines de la gestion et de la surveillance de mécanismes vitaux. Ils sont indispensables pour la gestion financière, le suivi médical, la régulation de la circulation automobile, le transport aérien et ferroviaire. Imaginer un déréglement généralisé de tous ces domaines est un véritable scénario catastrophe digne des grandes peurs millénaristes.

Pour vous permettre de juger de l'ampleur du problème, expliquons d'abord le problème purement technique, qui n'est pas si difficile à appréhender.

C'est une convergence de plusieurs phénomènes, tous liés à des erreurs ou imprévoyances humaines dans les décennies qui nous précèdent. Le problème fondamental est la chronologie: les ordinateurs risquent d'interprèter les dates de façon cahotique, et donc de confondre dates passées et dates futures ou plus exactement de les inverser.

Le plus important (le plus répandu de ces problèmes) est le codage des dates.

Codage des dates

C'est une longue tradition de ne coder les dates que sur deux chiffres: personne n'ignore le siècle où il vit. C'est pourquoi le numéro du siècle reste sous-entendu. Évidemment, un petit problème se pose à chaque changement de siècle: à quoi correspond l'année 0 ? À la première année de ce siècle ou bien à la première année du siècle précédent ? Avant les machines, aucune importance: encore une fois, on interprètait correctement selon le contexte. Mais les machines n'ont pas ce ``bon sens'' et ne connaissent pas la notion de contexte. Donc, elles ne modifient pas automatiquement leurs recettes de calcul (celles qui sont contenues dans les programmes) et se trompent sans vergogne: il y a quelques minutes l'année était 99, maintenant nous sommes l'année 0; puisque 0 est plus petit que 99, c'est qu'il s'agit d'une année précédente; donc les phénomènes ayant commencé en 99 sont encore bien loin dans l'avenir! Il n'y a donc rien à faire d'urgent pour eux: en temps voulu les programmes qui doivent les prendre en charge se déclencheront! Imaginez que vous soyez dans un avion prêt à atterrir et que les programmes des contrôleurs du ciel décident qu'on s'occupera de vous dans 99 ans! Ou encore qu'il est impossible que vous ne vous soyez déjà posé étant donné que vous êtes en l'air depuis 0 - 99 = -99 années (ce qui s'arrondit à 99 si les calculs sont effectués sans les signes, ou encore produit une erreur qui arrête tout le programme dans le pire des cas)...

Pourquoi ne pas avoir mis les dates sur 4 chiffres ?

Il faut d'abord savoir que les programmes des ordinateurs sont généralement pérennes: ils ont une durée de vie bien plus longue que celles des machines. On change facilement les machines qui évoluent très vite et sont faites de matière, on change beaucoup plus difficilement les programmes qui évoluent beaucoup moins vite car ils sont faits de matière grise accumulée: les programmes coûtent bien plus cher que les machines qui les exécutent car il faut payer des hommes hautement qualifiés pour les créer, pour les mettre au point et les faire évoluer. C'est pourquoi les constructeurs de machine font de gros efforts pour permettre la réutilisation des anciens programmes sur les nouvelles machines. Ce qui fait qu'il n'est pas rare d'utiliser des programmes dont la conception initiale remonte à 10, 20 ou 30 ans. Ces programmes, conçus dans un tout autre contexte informatique, n'étaient pas faits pour durer si longtemps, ni a fortiori pour passer le millénaire!

Pour des raisons d'économie:
À l'époque où certains programmes (en particulier pour la gestion) ont été crées, la mémoire centrale et la mémoire périphérique (disques durs) était excessivement chère. C'est pourquoi il fallait économiser au maximum la place prise par les données manipulées. Gagner 2 chiffres sur 4 représente un gain de 50% sur la place occupée donc des écomomies importantes sur le matériel nécessaire à l'utilisation du programme. Il y a 20 ans, aucun fabricant de logiciel n'aurait pu vendre un programme qui dilapidait ainsi la mémoire, quand ses concurrents offraient tous des logiciels qui l'économisaient.
Par imprévoyance ?
Non. Les programmeurs de l'époque était conscients du problème, mais n'en avaient évidemement cure. Après moi, le déluge: pourquoi s'occuper d'un problème qui n'apparaîtra au mieux que lorsque je serai à la retraite? D'ailleurs mon programme ne sera bien entendu plus utilisé d'ici là!
D'autre part, une fois ce codage à 2 chiffres introduit dans la conception, aucun programmeur n'aurait voulu faire l'effort de rendre son programme compatible avec le passage du millénaire, au prix de modifications non triviales du code écrit, avec tous les problèmes d'erreurs et de mises au point coûteuses que cela suppose. À la décharge du programmeur, il faut bien dire que personne ne lui demandait cet effort, bien au contraire: quel patron aurait accepté en 1990 de payer cher la modification d'un programme qui marchait parfaitement, pour le cas hypothétique où ce programme aurait à affronter le changement de siècle 10 ans plus tard ? Dans 10 ans le programmeur ne sera plus là, et d'ailleurs le patron non plus. En ce qui concerne programmeur et patron, ces prévisions se sont dans la plupart des cas réalisées, mais les programmes sont restés! Et nous sommes maintenant à la tête de millions de lignes de programmes à revoir et à modifier en profondeur pour passer l'an 2000. C'est une entreprise colossale, et c'est bien pourquoi il n'y aucun chômage à l'heure actuelle en informatique.
Par anthropomorphisme ?
Une tendance naturelle en programmation est de traiter les ordinateurs comme des ``cerveaux électroniques'' qui ressembleraient au cerveau humain: on leur fait alors appliquer les recettes que nous appliquons nous-mêmes par une transposition hasardeuse, que nous pourrions appeler la «dérive anthropomorphique» du programmeur. C'est ce phénomène qui explique que certains langages de programmation (COBOL par exemple) traitent les nombres en notation décimale (avec les 10 chiffres de la notation arabe habituelle), exactement comme un calculateur humain, alors que la notation logique et naturelle pour un ordinateur est le codage binaire (uniquement composé de 0 et 1). C'est aussi la raison pour laquelle beaucoup d'ordinateur représentent les nombres en «grands endiens», c'est-à-dire avec les chiffres les plus significatifs d'abord, alors que l'écriture inverse, le «petit endien», qui consiste à commencer par les chiffres des unités est plus logique. C'est uniquement parce que nous faisons ainsi que nous avons transposé cette méthode aux machines, au prix d'une complication supplémentaire dans la programmation et le traitement. De la même manière, comme nous écrivons les annnées sur 2 chiffres, nous l'avons naturellement «appris» aux ordinateurs.

Année bissextile

L'année 2000 est bissextile.

La règle qui permet de prévoir les années bissextiles est la suivante: toute année dont le numéro est multiple de 4 est bissextile, sauf les années séculaires (numéro terminé par 00), à moins que ce ne soient des années multiples de 400. En vertu de cette règle, 1800 n'était pas bissextile, 1804 l'était, 1808 aussi, ..., 1896 était bissextile, mais 1900 ne l'était pas. Pour le vingtième siècle, 1996 était bissextile, mais 2000 le sera aussi, par une application d'un cas de la règle qui ne se produit que tous les 400 ans.

Ce genre d'erreurs n'est pas du pure domaine de la fiction: la première année bissextile depuis la naissance de la firme Sun a révélé un bug dans le traitement des années bissextiles (erreur du système d'exploitation du Sun 3, pendant l'année 1988)!. Là encore, le programmeur ne s'est pas soucié avec assez de soin d'un avenir aussi lointain que 3 ans! Évidemment, à la naissance de Sun, personne ne savait si le concept allait marcher et si la firme allait encore exister 3 années après ...

Si vous voulez en savoir plus sur le bug des années bissextiles du système d'exploitation du Sun 3, Robert Ehrlich vous décrit ce problème qu'il attribue entièrement à la «dérive anthropomorphique» et vous détaille la solution qu'il y a apporté le soir même de son apparition.

Les horloges des ordinateurs sont limitées

L'activité d'un ordinateur est entièrement pilotée par son horloge interne, qui cadence toutes les opérations. En outre cette horloge interne permet à la machine d'avoir l'heure exacte.

Ce mécanisme est basé sur le comptage des secondes: au coeur de la machine les circuits électroniques comptent la seconde avec une grande précision (c'est un quartz tout à fait semblable à celui d'une montre qui remplit cet office). Pour maintenir l'heure du jour, la machine tient en plus à jour un compteur auquel elle ajoute un toutes les secondes. Connaissant la date du calendrier correspondant à la valeur 0 du compteur et le nombre de secondes par jour, on en déduit le nombre de jours écoulés depuis la mise à zéro du compteur, et donc la date d'aujourd'hui.

Sous Unix, ce compteur comporte généralement 32 chiffres binaires (32 bits), voire 31 si l'entier correspondant est considéré comme signé (le signe, positif ou négatif, nécessite un bit d'information). Ce qui fait que le compteur repasse à zéro à peu près tous les 70 ans. Comme la date 0 du compteur correspond exactement au 1er janvier 1970 à 0h 0m 0s, la date de naissance du système Unix, le compteur repassera à 0 le 19 janvier 2038 à 03 h 14. Sur les ordinateurs personnels (en anglais personnal computer ou PC) Macintosh, la date de départ est en 1904, le compteur comporte exactement 32 bits (entiers naturels sans signe), et le compteur repassera également à 0 aux alentours de 2030. Vous pouvez constater que le compte part du 1er Janvier 1904 lorsque la pile, qui sert à alimenter l'horloge lorsque la machine est débranchée, est usée: votre Macintosh démarre avec un compteur à zéro et affiche alors la date correspondante sans aucun souci.

Le phénomène de confusion des dates qui résulte de cette remise à zéro du compteur des secondes est strictement analogue à celui de l'an 2000, si ce n'est que la date des machine repassant par 0, elles agiront comme si l'on était revenu à la date correspondante, au 1er janvier 1970 pour les machines Unix.
Là encore, cette échéance est lointaine, et l'on peut la négliger, comme les programmeurs des années 60. Là encore, il suffirait d'ajouter des chiffres au compteur pour règler le problème. Là encore, cela nécessiterait la réécriture (ou tout au moins la révision) de nombreux programmes.

Par chance, ce phénomène fâcheux ne se produira peut-être pas: en effet la taille maximale des nombres entiers gérés par les machines ne cesse d'augmenter. Ainsi l'arrivée récente des machines 64 bits règlerait définitivement le problème. Il en existe déjà chez Digital et Sun, et la prochaine génération des processeurs Intel, le Mersed, sera également 64 bits. On peut donc penser que cette fois-ci le danger s'écartera de lui-même et que le fait de n'avoir rien fait était une sage décision.

Où puis-je voir des traces du problème de l'an 2000 ?

Dans les cartes bancaires: la plupart d'entre elles sont périmées avant l'an 2000. Ma propre banque délivre régulièrement les cartes bancaires pour 2 années complètes. Il se trouve que ma date de renouvellement est depuis bientôt 10 ans le 31 janvier. Comme par hasard, la carte qui m'a été délivrée le 20 janvier 1998 expire le 31 novembre 1999. Ceci pour éviter que la carte ne soit confisquée par des distributeurs automatiques qui comporteraient le ``bug de l'an 2000'' et la considèreraient comme périmée. Rassurons-nous sur ce point particulier: les banques ont instauré un système de pénalités progressives pour celles d'entre elles qui auraient des distributeurs non conformes. C'est pourquoi certaines banques n'hésitent plus aujourd'hui à distribuer des cartes valables au-delà de l'an 2000. Il n'en reste pas moins que les banques qui délivrent des cartes qui doivent toutes être renouvellées dans les derniers mois de 1999 risquent de subir un gros embouteillage de demandes pendant cette période ...

Que craindre pour mon ordinateur personnel ?

À peu près rien si vous n'utilisez pas de logiciels de gestion de comptabilité (personnelle par exemple). Même en ce cas, vous ne verrez qu'éventuellement de petites erreurs pendant l'année 2000, puis tout rentrera dans l'ordre. Si vous utilisez Internet, sa messagerie électronique et ses forums, vous aurez également quelques surprises, puisque les dates des messages que vous envoyez et celles des nouvelles des forums de discussion sont explicitement codées sur 2 caractères. La conséquence sera que votre machine pensera que les messages reçus en 2000 sont plus vieux que ceux de 1999. En conséquence, si vous avez l'habitude d'une présentation des messages reçus par ordre d'arrivée, cet ordre sera inversé. Rien de bien grave donc. En ce qui concerne les messages envoyés dans les forums, leur péremption automatique sera également prise en défaut: tous les messages de l'année 1999, considérés à tort comme plus récents que ceux de l'an 2000, ne seront pas détruits. Il faudra une intervention humaine explicite sur les serveurs de nouvelles (en anglais news).

Que craindre pour tous mes appareils électroniques ?

À peu près rien non plus. Quelques dérangements dans la programmation de votre magnétoscope peut-être ? Mais peu d'appareils domestiques nécessitent la comparaison d'heures, car ils reposent le plus souvent sur l'écoulement d'un certain nombre de secondes (programmes des machines à laver par exemple ou déclenchement d'un mécanisme dans un certain temps à partir du lancement de la programmation), et cet écoulement n'a aucune raison d'être perturbé par l'an 2000!


Dernière modification: Friday, January 29, 1999
Copyright © 1994-2009, INRIA. Tous droits réservés.

Contacter l'auteur Pierre.Weis@inria.fr