Passage à l'heure d'été : florilège des meilleurs bugs dus au changement d'heure

Une heure de perdue, dix tickets de gagnés — Ce dimanche 29 mars, on avance nos montres d'une heure.
Un rituel que des dizaines de pays s'imposent depuis plus d'un siècle, et que le monde du logiciel n'a toujours pas complètement digéré. Petit florilège des plus beaux fails en lien avec le changement d'heure.
2h du mat', l'heure qui n'existe pas
Le principe du passage à l'heure d'été est simple : à 2h00, il est 3h00. Et cette heure fantôme, entre 2h et 3h du matin, n'existe tout simplement pas. C'est le genre de détail qui ne pose aucun problème à un humain, mais qui rend dingue n'importe quel scheduler.
Les cron jobs planifiés à 2h02 ? Ils ne se déclenchent jamais. IBM a d'ailleurs très sérieusement documenté le phénomène : la première tâche planifiée après le saut horaire de printemps ne s'exécute tout simplement pas.
Côté Kubernetes, le passage à l'heure d'hiver 2023 a offert un magnifique cas d'école : un simple CronJob planifié à 2h du matin s'est retrouvé exécuté en boucle pendant l'heure "répétée", Kubernetes lançant de nouvelles instances toutes les quelques secondes.
Résultat : plus de 1000 jobs en double, une base de données saturée et une facture cloud de 5000 dollars !
L'iPhone qui réveillait vraiment (ou pas du tout)
En 2010 et 2011, Apple a offert aux utilisateurs d'iPhone un réveil à géométrie variable.
À chaque changement d'heure, les alarmes récurrentes sur iOS 4.1 décidaient de sonner soit une heure trop tôt, soit une heure trop tard, selon l'humeur du fuseau horaire.
En Australie, 55% des utilisateurs interrogés avaient alors rapporté le problème. En Europe, des millions de gens sont arrivés en retard au boulot. Le workaround officiel d'Apple ? Utiliser des alarmes ponctuelles au lieu des récurrentes. Ah ben oui, pas con ça.
Encore plus récent : Claude en boucle infinie
Celle-ci est toute fraîche. Le 8 mars dernier, lors du passage à l'heure d'été aux États-Unis, Claude Desktop s'est retrouvé piégé dans une boucle infinie.
Les tâches planifiées entre 2h et 3h du matin ne pouvaient pas résoudre l'heure qui n'existait pas, et l'outil s'est mis à tourner en boucle, enchaînant les appels sans jamais trouver de sortie.
Résultat : des sessions autonomes qui ont brûlé des tokens toute la nuit. Plusieurs utilisateurs Pro se sont réveillés le dimanche matin pour découvrir que 75% de leur quota hebdomadaire avait été englouti par une seule interaction fantôme.

Anthropic a identifié le problème, désactivé les tâches planifiées et poussé un correctif dans la foulée.
Des hôpitaux qui repassent au papier
Aux États-Unis, le logiciel de dossiers médicaux Epic Systems (utilisé par la majorité des hôpitaux) gérait si mal les changements d'heure qu'il pouvait tout simplement supprimer des relevés de constantes vitales saisis pendant l'heure ambiguë.
En 2018, plusieurs établissements dont Johns Hopkins (l'un des hôpitaux les plus réputés du pays) avaient trouvé une parade imparable : éteindre Epic et repasser aux dossiers papier pendant la transition.
Quand votre logiciel médical à plusieurs millions de dollars vous ramène au stylo-bille deux fois par an, on peut légitimement se demander qui a rédigé le cahier des charges.
La Freebox et le bug des 28 ans

Le 25 mars 2012 (oui bon, ça date un peu), les 5 millions de Freebox de France ont refusé de passer à l'heure d'été. Le coupable : un bug dans la bibliothèque µClibc, la libc légère utilisée dans les systèmes embarqués Linux.
Le code qui calculait le dernier dimanche de mars ajoutait le jour bissextile à tous les mois après janvier, au lieu de l'ajouter uniquement à février. La différence entre un > 1 et un == 2 dans une condition en C. Résultat : en année bissextile, l'algorithme pensait que mars faisait 32 jours et planifiait le changement d'heure au 1er avril au lieu du 25 mars.
Le bug ne se manifestait que quand le dernier dimanche de mars tombait pile 7 jours avant la fin du mois, en année bissextile. Un alignement qui ne se produit que tous les 28 ans ! Enregistrements TV décalés, guide des programmes à côté de la plaque, horloge du boîtier bloquée en heure d'hiver. Free a déployé un correctif firmware trois jours plus tard.
Le plus beau dans l'histoire ? Le correctif existait déjà dans µClibc depuis novembre 2011, soumis par un développeur avec une adresse @free.fr. Quatre mois avant l'incident, quelqu'un chez Free avait corrigé le bug en amont, mais l'équipe firmware n'avait jamais intégré le patch.
Et si le vrai bug c'était le changement d'heure lui-même ?
Il existe une liste célèbre dans la communauté dev : "Falsehoods Programmers Believe About Time".
On y trouve des perles comme "une journée fait toujours 24 heures", "le passage à l'heure d'été/hiver est toujours d'une heure" (Lord Howe Island en Australie applique un décalage de 30 minutes) et "les fuseaux horaires ne changent jamais".
Jon Skeet, le contributeur le plus réputé de Stack Overflow, a créé une bibliothèque entière (Noda Time) uniquement parce que la gestion du temps dans .NET était fondamentalement cassée.
Alors ce dimanche, lorsque vous avancerez vos montres d'une heure, ayez une pensée pour tous les schedulers, les cron jobs et les alarmes récurrentes qui, quelque part, ont peut-être un peu perdu la notion du temps.
Et si votre CI/CD ne se déclenche pas lundi matin, vous saurez probablement pourquoi.
À propos de l'auteur
Nicolas Lecointre
Chief Happiness Officer des développeurs, ceinture noire de sudo. Pour rire, j'ai créé Les Joies du Code. J'utilise Vim depuis 10 ans parce que je sais pas comment le quitter.
À lire également

Passbolt : le gestionnaire de mots de passe open source que votre équipe mérite vraiment
Je connais l’histoire, vous la connaissez, on la connaît tous. Le stagiaire qui est resté six mois, qui a fini par avoir accès à un peu (beaucoup) plus de choses...
Articles similaires

"C'est pas moi, c'est l'IA" : après des pannes en cascade, Amazon impose la supervision humaine sur son code IA

DarkSword : le kit d'exploit iOS a fuité sur GitHub, tout le monde peut pirater des iPhone

Claude ouvre son contexte à 1 million de tokens : ce que ça change vraiment

Sécurité open source : les créateurs de l'IA mettent 12,5 millions de dollars sur la table pour éponger les dégâts

"C'est pas moi, c'est l'IA" : après des pannes en cascade, Amazon impose la supervision humaine sur son code IA

DarkSword : le kit d'exploit iOS a fuité sur GitHub, tout le monde peut pirater des iPhone

Claude ouvre son contexte à 1 million de tokens : ce que ça change vraiment

Sécurité open source : les créateurs de l'IA mettent 12,5 millions de dollars sur la table pour éponger les dégâts
Plus de contenu

git revert

Quand je vois quelqu'un utiliser Internet Explorer
Quand je vois un console.log en prod et que je sais qu'il vient de moi

Quand on me demande de prendre la maintenance d'un projet VB

Quand un énorme merge passe sans aucune erreur

Quand j'ajoute ma touche personnelle au code du stagiaire

Quand on me demande de faire des heures sup le vendredi soir
Quand je vais voir le service info pour gratter un nouvel écran

git revert

Quand je vois quelqu'un utiliser Internet Explorer
Quand je vois un console.log en prod et que je sais qu'il vient de moi

Quand on me demande de prendre la maintenance d'un projet VB

Quand un énorme merge passe sans aucune erreur


