Nasza strona używa cookies. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Linux 5.10 pomoże uniknąć problemu roku 2038

Na liście dyskusyjnej pojawiła się propozycja kodu dotycząca Linuksa 5.10, który miałby uporać się z problemem roku 2038.
Linux 5.10 pomoże uniknąć problemu roku 2038

Wygląda na to, że Linux 5.10 będzie zawierał poprawkę niezbędną do uporania się z problemem roku 2038, czyli wadą oprogramowania, mogącą się ujawnić 19 stycznia 2038 roku, kiedy to skończy się zakres w Unix timestamp. Ogólnie mówi się, że problem ten ma potencjał na koniec świata, jednak wielu dementuje te plotki, twierdząc, że spowoduje to po prostu poważne problemy w 32-bitowych systemach operacyjnych. Strach jednak pozostał, zwłaszcza po pluskwie milenijnej, która na dobre wkradła się do świadomości ludzkiej, pomimo że nic się właściwie nie stało. 

Na szczęście, wraz z Linuksem 5.6 zaczęły się prace nad rozwiązaniem tego problemu. Co więcej, teraz na liście dyskusyjnej kernela mamy pewną ciekawą propozycję kodu, która może odsunąć od nas Y2K38 na długie, długie lata. Sprawdźmy szczegóły.


Wydłużenie znacznika czasu

Phoronix, portal poświęcony kernelowi, zauważył, że na liście dyskusyjnej dotyczącej kernela Linuksa pojawił się kod dla XFS, który pozwoli na reprezentację czasu aż do 2486 roku. Kod został dostarczony przez Darricka J. Wonga, developera z Oracle zajmującego się systemami plików. 

Jeżeli chodzi o konkrety tego wpisu, to proponowane zmiany mają rozszerzyć zakres ondisk inode timestamps oraz ondisk quota expiration timestamps, tak aby móc reprezentować daty dalsze niż 19 stycznia 2038 roku. 


Problem roku 2038

Jak wspomniano wcześniej, Y2K38 jest wadą oprogramowania, która może się ujawnić 19 stycznia 2038. Nawiązuje ona do reprezentacji czasu na wielu rodzajach urządzeń cyfrowych jako sekund przechowywanych w postaci 32-bitowych liczb całkowitych, które minęły od czasu 00:00:00 UTC 1 stycznia 1970 roku. Taki sposób implementacji uniemożliwia pokazywanie czasu po następującej dacie: 03:14:07 UTC 19 stycznia 2038.

Programy, które podejmą próbę pociągnięcia czasu dalej, spowodują, że sekundy zmienią się w ogromną liczbę ujemną, która zostanie zinterpretowana jako 20:45:52 w piątek 13 grudnia 1901 roku. Będzie to wynikiem tzw. integer overflow, gdzie licznikowi czasu skończą się bity, dlatego zmieni znak na ujemny, starając się jednocześnie doliczyć z powrotem do zera. 


Wczesne manifestacje

Y2K38 może spowodować poważne problemy w programach komputerowych. Co więcej, programy, które korzystają z dat wyprzedzających teraźniejszość np. o 10 lat, będą musiały zostać naprawione najpóźniej 19 stycznia 2028 roku. Pierwsza manifestacja problemu roku 2038 pojawiła się już jednak ponad dekadę temu.

W maju 2006 roku oprogramowanie AOLserver zaprojektowane do zapobiegania upłynięcia limitu czasu w bazach danych, miało pewien problem z datami wybiegającymi za 2038 rok. Domyślne ustawienie programu zakładało, że limit czasu żądania wynosi miliard sekund, co daje nam około 32 lat. A 32 lata od 2006 to data wybiegająca poza 2038 rok, a więc time-out wyrzucił datę, która była w przeszłości, co spowodowało crash oprogramowania. 


Podsumowanie

Jeżeli Linus Torvalds nie zmieni 8-miesięcznego cyklu wydań kernela, to być może jeszcze przed Świętami Bożego Narodzenia dostaniemy „rozwiązanie” problemu roku 2038. Bug ten wystąpi jednak znowu w 2486, ale to już nie nasze zmartwienie — mamy ich o wiele za dużo i bez tego.

Rozpocznij dyskusję

Lubisz dzielić się wiedzą i chcesz zostać autorem?

Podziel się wiedzą z 160 tysiącami naszych czytelników

Dowiedz się więcej