Je stocke déjà des grenades lacrymogènes et de l'eau en bouteille! : P
Kevin Cantu
Réponses:
17
J'ai rencontré ce problème dans un système Linux embarqué qui devait gérer les dates après 2038 dans certains certificats cryptographiques à long terme, donc je dirais que la similitude de cela dépend de votre domaine d'application.
Alors que la plupart des systèmes devraient être prêts bien avant 2038, si vous vous trouvez aujourd'hui à calculer des dates très loin dans le futur, vous pouvez avoir un problème.
Bon! Je n'ai pas pensé à cet exemple! Qu'est-ce que la norme PKI utilise comme syntaxe temporelle dans les certificats? Je n'ai jamais regardé!
geoffc
@geoffc, En fait, c'était un format propriétaire et avait ses structures de date / heure internes, qui étaient elles-mêmes assez grandes pour s'adapter aux dates après 2038, mais il utilisait des fonctions GLIBC pour la conversion date / heure. Si je me souviens bien, l' mktimeappel échouait silencieusement.
Alex B
13
Je pense que ce sera un problème important, beaucoup plus pernicieux que les problèmes de l'an 2000 de 1999/2000 car le code affecté est généralement de niveau inférieur (c'est CTIME) et il est donc plus difficile de repérer les endroits où le temps est stocké de cette façon.
Pour compliquer davantage les choses, le fait que Y2K ait été perçu comme un squib humide rendra plus difficile d'attirer l'attention sur le problème dans la perspective de l'événement.
Références culturelles:
Cory Doctorow essayait un nouveau modèle pour la mise en service / publication de nouvelles sous licences ouvertes, et j'ai suggéré un thème pour 2038, ce qu'il a brillamment fait dans Epoch: http://craphound.com/?p=2337
S'exprimant en tant que personne qui travaillait sur le problème à l'époque, Y2K a fait long feu à cause de beaucoup de travail et de planification à l'avance. La perception de la salive humide a été renforcée par toutes les condamnations exagérées dans les médias. Je m'attends à beaucoup de planification et de travail à partir de 2035 environ, mais si nous sommes chanceux, nous manquerons le blitz médiatique.
David Thornley
Vive le lien Mark.
boehj
9
Il y a quelques années, des problèmes ont déjà été signalés, dans des domaines tels que les programmes hypothécaires faisant des calculs sur les prêts à 30 ans: 2008 + 30 = 2038.
Un système d'exploitation 64 bits n'est finalement pas pertinent pour le problème 2037. (CTIME s'épuise plus près de 2037 que 2038).
La question n'est pas la profondeur de bits de l'OS, mais plutôt comment l'OS stocke le temps. Ou comment la colonne de base de données choisit-elle de stocker l'heure. Ou comment cet annuaire fournit-il le temps de stockage de l’attribut de syntaxe de temps à l’arrière
C'est un problème beaucoup plus grave que les gens ne le pensent, car il est tellement endémique et courant d'avoir utilisé des compteurs de temps 32 bits.
Chaque instance qui stocke du temps doit être revisitée, et toutes les API mises à jour, et tous les outils qui l'utilisent également mis à jour.
Les couches d'abstraction qui vous permettent de régler l'heure via un format d'heure lisible par l'homme, au lieu des données brutes écrites, le facilitent, mais ce n'est qu'un cas.
Je soupçonne que cela va être beaucoup plus important que la plupart des gens ne le pensent.
Le plus gros problème que je vois sont les formats de fichiers et les systèmes de fichiers, mais la plage de dates pour ext4 est 2514, vfat est 2107. Le problème est avec reiserfs (2038).
Maciej Piechotka
ReiserFS a également d'autres problèmes. Je pense toujours qu'il y a beaucoup plus d'endroits cachés que les gens pensent de ce temps de magasin dans CTIME. C'est un format de temps extrêmement simple et utile. Bien sûr, CTIME non signé n'a pas le problème 2037. Je pense que c'est le cas de l'horodatage 2107.
geoffc
1
Vous pensez à Apple HFS. FAT n'utilise pas time_tdu tout. Il stocke l'année, le mois et le jour sous forme de champs dans une valeur 16 bits: 5 bits pour le jour, 4 pour le mois, laissant 7 pour l'année. 2107 est 1980 (année zéro dans les terres FAT) + 2 ^ 7-1. Pour plus de plaisir, FAT stocke l'heure de la même manière dans une autre valeur 16 bits, mais si vous faites le calcul, vous constatez que vous avez besoin de 17 bits pour stocker l'heure de la journée de cette façon. FAT contourne ce problème en supprimant un bit de résolution pendant quelques secondes; FAT ne peut pas distinguer les changements à moins de 2 secondes d'intervalle. Ah, Microsoft, quel monde ennuyeux ce serait sans vos incompatibilités inutiles!
Warren Young
8
C'est mon avis, mais ce problème est dû à un problème de compteur 32 bits, aujourd'hui la plupart des systèmes d'exploitation sont mis à jour pour gérer le temps sur 64 bits (au moins sur les ordinateurs 64 bits), donc je suppose que tous les systèmes d'exploitation et logiciels seront prêts longtemps avant 2038, disons 2020. Il est donc possible que vous ne rencontriez des problèmes que si, en 2038, vous exécuterez toujours des logiciels à partir de 2020.
Ce ne sera probablement pas un problème dans presque tous les cas. J'espère.
J'ai essayé la version Ubuntu 32 bits et cela a montré des problèmes 2038 mais l'exécution de la version Ubuntu 64 bits n'a montré aucun signe de problème 2038. Je n'ai essayé aucun autre Unix.
Jimmy Hedman
Oui, sur la plupart des versions 32 bits, vous verrez le problème, mais pas sur la version 64 bits. Vous pouvez vous attendre à ne plus avoir de système d'exploitation 32 bits en 2038.
rayon
2
C'est une supposition ridicule. Nous utilisons toujours des microprocesseurs 16 (et même 8 bits) dans le monde d'aujourd'hui, qu'est-ce que les microprocesseurs 32 bits vont disparaître comme par magie à l'avenir? Il est juste de dire que cela n'aura pas d'impact sur l'utilisateur moyen, mais dans les cas marginaux, cela pourrait continuer d'être un problème.
Eli Frey
Eh bien - les ordinateurs 16 bits et 8 bits peuvent 1. déplacer la date 0 (du 01/01/1970 au 01/01/2010 par exemple) - mais cela briserait certaines conventions API / ABI 2. étendre le champ temporisateur ( qui peut dans certains cas ne casser que «ABI»).
Maciej Piechotka
1
Pas si grave.
Lors du premier blitz Y2K, dans lequel les fournisseurs de logiciels et de matériel étaient tenus de certifier leurs produits comme "conformes Y2K" afin d'être vendus (je me souviens que les câbles réseau sur PC Connection étaient certifiés conformes Y2K), beaucoup d'entreprises ont fait des audits détaillés de tout , en réglant les horloges à l'avenir et en testant.
À l'époque, comme le coût des tests était si élevé, ils ont presque toujours testé avec plusieurs dates, comme 1/1/99 (certains développeurs peuvent avoir utilisé 99 comme sentinelle), 31/12/99, 1/1 / 00, le saut de 2000, 19/01/38, et bien d'autres. Voir ici pour une liste fastidieuse.
Ainsi, je crois que tout logiciel important qui existait en 1999 n'aura probablement pas 2038 bugs, mais de nouveaux logiciels écrits depuis par des programmeurs ignorants pourraient le faire. Après que l'ensemble des programmeurs de la débâcle de l'an 2000 aient généralement été beaucoup plus conscients des problèmes d'encodage de date, il est donc peu probable qu'il ait un impact aussi important que celui de l'an 2000 (qui, en soi, était quelque chose d'un anticlimax).
Pourriez-vous nous en dire plus à ce sujet, pour clarifier ce qui devient exactement le problème et comment y réagir?
Anthon
Le problème vient de l'entier 32 bits utilisé pour calculer le temps. Le temps est mesuré en nombre de secondes écoulées depuis le 1er janvier 1970. Par exemple, après un jour, ce compteur sera à 86400. Ainsi, en 2038, cette valeur dépassera car elle contiendra une valeur supérieure au nombre pouvant être conservé dans un entier 32 bits non signé. Un système 64 bits utilisant 64 bits pour l'horodatage n'aura pas ce problème car il pourra fonctionner jusqu'à 15h30:08 le dimanche 4 décembre 292 277 026 596 (292 milliards d'années)
Rahul Kadukar
0
#include <time.h>
#include <stdio.h>
int main() {
time_t t = (time_t)(1L << (sizeof(time_t)*8 - 9));
printf("%d\n", sizeof(time_t));
}
il doit être de 1 au lieu de 9 mais ctime ne gère pas de date plus grande:
8 - Sun Jun 13 07:26:08 1141709097
Le temps de mon système (64 bits bien sûr) peut fonctionner encore 1 million d'années de plus. La solution est de mettre à jour les systèmes en 64 bits.
Le hic, c'est que les programmes ne peuvent pas le gérer. Particulièrement vieux, propriété et non entretenu. Les développeurs sont habitués aux faits suivants:
intsont 32 bits (en fait, ils sont conservés en 32 bits sur les systèmes 64 bits, entre autres, car on supposait qu'ils étaient toujours 32 bits)
La plupart des types (tels que time_t) peuvent être coulés en toute sécuritéint
Dans le logiciel FLOSS populaire, les deux choses ne passeront probablement pas à travers l'examen de «nombreux yeux». Sur les moins populaires et propriétaires, cela dépendra largement de l'auteur.
Je suppose que sur le monde libre * nix, le 2038 passera «inaperçu» alors que je m'attends à des problèmes sur les plates-formes «propriétaires» (c'est-à-dire celles avec un grand nombre de logiciels propriétaires) - surtout si une partie de la partie cruciale ne sera pas maintenue.
Ce n'est pas le «système» ou «OS». La plupart des systèmes d'exploitation 32 bits précédents (même les systèmes d'exploitation 16 bits) pouvaient faire des calculs 64 bits. La profondeur de 64 bits au niveau du système d'exploitation est essentiellement une référence au modèle de mémoire, pas à la capacité de faire des calculs. Et le temps est une question de mathématiques.
geoffc
Oui et non. Il est vrai que les systèmes d'exploitation 32 bits et 64 bits peuvent effectuer une arithmétique 64 bits (vous pouvez émuler n'importe quelle arithmétique). Cependant time_t(ou équivalent) sur un système d'exploitation 32 bits se trouve avoir 32 bits tandis que time_t(ou équivalent) sur un système d'exploitation 64 bits se trouve avoir 64 bits. J'ai pensé que c'était suffisamment clair même avec une certaine simplification.
Maciej Piechotka
0
Si c'est quelque chose comme Y2K, certaines personnes ont déjà été touchées et changent de logiciel, mais la plupart des développeurs l'ignoreront jusqu'à un certain point dans les années 2030, probablement en 2035 environ, moment auquel il y aura beaucoup de travail à faire et toute personne assez âgée connaître K&R C et pas encore trop sénile pourra soudainement se sous-traiter pour beaucoup d'argent. La transition actuelle montrera beaucoup de choses qui n'ont pas encore été faites, probablement rien de si important.
Personne (probablement pratiquement personne) ne stocke probablement la date dans un tel format (c'est-à-dire DCD ou chaîne) maintenant. Le temps est généralement géré par des objets ou des entiers (donc seul le code d'affichage devrait être mis à jour).
Maciej Piechotka
Oui, mon point exactement. Y2K a effectivement tué l'idée de représenter les dates sous forme de chaînes de longueur fixe.
Stephen Jazdzewski
@Stephen: Pas dans le monde COBOL, mais il y a heureusement peu d'implémentations COBOL sur Unix / Linux.
David Thornley
@David: Les programmes COBOL étaient le problème de l'an 2000 pour la plupart. Les systèmes Linux / Unix, du point de vue des utilisateurs, ont-ils déjà rencontré un problème Y2K? La réponse simple à la question d'origine est non.
Stephen Jazdzewski
4
L'affiche ne pose pas de question sur le problème de l'an 2000; ils posent des questions sur le problème y2k38, qui est une bête entièrement différente. Consultez en.wikipedia.org/wiki/Y2K38 pour une description.
Réponses:
J'ai rencontré ce problème dans un système Linux embarqué qui devait gérer les dates après 2038 dans certains certificats cryptographiques à long terme, donc je dirais que la similitude de cela dépend de votre domaine d'application.
Alors que la plupart des systèmes devraient être prêts bien avant 2038, si vous vous trouvez aujourd'hui à calculer des dates très loin dans le futur, vous pouvez avoir un problème.
la source
mktime
appel échouait silencieusement.Je pense que ce sera un problème important, beaucoup plus pernicieux que les problèmes de l'an 2000 de 1999/2000 car le code affecté est généralement de niveau inférieur (c'est CTIME) et il est donc plus difficile de repérer les endroits où le temps est stocké de cette façon.
Pour compliquer davantage les choses, le fait que Y2K ait été perçu comme un squib humide rendra plus difficile d'attirer l'attention sur le problème dans la perspective de l'événement.
Références culturelles:
Cory Doctorow essayait un nouveau modèle pour la mise en service / publication de nouvelles sous licences ouvertes, et j'ai suggéré un thème pour 2038, ce qu'il a brillamment fait dans Epoch: http://craphound.com/?p=2337
la source
Il y a quelques années, des problèmes ont déjà été signalés, dans des domaines tels que les programmes hypothécaires faisant des calculs sur les prêts à 30 ans: 2008 + 30 = 2038.
la source
Un système d'exploitation 64 bits n'est finalement pas pertinent pour le problème 2037. (CTIME s'épuise plus près de 2037 que 2038).
La question n'est pas la profondeur de bits de l'OS, mais plutôt comment l'OS stocke le temps. Ou comment la colonne de base de données choisit-elle de stocker l'heure. Ou comment cet annuaire fournit-il le temps de stockage de l’attribut de syntaxe de temps à l’arrière
C'est un problème beaucoup plus grave que les gens ne le pensent, car il est tellement endémique et courant d'avoir utilisé des compteurs de temps 32 bits.
Chaque instance qui stocke du temps doit être revisitée, et toutes les API mises à jour, et tous les outils qui l'utilisent également mis à jour.
Les couches d'abstraction qui vous permettent de régler l'heure via un format d'heure lisible par l'homme, au lieu des données brutes écrites, le facilitent, mais ce n'est qu'un cas.
Je soupçonne que cela va être beaucoup plus important que la plupart des gens ne le pensent.
la source
time_t
du tout. Il stocke l'année, le mois et le jour sous forme de champs dans une valeur 16 bits: 5 bits pour le jour, 4 pour le mois, laissant 7 pour l'année. 2107 est 1980 (année zéro dans les terres FAT) + 2 ^ 7-1. Pour plus de plaisir, FAT stocke l'heure de la même manière dans une autre valeur 16 bits, mais si vous faites le calcul, vous constatez que vous avez besoin de 17 bits pour stocker l'heure de la journée de cette façon. FAT contourne ce problème en supprimant un bit de résolution pendant quelques secondes; FAT ne peut pas distinguer les changements à moins de 2 secondes d'intervalle. Ah, Microsoft, quel monde ennuyeux ce serait sans vos incompatibilités inutiles!C'est mon avis, mais ce problème est dû à un problème de compteur 32 bits, aujourd'hui la plupart des systèmes d'exploitation sont mis à jour pour gérer le temps sur 64 bits (au moins sur les ordinateurs 64 bits), donc je suppose que tous les systèmes d'exploitation et logiciels seront prêts longtemps avant 2038, disons 2020. Il est donc possible que vous ne rencontriez des problèmes que si, en 2038, vous exécuterez toujours des logiciels à partir de 2020.
Ce ne sera probablement pas un problème dans presque tous les cas. J'espère.
la source
Pas si grave.
Lors du premier blitz Y2K, dans lequel les fournisseurs de logiciels et de matériel étaient tenus de certifier leurs produits comme "conformes Y2K" afin d'être vendus (je me souviens que les câbles réseau sur PC Connection étaient certifiés conformes Y2K), beaucoup d'entreprises ont fait des audits détaillés de tout , en réglant les horloges à l'avenir et en testant.
À l'époque, comme le coût des tests était si élevé, ils ont presque toujours testé avec plusieurs dates, comme 1/1/99 (certains développeurs peuvent avoir utilisé 99 comme sentinelle), 31/12/99, 1/1 / 00, le saut de 2000, 19/01/38, et bien d'autres. Voir ici pour une liste fastidieuse.
Ainsi, je crois que tout logiciel important qui existait en 1999 n'aura probablement pas 2038 bugs, mais de nouveaux logiciels écrits depuis par des programmeurs ignorants pourraient le faire. Après que l'ensemble des programmeurs de la débâcle de l'an 2000 aient généralement été beaucoup plus conscients des problèmes d'encodage de date, il est donc peu probable qu'il ait un impact aussi important que celui de l'an 2000 (qui, en soi, était quelque chose d'un anticlimax).
la source
Les systèmes 32 bits en cours d'exécution d'ici là seront un problème.
la source
il doit être de 1 au lieu de 9 mais ctime ne gère pas de date plus grande:
Le temps de mon système (64 bits bien sûr) peut fonctionner encore 1 million d'années de plus. La solution est de mettre à jour les systèmes en 64 bits.
Le hic, c'est que les programmes ne peuvent pas le gérer. Particulièrement vieux, propriété et non entretenu. Les développeurs sont habitués aux faits suivants:
int
sont 32 bits (en fait, ils sont conservés en 32 bits sur les systèmes 64 bits, entre autres, car on supposait qu'ils étaient toujours 32 bits)time_t
) peuvent être coulés en toute sécuritéint
Dans le logiciel FLOSS populaire, les deux choses ne passeront probablement pas à travers l'examen de «nombreux yeux». Sur les moins populaires et propriétaires, cela dépendra largement de l'auteur.
Je suppose que sur le monde libre * nix, le 2038 passera «inaperçu» alors que je m'attends à des problèmes sur les plates-formes «propriétaires» (c'est-à-dire celles avec un grand nombre de logiciels propriétaires) - surtout si une partie de la partie cruciale ne sera pas maintenue.
la source
time_t
(ou équivalent) sur un système d'exploitation 32 bits se trouve avoir 32 bits tandis quetime_t
(ou équivalent) sur un système d'exploitation 64 bits se trouve avoir 64 bits. J'ai pensé que c'était suffisamment clair même avec une certaine simplification.Si c'est quelque chose comme Y2K, certaines personnes ont déjà été touchées et changent de logiciel, mais la plupart des développeurs l'ignoreront jusqu'à un certain point dans les années 2030, probablement en 2035 environ, moment auquel il y aura beaucoup de travail à faire et toute personne assez âgée connaître K&R C et pas encore trop sénile pourra soudainement se sous-traiter pour beaucoup d'argent. La transition actuelle montrera beaucoup de choses qui n'ont pas encore été faites, probablement rien de si important.
la source
Le problème de l'an 2000 était de deux chartes représentant l'année au lieu de quatre.
De nombreux systèmes n'avaient aucun moyen de distinguer entre 2000 et 1900 car ils ne stockaient que le «00».
Presque tous les systèmes utilisent maintenant 4 caractères pour stocker l'année ou utilisent une bibliothèque quelconque.
Permet donc à tous de s'inquiéter de l'année 10000 (Y10K) à la place. Sauf pour les rédacteurs de système d'exploitation et de bibliothèque ...
la source