Linux odpravlja težavo zaradi leta 2038
Matej Huš
16. feb 2020 ob 19:31:11
Naslednji računalniški konec sveta bo leta 2038, ko se bo 19. januarja iztekel Unixov čas. Vse od začetka Linux čas shranjujejo kot predznačeno 32-bitno število, ki je 1. januarja 1970 ob polnoči znašalo natanko 0. Natanko 231 sekund pozneje bo spremenljivka time_t dosegla najvišjo možno vrednost, nato pa bo skočila nazaj na začetek. To predstavlja težavo, ki se je razvijalci dobro zavedajo in jo bodo v novi verziji Linuxovega jedra rešili.
V Linuxu 5.6 bo spremenljivka time_t 64-bitna tudi v 32-bitni inačici jedra, torej tudi v musl-1.2 in glibc-2.32. To pomeni, da bodo aplikacije, ki bodo to razumele, pravilno delovale tudi po letu 2038. Programi, ki neposredno kličejo sistemske funkcije, bodo morali uporabljati sistemske klice time64, ki so bili dodani v jedru 5.1. Kjer 64-bitne spremenljivke time_t ne bo možno uporabiti, bodo programi morali uporabiti CLOCK_MONOTONIC.
Večina že dandanes uporablja 64-bitne sisteme, kjer je time_t 64-biten in težave ne bo (oziroma bo v letu 29.227.702.659). A od leta 2000 smo se naučili, da sistemi, za katere smo prepričani o zamenjavi v doglednem času, pogosto trmasto ostanejo desetletja. Zlasti pri vgradnih (embedded) sistemih je 32-bitnih verzij Linuxa še res veliko in ti še danes čas zapisujejo v 32-bitni predznačeni celoštevilski spremenljivki. Od jedra 5.6 ga bodo v 64-bitni.