Het Britse National Museum of Computing ontdekte tijdens restauratiewerkzaamheden aan oude systemen een onverwacht probleem dat de Year 2038-bug mogelijk nog eerder laat optreden.
Het jaar 2038-probleem, ook Epochalypse genoemd, doet zich voor in systemen die Unix-tijd opslaan in een gesigneerd 32-bit geheel getal. Unix-tijd telt seconden vanaf de epoch. Dat is 1 januari 1970 om 00:00:00 UTC. Op 19 januari 2038 om 03:14:07 UTC raakt die teller vol en loopt hij over. In theorie zou dat resulteren in een datum uit 1901, waardoor software en besturingssystemen die nog afhankelijk zijn van 32-bit tijdstructuren onjuist gaan functioneren. Moderne systemen gebruiken inmiddels 64-bit. Oude infrastructuur blijft echter vaak langer in gebruik dan gepland.
Vrijwilliger Robin Downs demonstreerde het probleem aan The Register in de Large Systems Gallery van het museum. Daar staat een werkende PDP-11/73. Hij wees erop dat de software van deze machine in de jaren negentig al was aangepast om het millenniumprobleem (Y2K) te verhelpen. Dat probleem draaide volgens hem vooral om programmeurs die slechts twee cijfers gebruikten voor het jaartal.
De situatie rond 2038 is volgens Downs van een andere orde. Hoewel de PDP-11/73 geen Unix draait, beschikt het systeem wel over een C-compiler uit 1982. Die blijkt diverse beperkingen te hebben. Downs merkte op dat de compiler nu al een verkeerde datum teruggeeft wanneer men om de actuele datum en tijd vraagt. De tijd klopt, maar de datum niet.
Dat leek aanvankelijk vervelend maar oplosbaar, tot hij de systeemklok vooruit zette. Bij een simulatie in 2036 ging alles goed, maar in 2037 liep het mis: programma’s die de tijdsfunctie aanriepen, crashten direct. Downs concludeerde dat er een onbekende fout in de compiler zit die al een jaar voor de verwachte Epochalypse voor problemen zorgt.
Fout in lokale tijdfunctie
Bij zijn test sprong het systeem niet naar 1901, zoals verwacht, maar terug naar 1970. Downs legt uit dat de lokale tijdfunctie zelf een fout bevat, waarbij er 68 jaar wordt teruggesprongen in plaats van een negatieve waarde. Dit kan volgens hem betekenen dat er niet alleen problemen in de compiler zitten, maar ook in de manier waarop software de datum verwerkt en hoe machines zich in de praktijk gedragen.
Voormalig Microsoft-ingenieur Dave Plummer verwacht dat de meeste kwesties tijdig opgelost worden. Hij wijst erop dat processen die rond 2038 draaien het meest kwetsbaar zijn, maar dat de komende jaren waarschijnlijk voldoende gelegenheid bieden om resterende afhankelijkheden op te sporen.
Downs blijft echter bezorgd. Hij wijst erop dat kinderen die nu het museum bezoeken over twaalf of dertien jaar als ingenieurs kunnen starten en dan geconfronteerd kunnen worden met oude code vol valkuilen. Tijdens zijn werk sprak hij al ervaren C-programmeurs die zich niet bewust waren van de omvang van de mogelijke problemen. Bovendien bouwen we volgens hem vandaag de dag systemen die ontworpen zijn om langer dan tien jaar mee te gaan, waardoor de risico’s reëel blijven.