Ouf, le bug de l’an 2038 devrait ressembler à celui de l’an 2000

Nicolas Furno |

Les plus jeunes qui lisent ces lignes n’auront peut-être pas connu le bug de l’an 2000. Et même si vous l’avez connu, vous l’avez sans doute entièrement oublié, et pour cause : l’apocalypse informatique annoncée n’a pas eu lieu. C’était une peur importante tout au long des années 1990, on imaginait alors que tous les ordinateurs allaient planter le 1er janvier 2000 à minuit. L’année 1999 s’est finalement terminée sans incident majeur1.

La Tour Eiffel a affiché un immense compteur pour le passage à l’an 2000, un compteur qui n’a d’ailleurs pas planté le 1er janvier 2000 à minuit (photo nhayashida (CC BY 2.0))

Ce devrait être en gros ce qui se passera aussi en 2038. Car oui, c’est le 19 janvier 2038 à trois heures, quatorze minutes et sept secondes UTC, soit 5h14 du matin en France, que le prochain bug du même genre pourrait avoir lieu. À cette date précise, les ordinateurs, qui mesurent le temps en nombre de secondes qui se sont écoulées depuis 1970 par convention, auront atteint la limite de ce qu’un nombre encodé sur 32 bits peut stocker.

Pour résumer la situation rapidement, les dates sont enregistrées en informatique avec un « timestamp » (horodatage en français), une série de chiffres qui représentent le temps. Le plus commun est le timestamp UNIX qui est constitué du nombre de secondes qui se sont écoulées depuis le premier janvier 1970 à minuit. Par exemple, le timestamp UNIX correspondant à la publication de cet article est 1603271700, soit environ 1,6 milliards de secondes après cette date choisie, ce qui correspond au 21 octobre 2020 à 09h15 en France.

Ce choix est pratique : en utilisant une valeur unique, tous les ordinateurs peuvent échanger entre eux, quel que soit leur fuseau horaire et surtout quelle que soit la manière d’encoder la date. Vous savez peut-être que les Américains commencent par le mois, si bien que la date du jour est 10/21/2020 aux États-Unis, alors que nous commençons par le jour, 21/10/2020. Mais dans les deux cas, le timestamp UNIX est identique, ce qui est indispensable notamment pour communiquer via internet.

Un timestamp UNIX affiché dans le terminal de macOS.

Cette technique est née dans les années 1970 en même temps que les systèmes UNIX et c’est pourquoi cette date symbolique a été choisie. Cette méthode de notation n’a aucune limite en soi, mais il y en a une qui surviendra en 2038 : si le timestamp est encodé en 32 bits, alors on aura atteint le nombre maximal de chiffres qui peut être exprimé. Quand le timestamp atteindra 2147483647, il ne pourra plus être incrémenté. À partir de là, soit la date du système reviendra à 0, soit le système plantera et on obtient le bug de 2038.

C’est inquiétant, mais le bug de l’an 2000 a servi de leçon et on est prêt à gérer ce cas de figure. Pour commencer, tous les systèmes d’exploitations 64 bits utilisent un timestamp UNIX encodé lui aussi sur 64 bits. On estime que le nombre de secondes qu’il peut contenir est environ vingt fois plus important que la durée de l’univers, autant dire qu’on sera tranquille pour un moment. Apple utilise cet encodage depuis Snow Leopard (macOS 10.6), même si c’est El Capitan qui corrige entièrement le problème.

Les bugs pourraient persister pour les anciens systèmes restés en 32 bits, comme les anciens Mac bloqués à une version antérieure du système. On peut déjà savoir ce qui va se passer : sur un Mac équipé de Tiger (10.4), le système ne peut pas dépasser le 31 décembre 2037 par sécurité, il revient à cette date si on essaie de le configurer au-delà. Sur d’autres modèles, on sait que le bug se manifestera par un retour à une date antérieure2.

L’un des rares signes visibles du bug de l’an 2000 : un panneau d’affichage de l’école Centrale de Nantes retourné en l’an 1900, sans doute parce que la date était encodée sur deux caractères seulement3 (Wikimedia Commons (CC BY-SA 3.0))

Pour les ordinateurs 32 bits sous Linux, les créateurs du noyau ont prévu un correctif qui permettra de gérer les dates jusqu’en 2486. Le plus gros problème potentiel devrait toutefois venir des multiples ordinateurs embarqués, par exemple dans les voitures, qui pourraient encore fonctionner. On ne parle pas des ordinateurs de bord, mais bien des systèmes informatiques qui gèrent des fonctions essentielles comme l’ABS, l’ESP et autre.

Ces ordinateurs sont en général limités par des processeurs 32 bits, mais leur utilisation de la date est restreinte. Il s’agit souvent de déterminer des durées, ce qui veut dire qu’ils devraient pouvoir passer de 2038 à une date antérieure sans créer de problèmes majeurs. Dans quelques cas précis, il faudra peut-être mettre à jour des composants anciens de machines ou véhicules avant l’année 2038.

Quoi qu’il en soit, vous pourrez vous endormir tranquilles ce soir, ce nouveau bug devrait bien être aussi mineur que le précédent…


  1. Ce qui ne veut pas dire qu’il n’a pas fallu travailler en amont. Comme vous le rappelez fort justement dans les commentaires, de nombreux programmes ont été mis à jour pour éviter les bugs qui auraient eu lieu avec le passage à l’an 2000.  ↩︎

  2. Un nombre encodé en 32 bits peut évoluer entre 2147483647 et -2147483647. Si l’ordinateur atteint la valeur supérieure, il ne revient pas à 0, mais à la valeur minimale, soit -2147483647. Et comme le timestamp UNIX fixe le 0 au premier janvier 1970, cet horodatage correspond au 13 décembre 1901 à 20h45 et 52 secondes.  ↩︎

  3. Pour optimiser le stockage, denrée extrêmement rare et précieuse les premières années de l’informatique, on encodait parfois les dates sur deux caractères : « 75 » pour 1975, « 91 » pour 1991, etc. Une bonne idée sur le papier, mais les développeurs n’avaient pas anticipé qu’à partir de 2000, le programme considérerait qu’on était revenu en 1900 plutôt qu’en approche du XXIe siècle. C’est très certainement ce qui s’est passé pour ce tableau d’affichage.  ↩︎

Tags
#Bug #Unix
avatar Link1993 | 

Dites, votre conversion de l'UTC... vous êtes sur qu'en 2038 y'aura encore l'heure d'hiver ? 😏

avatar Nicolas Furno | 

@Link1993

Ah ça, je dois dire que je n'y avais pas pensé ! 🙂

avatar Link1993 | 

@nicolasf

Je vis en UTC tous les jours... Je vois ça tout de suite ! 🤣

avatar SartMatt | 

Ah noter que la conversion en heure d'été n'est pas plus juste... Car si le fait de supprimer le changement d'heure est bien acté, le choix entre UTC+1 et UTC+2 n'est pas encore fait il me semble.

avatar Nicolas Furno | 

@SartMatt

Je vais laisser comme ça, de toute façon le Covid-25 ou 32 aura peut être réglé la situation d’ici là.

avatar melen | 

@Nicolas Furno
Quelle forme !

avatar JonasL | 

On estime que le nombre de secondes qu’il peut contenir est environ vingt fois plus important que la durée de l’univers, autant dire qu’on sera tranquille pour un moment.

HAHAHAHA

avatar clemcoste | 

Super article merci !

avatar saoullabit | 

@Nicolas Furno avoir un Shell ZSH pimpé c’est comme porter des chaussettes en sandalettes : c’est la Classe

Pimp my shell
https://github.com/sorin-ionescu/prezto

Glitter all over my pimped shell
https://github.com/romkatv/powerlevel10k

(Oui, oh my zsh! toussa... prezto me convient mieux)

avatar Nicolas Furno | 

@saoullabit

Team oh-my-zsh ici ! 🙂

Mais je change pas grand-chose, en effet.

avatar saoullabit | 

@nicolasf

Brave heart !
En mode bonhomme team Prezto !

avatar Skittou | 

Les contrôleurs embarqués dans les voitures et gérant les fonctions essentielles telles que décrites n'utilisent que très peu les dates, voire pas du tout. J'ai fait du dev logiciel sur des contrôleurs de boîte de vitesses automatique, on n'utilisait jamais les dates. Et même pour des fonctionnalités liées à l'entretien (allumer le témoin de remplacement d'huile par exemple), on se contentait d'incrémenter un compteur en fonction des conditions d'utilisation. Donc pas de soucis.

avatar jackhal | 

"Les contrôleurs embarqués dans les voitures et gérant les fonctions essentielles telles que décrites n'utilisent que très peu les dates, voire pas du tout."

Je dois dire que quand j'ai lu " On ne parle pas des ordinateurs de bord, mais bien des systèmes informatiques qui gèrent des fonctions essentielles comme l’ABS", j'ai ri.
Après, on n'est pas à l'abri d'un code complètement farfelu, mais bon, quand même. :-D

avatar flepr | 

« La Tour Eiffel a affiché un immense compteur pour le passage à l’an 2000, un compteur qui n’a d’ailleurs pas planté le 31 décembre 1999 à minuit »

En fait, pour avoir été devant la Tour Eiffel pour le passage à l’an 2000, je me souviens bien que le compteur avait buggé quelques minutes avant minuit et qu’on n’avait du coup même pas eu le décompte sur le compteur géant !! 😭🤦‍♂️
Mais en effet, rien à voir avec le bug de l’an 2000 a priori ! 😉

avatar Bhaal | 

Effectivement, le compteur n'a pas planté à minuit, mais à 18 h 54 :)

avatar Xalio | 

@flepr

Je m’en souviens aussi! (Retransmit à la TV)

avatar koko256 | 

Il faut peut-être préciser dans l'article que c'est 32 bits signés sinon on a un peu plus de temps (2106). Du coup après 2038 on ne tombe pas à 0 mais un nombre négatif. Au mieux une date avant 1970 (a priori 1902).
Il faut peut-être aussi préciser que même si l'OS est en 64 bits, si le programme est en 32 bits, il aura le même problème car il ne recopiera que les 32 bits de poids faible de l'heure renvoyée par le système.

avatar Nicolas Furno | 

@koko256

C’est vrai que ça m’a surpris ce retour au début du siècle. Ça vient d’où le chiffre négatif ?

avatar bl@ck warrior_69 | 

@nicolasf

Le 32 bits va de -2,147,483,648 à + 2,147,483,648 il me semble non ? Donc si on considère qu'en 2038 on aura atteint la valeur Max et que le 0 c'est 1970, alors si le compteur repart sur la valeur minimale (en passant de +2,147,483,648 à -2,147,483,648, plutôt que de revenir à 0), on tombe sur 1902.

avatar Nicolas Furno | 

@bl@ck warrior_69

Aaah bien vu. Je vais ajouter l’explication, merci !

avatar dodomu | 

@nicolasf

Sur x bit on peut représenter 2 puissance x valeurs différentes.
Chaque combinaison unique de bit correspond usuellement à un nombre, mais ça pourrait très bien être la liste de tout les coloris d’iPhone que ça serait pareil...
Mais revenons à la représentation de nombre : il existe plusieurs façons d’attribuer un nombre entier à une combinaison de x bit, les deux les plus courante sont : le non signé et le signé.
Le premier permet de représenter un entier sans son signe, on a alors des nombres allant de 0 à (2^x)-1.
Mais avec ce système on ne peut stocker que des nombre sans signe (impossible de savoir s’il sont positif ou négatif, par convention on les considère négatif).
On a donc inventé la possibilité de réserver un des x bits pour stocker le signe, ce qui permet usuellement de stocker des nombres entier allant de -2^(x-1) a 2^(x-1)-1.

avatar vince29 | 

> C’est vrai que ça m’a surpris ce retour au début du siècle. Ça vient d’où le chiffre négatif ?

Faut demander à wikipedia https://fr.wikipedia.org/wiki/Bug_de_l%27an_2038.

Le point de départ c'est le 1er janvier 1970 et si tu peux coder les dates jusqu'à 2038 (avec les valeurs positives) cela fait environ 68 ans.
Symétriquement tu peux aussi coder -68 ans avec les valeurs négatives soit jusque 1902 (en fait 13 décembre 1901)

avatar hairsplitter | 

Au moins ça nous rajeunira, c'est une bonne chose.

avatar Kubusiu | 

"Le plus gros problème potentiel devrait toutefois venir des multiples ordinateurs embarqués, par exemple dans les voitures, qui pourraient encore fonctionner"
en même temps, j'ose imaginer qu'en 2038 nos vieilles voitures thermiques auront été reléguées au rang de voitures de collection... Pas trop d'inquietude donc... 😌

avatar Valiran | 

@Kubusiu

Ou alors les écolos auront fermé toutes les centrales nucléaires et nous ferons face à une crise de l’électricité :)

avatar barbe | 

L'interdiction de la vente de voitures thermiques est pour 2040. Le parc actuelle compte moins de 10% de voitures électriques. Ça m'étonnerait que dans 17 ans les voitures thermiques soient du domaine du passé.

avatar armandgz123 | 

@Kubusiu

Ça m’étonnerait vraiment que l’ensemble du parc automobile soit remplacé en 2038...
Il n’y a pour l’instant aucune solution sérieuse face à l’essence/diesel, et un véhicule ça dure environ 10/20/25 ans

avatar marc_os | 

@ Kubusiu
Les très vieilles voitures thermiques comme ma 504 ont zéro informatique et sont donc bug-free by design.

avatar koko256 | 

Je pense que le bug risque d'être quand même plus visible. Il reste beaucoup de programme 32 bits un peu partout (il suffit de regarder les dossiers Program Files (x86) de nos amis windowiens). Et je pense que ce n'est pas limité à windows.

avatar SartMatt | 

Ce n'est pas parce que le logiciel est en 32 bits qu'il gère forcément les timestamps sur 32 bits.

Dans l'environnement Microsoft, depuis Visual Studio 8 (2005), les timestamps sont d'office gérés en 64 bits, même si on compile en 32 bits. Dans les versions antérieures, c'était possible également, mais de manière optionnelle.

Il y a sans doute des adaptations similaires sur les versions 32 bits avec les autres OS.

Et accessoirement, il y a plein de logiciels qui se contrefoutent complètement de la date. Donc pas de problème avec ceux là.

avatar Boboss29 | 

On parle de 2038 quand même… dans 20 ans !

avatar grdelage | 

Il me semble que l’EPS est essentiel pour les enfants. C’est l’ESP qui nous sauve en voiture ;-)

avatar Boboss29 | 

En même temps, un système antérieur à Leopard en 2038... Si des sociétés utiliseront encore ces machines, ça sera l'occasion de faire un mise à jour et de les passer au moins à El Capitan mdr !

avatar marc_os | 

« On est finalement arrivé au premier janvier 2000 avec plus de peur que de mal et sans incident majeur »

Plus de peur que de mal, peut-être, mais ça ne s'est pas fait sans mal et pas tout seul. En effet, en informatique de gestion qui n'utilisait pas Unix, l'année était souvent stockée sous forme de deux caractères en bases de données ou autres. L'octet en mémoire (vive ou de stockage) était cher et rare en 2000. Nombre de cobolistes ont été re-convoqués par les SSII et nombre de services informatiques, car leurs "vieux programmes" qui avaient été bien conçus étaient toujours en service parfois après des années, pour passer l'année à autre format et éviter de se retrouver en 1900 en 2000.

avatar Nicolas Furno | 

@marc_os

Bien vu pour l'encodage sur deux caractères, j'avais totalement oublié cette habitude en effet. Et c'est certainement ce qui explique le bug d'affichage du panneau à l'école Centrale de Nantes, donc j'ai glissé l'explication en note de bas de page.

Merci 👍

avatar jcp25 (non vérifié) | 

@marc_os

Nombre de cobolistes ont été re-convoqués par les SSII et nombre de services informatiques, car leurs...
---
Tout à fait !
Et ils se sont fait des testicules en or pour intervenir sur leurs vieux programmes... Surtout qu'à l'époque, les commentaires...
Encore plus, quand ils ont du être d'astreinte entre le 24 décembre 1999 et le 5 janvier 2000 pour être SÛR que tout se passe bien.
Le bon vieux temps...

avatar BordelInside | 

Peut-être rappeler que si le passage à l'an 2000 n'a pas généré le chaos annoncé à cause du bug du même nom, c'est quand même un peu (beaucoup en fait) grâce aux cohortes d'informaticiens qui ont été embauchées fin des années 90 pour se palucher des millions (milliards ?) de lignes de code, fichiers et bases de données à la recherche et correction de dates mal gérées.

Une aubaine au passage pour pas mal de monde - dont moi pour qui ce fut "au revoir RMI et bonjour boulot de cadre sympa" :-)

avatar brunnno | 

@BordelInside

Tout à fait ! Si ça c’est à peu près bien passé c’est aussi grâce aux équipes info...
Donc c’est un peu aller vite que de dire que l’impact a été "minime"...

avatar BordelInside | 

@brunnno
"c’est un peu aller vite que de dire que l’impact a été "minime"..."

Ouais, mais les trucs qui se passent bien, c'est chiant, ça fait pas le buzz, ça n'intéresse personne - mieux vaut laisser entendre que le bug de l'an 2000 était une sorte de canular (puisqu'il n'a pas eu d'effets, c'est qu'il ne devait pas vraiment exister - cqfd)

avatar Nicolas Furno | 

@BordelInside

Ce n'est pas ce que je voulais dire, et je présente mes excuses à tous les informaticiens qui ont sauvé le monde à l'époque.

Plus sérieusement, je me rappelle très bien des psychoses qui tournaient en boucle à l'époque, sur le fait que tout allait cesser de fonctionner et qu'en gros on allait revenir à l'âge de pierre. C'était très impressionnant et largement surestimé, je pense, même si ça ne veut pas dire que personne n'a rien fait, je suis d'accord.

Je vais ajouter une note, quand même.

avatar BordelInside | 

@Nicolas Furno
"je présente mes excuses à tous les informaticiens qui ont sauvé le monde à l'époque."

Bah déjà qu'à l'époque, on était vu comme des puceaux boutonneux mal fringués et probablement psychopathe, incapables de profiter de la vie de manière "normale" alors si en plus on nous retire un de nos rares titres de gloire... :D

avatar oomu | 

@BordelInside

à "l'époque ?" :)

#RetournePsychoterDansSonAntre

avatar oomu | 

@brunnno

Ceci est le fardeau de l'informaticien

quand ça va pas: c'est de sa faute !
quand ça va: il sert à rien !

Mais tel Spiderman, il a travaillé dans l'ombre pour garantir le bon vivre du quartier...

avatar BordelInside | 

@oomu
"Mais tel Spiderman,"

With great PowerPC comes great responsability

avatar icecubee5 | 

@BordelInside
man sudo

avatar Franck971 | 

@BordelInside

Et également pour les ventes d’ordinateurs car beaucoup de société (et particuliers) on préféré se ré équiper au cas où !

avatar BordelInside | 

Bon, par contre, pour briller en soirée, le "moi, j'ai bossé sur le bug de l'an 2000, c'est un peu grâce à moi que le monde ne s'est pas écroulé" ça ne le faisait déjà pas trop à l'époque, ça ne le fait toujours pas aujourd'hui (et en plus, aujourd'hui ça confirme ton étiquette de vieux)

ô tempora, ô mores et tutti frutti

avatar AdrianPal | 

Pour info, une coquille s'est glissée dans l'article (dans la légende de la photo, dans le texte d'intro, ...) : personne ne pensait que les ordinateurs allaient planter le 31/12/1999 à 00h (i.e. dans le nuit du 30 au 31), mais bel et bien le 01/01/2000 à 00h (i.e. dans la nuit du 31 au 01) ! 😉

avatar Nicolas Furno | 

@AdrianPal

Ah oui, instinctivement je me fais toujours avoir avec ça, mais c'est vrai.

avatar beteldor | 

Le correcteur de trajectoire c’est l’ESP pas l’EPS

Pages

CONNEXION UTILISATEUR