Windows 95/98 et le nombre 49,7

Les systèmes d'exploitation Windows 95 et Windows 98 étaient victimes d'une erreur de programmation empêchant un ordinateur de fonctionner plus de 49,7 jours d'affilé. Oublions les mauvaises langues colportant que personne n'a vu Windows (95/98) survivre plus de 24h :-) Le problème était que la fonction Get_System_Time(), qui donne le nombre de milli-secondes depuis que Windows a été lancé, donnait un résultat sur 32 bits. Cette fonction étant utilisée un peu partout dans le système (tel que les pilotes de périphériques), le fait qu'elle boucle à zéro posait de sérieux problèmes ! Petit script Python pour calculer la durée limite :

>>> from datetime import timedelta
>>> print timedelta(microseconds=(2 ** 32)*1000)
49 days, 17:02:47.296000

Pour en savoir plus, lisez le bulletin d'informations n°216641 de Microsoft.

Bug de l'an 2000

Le « Bug de l'an 2000 » a fait transpirer des centaines, des milliers (voir plus) d'informaticiens durant les cinq années qui ont précédées la Saint-Sylvestre de l'an 2000. Pour mémoire, la crainte était que le système de stockage des dates boucle sur l'année 1900 ce qui aurait été plutôt gênant. Effectivement, la majorité des logiciels utilisaient deux chiffres (ex: 95 pour 1995) pour stocker une année. Il faut dire que la mémoire vive et la mémoire de masse coûtaientt très chers, et diverses astuces étaient utilisées pour économiser la place à tout prix !

L'opération aurait coûté la baguatelle de 450.000.000.000 dollar US (selon le Gartner Group). Et finalement, peu de systèmes ont vraiment été déréglés. On a lu quelques faits divers tels qu'un ancien, âgé de plus de 100 ans, convoqué à son service militaire :-)

Source : Article ''Bogue de l'an 2000'' de Wikipédia.

Fin du Monde Unix

Les systèmes d'exploitation Unix (en vrac: Linux, FreeBSD, etc.) utilisent un peu partout le format Epoch pour stocker une estampille de temps (date et heure). Ce format utilise nombre de seconde écoulées depuis le 1er janvier 1970 à 00h00.

Le soucis est que le format Epoch a une taille fixe : 32 bits, dont seuls 31 sont utilisables (un bit est réservé pour le signe pour ne je ne sais quelle raison). Voici un petit script Python pour calculer la date de l'explosion :

>>> import datetime
>>> t0 = datetime.datetime(1970, 1, 1, 0, 0, 0)
>>> dt = datetime.timedelta(seconds=(2 ** 31))
>>> print "Fin du monde Unix : %s" % (t0+dt)
Fin du monde Unix : 2038-01-19 03:14:08

Ce format étant utilisé un peu partout dans le système d'application (noyau, pilote de périphérique, applications, etc.), on peut craindre un nouveau bogue de l'an 2000 ...

Pourtant, dans les années 2000, un certain John Titor fit apparition sur les forums de discussion en ligne. Je cite Wikipédia : « Il affirmait être un soldat qui a été recruté par un projet gouvernemental de voyage temporel. Il aurait été envoyé en 1975 pour retrouver un IBM 5100 qu'il affirmait être nécessaire pour surmonter un bug Unix. » Ouf, nous voilà rassuré, à moins que ça soit un canular !?

Quelques espoirs pour les générations futures

Pour information, certains ont vu plus large. Exemples :

  • Le langage de programmation Python permet de stocker une date entre 1 en 9999 avec son type datetime ;
  • Windows (NT/XP) dispose d'une format d'estampille de temps sur 64 bits qui désigne le nombre de centaines de micro-secondes écoulées depuis le 1er janvier 1601 à 00h00. Mon calcul approximatif m'a donnée une date limite aux environs de l'année 60.095 ... de quoi voire venir.

N'oublions pas le stockage sous forme de texte plat (utilisé dans les courriels par exemple) qui demeure une très bonne solution de stockage durable.