Den 03:14:08 Greenwich Mean Time (GMT, også kaldet Coordinated Universal Time) den 19. januar 2038 (det er en tirsdag), går verden under. Altså, ikke i den bibelske betydning af Johannes’ Åbenbaring. Men det, der vil ske, er, at værdien for tid i 32-bit baserede Unix-baserede styresystemer, som Linux og ældre versioner af macOS, løber tør for tal og begynder at tælle tid med negative tal. Det er ikke godt. Vi kan forvente, at 32-bit computere, der kører disse styresystemer, vil få anfald. Heldigvis havde Linux’ udviklere allerede et fix klar til at gå i gang.
Problemet starter med den måde, hvorpå Unix fortæller tiden. Unix og dets slægtninge – Linux, macOS og andre POSIX-kompatible styresystemer – daterer begyndelsen af tiden fra epok: 00:00:00:00 GMT den 1. januar 1970. Unix-familien måler tiden med antallet af sekunder siden epoken.
Så langt, så godt. Men da Unix og familien startede som 32-bit operativsystemer, holdes tidens værdi som et enkelt signeret 32-bit heltal. Det er mange sekunder, men ligesom sidste århundredes Y2K-fejl er det ikke nok.
Linux-udviklere har set dette komme i årtier. Så Linux-kerneludvikler Arnd Bergmann og andre har arbejdet på en reparation. Disse rettelser findes nu i den kommende Linux 5.6-kernel. Bergmann forklarede: “Linux-5.6, eller min backport af patches til 5.4, skulle være den første udgivelse, der kan tjene som basis for et 32-bit-system, der er designet til at køre efter år 2038.”
Der er nogle forbehold:
- Alt brugerrum skal kompileres med en 64-bit time_t, hvilket vil blive understøttet i den kommende musl-1.2 og glibc-2.32-udgivelser, sammen med installerede kernel headers fra Linux-5.6 eller højere.
- Applikationer, der bruger systemopkaldsgrænsefladerne direkte, skal porteres til at bruge time64-syscalls, der blev tilføjet i Linux-5.1 i stedet for de eksisterende systemopkald.
- Anvendelser, der bruger en privat kopi af kernel uapi headerfiler eller deres indhold, skal muligvis opdateres til Linux-5.6-versionen.
- Et par resterende grænseflader kan ikke ændres til at videregive en 64-bit time_t på en kompatibel måde, så de skal konfigureres til at bruge CLOCK_MONOTONIC-tider.
- Alle Epoch-problemer, der findes på 64-bit-maskiner, gælder også for 32-bit-maskiner. Dette påvirker især filsystemer med tidsstempler på disken, der bruger signerede 32-bit sekunder: ext4 med små inodes i ext3-stil, ext2, xfs (rettes snart) og ufs.
Kort sagt, der er en masse oprydningsarbejde, der skal gøres, selv efter at kerneproblemet er blevet rettet.
MacOS har været på vej væk fra 32-bit software i over et årti. Men, tt var først i slutningen af 2019-udgivelsen af macOS Catalina, at Apple gav 32-bit apps sparket ud.
Nu undrer du dig måske – eftersom vi alle kører 64-bit computere i disse dage – hvorfor er dette overhovedet et problem. Tja, det er sådan her. For det første kører mange indlejrede systemer og IoT-enheder (Internet of Things) stadig 32-bit operativsystemer. Faktisk vil der i 2038 sandsynligvis stadig komme nye 32-bit enheder på markedet.
Vi ved også, takket være Y2K-fejlen, der dukker op igen i 2020, at systemer, som du måske antager, vil blive smidt på lossepladsen om 18 år, stadig vil være i live og have det godt – og vil opføre sig dårligt, når epoken kommer.
Men se på det på denne måde: Når vi har rettet dette, behøver vi ikke at bekymre os om, at 64-bit Linux løber tør for sekunder før 15:30:08 GMT søndag den 4. december 29.227.702.659. Personligt vil jeg ikke bekymre mig om det.
Relaterede historier:
- Y2K-fejlen er tilbage og giver igen hovedpine for udviklere
- Sydkoreas regering udforsker flytning fra Windows til Linux-skrivebord
- Værstelig Linux, macOS sudo fejl fundet og rettet