Czym jest problem roku 2038 i dlaczego może mieć fatalne skutki?

Adrian Celej Artykuły 2019-01-13

Czy czas może się skończyć? Pytanie może wydawać się abstrakcyjne, jednak przez pewien błąd w systemie UNIX pewnego dnia czasu zabraknie. Jak zachowają się wtedy komputery?

Czym jest problem roku 2038?

System operacyjny UNIX został wydany po raz pierwszy w 1969 roku. Projektując go programiści chyba nie przewidzieli jak długo przetrwa ten twór i nałożyli poważne ograniczenie na sposób zliczania czasu. System ten zapisuje czas w specyficzny sposób. Na początku trzeba przyjąć datę taką jak początek ery UNIX-a, tj 1 stycznia 1970 roku, godzina 00:00:00 UTC. Od tej daty czas zliczany jest za pomocą upłyniętych sekund. Dane są zapisywane za pomocą 32-bitowej wartości, a więc maksymalna możliwa do przyjęcia wartość wynosi 2147483647. Tak się składa, że UNIX-owy czas osiągnie tę wartość 19 stycznia 2038 roku o godzinie 3:14:07 UTC. Czas ten może różnić się w poszczególnych systemach bazujących na UNIX-ie np. o kilka godzin.

Co potem?

W zasadzie do dziś nie wiadomo co się stanie gdy skończy się czas UNIX-owy. Zapisanie większej wartości nie jest możliwe, także na pewno czas nie będzie płynął dalej. Jeżeli licznik się wyzeruje, to zobaczymy czas z początku ery UNIX-a. Istnieje jednak taka możliwość, że czas przeskoczy to maksymalnej ujemnej wartości, tj. -2147483647. W takim wypadku na ekranach smartfonów (lub dowolnej elektroniki która je zastąpi) wyświetli się godzina 20:45:52 13 grudnia 1901 roku. Oczywiście problemy pojawią się wcześniej, niemożliwe może być zaplanowanie zadań na przyszłość, np. operacji w banku. Jako ciekawostkę dodam, że w przeszłości podobna awaria dotknęła serwis YouTube. Klip Gangnam Style osiągnął ponad 2 miliardy wyświetleń, co doprowadziło do przekroczenia maksymalnej wartości 32-bitowej i licznik zepsuł się.

Czy problem roku 2038 da się naprawić?

Teoretycznie tak, choć sprawa jest nieco skomplikowana. Naprawa problemu roku 2038 polega na przejście do zapisywania czasu za pomocą wartości 64-bitowej. W ten sposób problem powróci dopiero za 292 miliardy lat, prawdopodobnie wtedy nie będzie już istniał nasz wszechświat. Na drodze stoi jednak jeden problem – czas zapisany w ten sposób musi rozumieć cały system, razem z całym dodatkowym oprogramowaniem. Jest to może wykonalne w przypadku zamkniętych systemów Apple, może nawet uda się bezboleśnie zrobić to w przypadku Androida. Tak, wszystkie te systemy bazują na UNIX-ie, sami sprawdźcie jaką najdalszą datę możecie ustawić na swoim smartfonie. Poważniejszy problem dotyczy dystrybucji Linuksa. Dystrybucje mają to do siebie, że ich składniki są dostarczane oddzielnie. Takie Ubuntu to jedynie zbiór pakietów, każdy składnik jest tworzony przez kogoś innego. W celu wprowadzenia 64-bitowej reprezentacji czasu trzeba zgrać moment wprowadzenia zmian z innymi składnikami systemu – zmiana musi zostać wprowadzona jednocześnie w Linuksie i dystrybucji. Jest to prawie nierealne, dystrybucji są setki (jeśli nie tysiące), zgranie wszystkiego będzie bardzo trudne. Mimo wszystko już teraz w kernelu są wprowadzane poprawki z myślą o rozwiązaniu problemu roku 2038.

Zobacz też: Bomba milenijna – historia o tym, jak to 2000 rok miał zacząć się apokalipsą

To gorsze od bomby milenijnej

Rozwiązanie problemu bomby milenijnej nie było takie trudne – wystarczyło jedynie zmienić format zapisu dat. W przypadku problemu roku 2038 błąd siedzi tak głęboko i w tak wielu miejscach, że rozwiązanie będzie niezwykle trudnym zadaniem dla twórców systemów. Problem roku 2038 musi zostać naprawiony, w przeciwnym wypadku skończy się to prawdziwą apokalipsą. Jako ciekawostkę mogę powiedzieć, że na potrzeby tego tekstu próbowałem ustawić datę przekraczającą 32-bitową wartość w laptopie z Debianem. System tego nie umożliwił, ale moje uparcie skończyło się problemami z działaniem systemu operacyjnego. Ostatecznie czas cofnął się do godziny 22:10 13 grudnia 1901 roku.



x