- Debian officialise l’adoption de
time_t en 64 bits, y compris sur les architectures 32 bits à partir de la prochaine version Debian 13, afin de bloquer à l’avance le problème Y2K38 (Unix Epochalypse)
- En raison des limites du
time_t 32 bits existant, l’heure pourrait revenir à 1900 après le 19 janvier 2038 ; il a donc été décidé de ne plus laisser ce problème en suspens
- Le matériel 64 bits est déjà à l’abri, mais la demande pour Debian subsiste sur des appareils 32 bits sensibles aux coûts, comme l’embarqué et l’IoT, d’où la nécessité d’agir en amont
- Un chantier de grande ampleur est en cours : faire basculer simultanément le type
time_t, réparti dans 6 429 paquets, en acceptant une rupture de compatibilité ABI
- Certaines architectures legacy prises en charge, comme
i386 et hurd-i386, restent des exceptions, mais l’introduction d’une nouvelle architecture x86 (i686) fondée sur time_t 64 bits est également évoquée
Réponse de Debian au bug Y2K38 : passage au temps en 64 bits
- Debian passe au temps en 64 bits sur tous les environnements, à l’exception de certains des matériels les plus anciens encore pris en charge, afin d’éviter le problème Y2K38, aussi appelé Unix Epochalypse
- Cela permet d’empêcher l’erreur de valeur temporelle due au dépassement de la plage d’un
signed int 32 bits, prévue pour le 19 janvier 2038
Contexte du problème Y2K38 et de l’Unix Epochalypse
- Le problème Y2K38 concerne les systèmes Unix qui représentent le nombre de secondes écoulées depuis le 1er janvier 1970 avec un
signed int 32 bits : après 2038, un overflow se produit et l’heure peut revenir à tort dans le passé, comme en 1900
- Comme pour Y2K auparavant, cela provient d’une décision architecturale ayant retenu un format de données trop court
- Lors du passage à l’an 2000, l’anticipation des développeurs a permis d’éviter une perturbation majeure
- Les logiciels pour matériel 64 bits sont déjà sûrs, mais Debian reste largement utilisé dans les environnements embarqués, modestes ou legacy
Principales mesures prises par Debian
- À partir de la version Debian 13 "Trixie",
time_t en 64 bits devient la valeur par défaut sur toutes les principales architectures
- Le matériel 64 bits est déjà protégé, mais le problème est plus fréquent sur les appareils embarqués et matériels legacy reposant sur des processeurs 32 bits
- Ces équipements restent employés dans des domaines sensibles aux coûts et produits en grands volumes, comme le contrôle automobile, l’IoT, les téléviseurs ou les routeurs
- Beaucoup d’équipements récents utilisent leur propre Linux compilé avec OpenEmbedded, Alpine, Android ou Gentoo, mais les usages d’appareils embarqués basés sur Debian devraient perdurer encore plusieurs années
Mise en œuvre et changements
- Les variables
time_t sont réparties dans 6 429 paquets, ce qui a nécessité un travail de grande ampleur
- Cette évolution peut rompre la compatibilité ABI (Application Binary Interface) ; elle a donc été coordonnée simultanément dans toutes les bibliothèques et tous les paquets concernés
- D’après l’équipe de maintenance, ce travail est achevé et suffisamment testé
Exceptions et plans futurs
- Le port
i386 (x86 historique) conserve un time_t 32 bits afin de préserver la compatibilité d’exécution des binaires existants
- L’architecture
i686 pourrait faire l’objet de discussions séparées pour adopter le temps en 64 bits et une ISA plus récente
- Le port
hurd-i386 ne sera pas migré faute de prise en charge suffisante côté noyau ; à la place, une transition vers hurd-amd64 est en cours
Notes pour les développeurs
- Les développeurs peuvent tester, via les méthodes décrites sur le wiki Debian, si leur logiciel risque de casser avec l’adoption de variables de temps en 64 bits
- Davantage de détails et la documentation technique sont disponibles sur le wiki Debian
1 commentaires
Avis Hacker News
time_ten 64 bits, je penserai à luimm/yy) emploie ce format parce qu’il est pratique et court ; c’est suffisant pour la durée de vie d’une carte, mais cela pourrait poser un problème de conversion en 2100 ; la plupart des problèmes Y2K venaient de l’interface utilisateur (champ texte de deux caractères,+1900codé en dur, etc.) ; le bug Y2K que j’ai vu moi-même, c’était un forum Internet passé de 1999 à 19100 (simple erreur d’affichage) ; Y2K n’était pas un problème propre à COBOLtime_t64 bits résoudra l’Epochalypse, mais tous les systèmes ne passent pas simplement à des secondes sur 64 bits ; ext4 est déjà passé à une résolution fractionnaire sur 30 bits (au niveau de la nanoseconde) et à une résolution en secondes sur 34 bits, mais le problème réapparaîtra quand même dans quelques siècles ; je m’attends à ce qu’on finisse un jour par se stabiliser sur des horodatages 128 bits avec 64 bits pour les secondes et 64 bits pour la partie fractionnaire, ce qui couvrirait tout l’avenir prévisible de l’histoire humainetime64_test déjà terminée sur tous les ports 32 bits sauf i386 ; i386 est la seule exception à cause de la compatibilité binaire existante, et tous les autres, y compris m68k, ont été modifiés ; j’ai moi-même effectué la transition pour m68k, powerpc, sh4 et hppatime_tn’est pas une variable, c’est un type de donnéestime_tapparaît vraiment partout. Il apparaît dans le code source de 6 429 paquets sur 35 960. Les paquets qui exposent via leur ABI des structures contenanttime_tdoivent effectuer toute la migration ABI en même temps » ; le wiki l’expliquait plus clairement que l’articleRLIMIT_STACK, par exempleulimit -s 4000donne une pile de 4 Mo ; pour aller plus haut, il faut modifier/etc/security/limits.confpuis se reconnecterMAX_ARG_STRLENet de recompiler le noyau ; utiliser une machine avec une taille de page plus grande (par exemple un noyau RHEL Arm avec des pages de 64k) est aussi une option ; mais il est bien plus simple d’utiliser des pipes au lieu d’un tampon de commande pour faire passer des données entre processustime_tsur 64 bits