Comme beaucoup d’entre vous le savent déjà, la Freebox v.6 a raté son passage à l’heure d’été. Ce matin, alors que mon PC, ma montre et mon téléphone affichent 09:44, la Freebox posée à côté de mon bureau affiche encore 08:44. Au-delà du fait divers amusant, source de plaisanteries et de sarcasmes sur Twitter, je trouve cette mésaventure intéressante, car elle trouve son origine dans des logiciels que connaissent bien les amateurs de Linux embarqué !
La bibliothèque µClibc regroupe les fonctionnalités communes dont les applications de haut-niveau ont besoin (par exemple des traitements de chaîne de caractères, des fonctions de calcul, des méthodes d’accès aux fichiers, etc.) en fournissant les points d’entrée pour le noyau Linux (les appels-système). La particularité de la µClibc par rapport aux bibliothèques « C » plus classiques comme la Gnu Glibc est d’être écrite en essayant de réduite au maximum la taille du code exécutable, et de pouvoir ainsi être employée dans les systèmes embarqués avec de fortes contraintes de place mémoire.
La plupart des systèmes embarqués construits avec des outils comme Buildroot (comme ceux que nous avons mis en oeuvre dans plusieurs articles) s’appuient sur la µClibc, et la Freebox v.6 ne fait apparemment pas exception, même si la bibliothèque n’est pas explicitement mentionnée dans la liste de logiciels libres décrites ici.
Dans la dernière version stable de la µClibc (0.9.33 du 1er février), un bug a été corrigé, comme cela est mentionné dans sa page de ChangeLog. Voici la portion qui nous intéresse :
commit 47f3da1cf49377c25772bb54d07db55225bbb142 Author: Guillaume Bourcier Date: Tue Oct 11 13:45:33 2011 +0200 libc: fix daylight saving time handling The algorithm computing daylight saving time incorrectly adds a day for each month after January for leap years. The clock shift from/to DST can be delayed if the last Sunday of a transition month is exactly seven days before the first of the following month. This change adds a day for the February month only. Signed-off-by: Guillaume Bourcier Signed-off-by: Richard Braun Signed-off-by: Carmelo Amoroso
Pour les années bissextiles (comme 2012), l’algorithme de calcul de la date de passage à l’heure d’été ajoutait par erreur un jour au mois de février.
Ainsi le dernier dimanche du mois de mars (ce qui définit officiellement la date du changement d’heure) était considéré comme le dimanche 31 mars (alors que le 31 mars tombe en réalité un samedi). Visiblement le firmware de la Freebox ne contient pas encore cette correction, aussi pense-t-elle que le changement horaire doit avoir lieu dimanche prochain.
Si cette explication est la bonne, nos Freebox devraient basculer en heure d’été dimanche 1er avril à 02:00. Peut être Free va-t-il plaider l’hypothèse d’un poisson d’avril sophistiqué et anticipé ? À moins qu’une mise à jour du firmware intervienne d’ici là.
Une touche d’humour supplémentaire : dans le message ChangeLog ci-dessus j’ai supprimé la fin des adresses mails des personnes mentionnées pour leur éviter le spam. Il faut quand même savoir que l’adresse de G.Bourcier qui a détecté et corrigé le bug est « Free.fr » !
[AJOUT le 30/03/2012]: Free annonce avoir modifié le firmware du Freebox Server (version 1.1.5) pour corriger l’erreur. Il faut le redémarrer pour que la mise à jour ait lieu. Je ne l’ai pas fait sur ma Freebox pour vérifier dimanche si le changement horaire est bien décalé d’une semaine.
[AJOUT le 01/04/2012]: Comme on pouvait s’y attendre, le changement horaire a eu lieu cette nuit et l’afficheur de la Freebox indique bien l’heure correcte. Il est temps de faire la mise à jour du firmware, car sa nouvelle version intègre plusieurs corrections.
Réaction très tardive. La Freebox HD (v5) a eu le même problème et la même solution. D’ailleurs, il y a peut-être une mise à jour pour elle aussi. En même temps, le problème n’est pas près de se reproduire !
Je viens d’apprendre, soit dit en passant, avec un intérêt que ma Freebox utilise Busybox et Linux 2.6. Marrant : )