Bezpieczeństwo  / Artykuł

Pamiętacie komputerowy problem 2000 roku? Czas przygotować się na problem 2038 r.

Większość z nas pamięta tzw. problem roku 2000 i związane z nim obawy. Przypomnę, że chodziło o to, że niektóre systemy komputerowe zapisywały rok w dacie jako dwie cyfry i zachodziła obawa, że zinterpretują rok 2000 jako powtórkę roku 1900.

Problem roku 2000 to nie był jedyny słaby punkt komputerowego zapisu daty. Na przykład podobnego problemu spodziewano się również dziewiątego września 1999 roku, ponieważ wielu użytkowników wpisywało same dziewiątki jako oznaczenie nieznanej daty tam, gdzie była ona wymagana.

Na szczęście znakomitą większość aplikacji i systemów operacyjnych udało się poprawić do Sylwestra w 1999 roku. Żadna z zapowiadanych katastrof się nie wydarzyła. Owszem, było trochę udokumentowanych kłopotów, ale obyło się bez ofiar w ludziach - wbrew temu co zapowiadano w prasie i w telewizji. Z nieba nie spadały samoloty, reaktory jądrowe nie wybuchały, a z kont bankowych nie zniknęły nagle wszystkie pieniądze.

Pierwsze wzmianki o problemach roku 2000 pojawiły się w latach 1980. Być może nawet wcześniej. Ja na przykład znalazłem wzmiankę o tym, że „komputery z niezmienionym oprogramowaniem zatrzymają się z całą pewnością pierwszego stycznia 2000 roku” w książce z 1984 roku Computers in Crisis. Było to więc 16 lat przed spodziewanymi kłopotami. Było dużo czasu, aby pozbyć się błędnych zapisów daty.

Czy podobne kłopoty są jeszcze przed nami? Okazuje się że tak. Na przykład jest problem roku 2038. Skąd ta data? Aby odpowiedzieć na to pytanie, musimy poznać ciekawą formę zapisu daty, jaką stosują niektóre systemy komputerowe.

Komputery potrafią zapisywać i rozpoznawać jedynie liczby. Wszystko inne - obrazy, filmy, teksty - to interpretacja ciągów liczb. Dlatego wymyślono również co najmniej kilka różnych sposobów zapisu daty jako liczby całkowitej.

Jedną z takich metod jest zapis liczby sekund liczonych od określonej, arbitralnie ustalonej daty. W przypadku tzw. zapisu daty uniksowej jest to 1. stycznia 1970 roku. Sęk w tym, iż tę liczbę zapisujemy w formacie 32-bitowym. W 32 bitach możemy przechować informację do 232 czyli od 0 do 4294967295 lub od -2147483647  do 2147483647 . Przy założeniu, że używamy liczby całkowitej ze znakiem, oznacza to, że możemy oznaczyć 2147483647 sekund po (i przed) tą datą. „Sekundy” w 32 bitowym zapisie daty skończą się właśnie w styczniu 2038 roku. Jest to wcale nie odległa data.

Należy pamiętać, ze ta data nie musi nadejść. Wystarczy, że system zapisujący datę 32-bitowo spróbuje jej użyć. Wbrew pozorom nie jest to nierealne. Proponuję spojrzeć na harmonogramy spłaty rat i umowy hipoteczne. Często występują na nich daty kilkadziesiąt lat w przyszłości.

Format zapisu daty nie ma wiele wspólnego z tym, jakie procesory są w naszych komputerach

Mimo, że większość desktopowych systemów używa 64-bitowych procesorów, to dane wciąż mogą być zapisywane jako pola 32-bitowe. Dla przykładu, w ten sposób zapisuje daty popularna baza danych MySQL oraz NTP (Network Time Protocol), czyli protokół używany do synchronizacji godziny w komputerach.

Problem 2038 nie ma niestety uniwersalnego rozwiązania. Wiele aplikacji zostało napisanych z założeniem 32-bitowości pola daty i na tej podstawie wykonuje obliczenia. Na szczęście większość systemów używa już daty 64-bitowej, wciąż jednak pozostaje sporo urządzeń wbudowanych. Takie urządzenia jak GPS-y, komputery pokładowe samochodów, czy obsługa starszych systemów plików w systemach operacyjnych wciąż mogą posiadać fragmenty kodu używające 32-bitowego zapisu daty.

przeczytaj następny tekst


przeczytaj następny tekst


przeczytaj następny tekst


przeczytaj następny tekst


przeczytaj następny tekst