Den 03:14:08 Greenwich Mean Time (GMT, även kallad Coordinated Universal Time) den 19 januari 2038 (det är en tisdag) går världen under. Inte i den bibliska bemärkelsen i Uppenbarelseboken. Men vad som kommer att hända är att värdet för tid i 32-bitars Unix-baserade operativsystem, som Linux och äldre versioner av macOS, får slut på siffror och börjar räkna tid med negativa siffror. Det är inte bra. Vi kan förvänta oss att 32-bitars datorer som kör dessa operativsystem kommer att få anfall. Lyckligtvis hade Linuxutvecklarna redan en lösning klar.
Problemet börjar med hur Unix räknar tiden. Unix, och dess släktingar – Linux, macOS och andra POSIX-kompatibla operativsystem – daterar tidens början från epok: 00:00:00:00 GMT den 1 januari 1970. Unix-familjen mäter tiden med antalet sekunder sedan epoken.
Så långt, så bra. Men eftersom Unix och familjen började som 32-bitars operativsystem hålls tidens värde som ett enda signerat 32-bitars heltal. Det är många sekunder, men precis som förra seklets Y2K-bugg är det inte tillräckligt.
Linuxutvecklare har sett detta komma i årtionden. Så Linuxkärnans utvecklare Arnd Bergmann och andra har arbetat på en reparation. Dessa korrigeringar finns nu i den kommande Linux 5.6-kärnan. Bergmann förklarade: ”Linux-5.6, eller min backport av patcherna till 5.4, bör vara den första utgåvan som kan tjäna som bas för ett 32-bitarssystem som är utformat för att kunna köras bortom år 2038.”
Det finns några förbehåll:
- Alla användarutrymmen måste kompileras med en 64-bitar time_t, vilket kommer att stödjas i den kommande musl-1.2 och glibc-2.32, tillsammans med installerade kernel headers från Linux-5.6 eller senare.
- Applikationer som använder systemanropsgränssnitten direkt måste anpassas så att de använder time64-syscalls som lades till i Linux-5.1 i stället för de befintliga systemanropen.
- Användningar som använder en privat kopia av kärnans uapi headerfiler eller deras innehåll kan behöva uppdateras till Linux-5.6-versionen.
- Ett fåtal återstående gränssnitt kan inte ändras för att överföra en 64-bitars time_t på ett kompatibelt sätt, så de måste konfigureras så att de använder CLOCK_MONOTONIC-tider.
- Alla Epoch-problem som finns på 64-bitarsmaskiner gäller även för 32-bitarsmaskiner. Detta påverkar särskilt filsystem med tidsstämplar på disken som använder signerade 32-bitars sekunder: ext4 med små inoder i ext3-stil, ext2, xfs (kommer snart att rättas) och ufs.
Kort sagt, det finns en hel del upprensningsarbete att göra även efter att kärnproblemet har rättats.
MacOS har gått bort från 32-bitars programvara i över ett decennium. Men det var först i slutet av 2019 års version av macOS Catalina som Apple gav 32-bitarsprogrammen sparken.
Nu kanske du undrar – eftersom vi alla kör 64-bitarsdatorer nuförtiden – varför är detta ens ett problem. Det är så här. För det första kör många inbyggda system och IoT-enheter (Internet of Things) fortfarande 32-bitars operativsystem. År 2038 kommer det förmodligen fortfarande att finnas nya 32-bitarsenheter på marknaden.
Vi vet också, tack vare Y2K-buggen som dyker upp igen 2020, att system som man kan anta att de kommer att dumpas på soptippen om 18 år fortfarande kommer att vara levande och välmående – och missköta sig illa när epoken kommer.
Men se på det här sättet: När vi har åtgärdat detta behöver vi inte oroa oss för att 64-bitars Linux ska få slut på sekunder förrän 15:30:08 GMT söndagen den 4 december 29 227 702 659. Personligen tänker jag inte oroa mig för det.
Relaterade berättelser:
- Y2K-buggen är tillbaka och orsakar huvudvärk för utvecklare igen
- Sydkoreas regering utforskar övergång från Windows till Linux-dator
- Stuffig Linux- och macOS-sudo-bugg hittad och åtgärdad