13 grudnia 1901 – Tak mogą wyglądać daty na ekranach komputerów i innych urządzeń elektronicznych 19 stycznia 2038 r. Wszystko przez problem, jaki pojawi się w urządzeniach opartych o system Unix za niespełna 24 lata i może spowodować znacznie większe komplikacje niż słynna „pluskwa milenijna”. Choć wydaje się, że to jeszcze odległa przyszłość, sytuacja jest niezwykle poważna i już teraz specjaliści powinni szukać rozwiązania.
Era Uniksa i koniec czasu
Unix jako system operacyjny narodził się w 1969 r., a jego założenia do dziś powielane są w wielu innych programach i systemach. Jednym z nich jest 32-bitowy sposób zapisu daty, który powoduje, że w 2038 r. wyczerpie się miejsce na mierzenie upływającego czasu. Twórcy tego systemu przyjęli, że czas będzie w nim zapisywany w postaci sekund, począwszy od rozpoczęcia tzw. „ery uniksa” czyli od 1 stycznia 1970 r. godz. 0:00:00 czasu uniwersalnego. Upływu czasu w Uniksie i jego pochodnych (np. Linuksie, ale też niezwykle popularnym języku programowania C++) ma postać 32-bitowej zmiennej, w której po upływie 2 147 483 647 sekund wyczerpie się miejsce na kolejną wartość. Ponieważ zmienna opisana jako „time_t” jest zmienną ze znakiem, po zapełnieniu pamięci (co nastąpi właśnie we wtorek 19 stycznia 2038 r. o godzinie 4:14:08 polskiego czasu), stan licznika wskaże wartość ujemną, a data jaką pokażą komputery i urządzenia elektroniczne oparte o to założenie to 13 grudnia 1901 r. godz. 21:45:52.
Niestety nie wiadomo jak systemy i urządzenia zareagują na ten problem. Jak mówi Linus Torvard, ojciec systemu Linux, kiedy pojawia się kwestia czasu w informatyce, jest duże prawdopodobieństwo, że coś pójdzie nie tak jak powinno.
„W 2038 r. nie chciałbym mieć rozrusznika serca działającego w oparciu o system Unix, a 19 stycznia nie zamierzam nawet wsiadać do samolotu” – obrazuje skalę zagrożenia Paweł Jakub Dawidek, dyrektor do spraw technicznych i oprogramowania w WHEEL Systems.
„Y38”, czyli problem poważniejszy od tzw. „pluskwy milenijnej”
Problem związany z zapisem czasu w systemie Unix jest znacznie poważniejszy, niż tzw. kwestia roku 2000, głównie z uwagi na jego zasięg i trudności, jakie sprawia jego rozwiązanie. System Unix i jego pochodne obecny jest w ogromnej liczbie komputerów i urządzeń elektronicznych. W pewnym sensie nie dotyczy on użytkowników indywidualnych, ponieważ mało prawdopodobne, aby w 2038 roku ktoś nadal używał 32-bitowego procesora w domowym komputerze. Sytuacja nabiera jednak powagi w kontekście systemów wbudowanych w przeróżne urządzenia, również te, które obsługują infrastrukturę krytyczną, oraz niektóre satelity.
„Proszę sobie wyobrazić, że elektrownie atomową w kanadyjskim Ontario do dziś obsługuje system, który uruchomiono w 1973 r. Samo rozwiązanie powstało w 1970 r. i choć było od tego czasu wielokrotnie modyfikowane, to nie na tak podstawowym poziomie, by rozwiązać problem roku 2038.” – powiedział Paweł Jakub Dawidek – „Wiele tego rodzaju systemów, zainstalowanych dziesiątki lat temu, nie było w tym czasie wymieniane, więc funkcjonują do dziś.”
Eksperci WHEEL Systems przewidują, że przez najbliższe lata m.in. producenci urządzeń z wbudowanymi systemami operacyjnymi nadal mogą używać 32-bitowych procesorów ze względu na niskie koszty oraz niewielki pobór energii w porównaniu do nowszych konstrukcji. Skalę zagrożenia obrazuje m.in. fakt, że wiele urządzeń medycznych opartych jest o system Linux, a wykorzystywane przez nie podzespoły trudno uznać za szczytowe osiągnięcia współczesnej techniki. Wyspecjalizowane urządzenia oparte o ten system to m.in. komputery pokładowe, sprzęt sterujący samolotami czy rakietami, a także bankomaty czy sterowniki PLC stosowane w przemyśle do sterowania i kontroli procesów oraz maszyn produkcyjnych. Co więcej, tego typu rozwiązania zwykle użytkowane są przez kilkanaście i więcej lat.
Proste rozwiązanie?
Problem 2038 r. daje się rozwiązać poprzez wykorzystywanie 64-bitowego zapisu zmiany czasu. Taka architektura procesorów pozwala na zapisanie maksymalnej wartości 292 277 026 596 co równa się 292 mld. lat. Trudno nawet domniemywać, czy po takim upływie czasu ludzkość będzie jeszcze istnieć, dlatego można uznać, że taka wartość rozwiązuje problem definitywnie. Niestety nie da się w prosty sposób zmienić sposobu zapisu w urządzeniach z wbudowanymi systemami, które nadal będą działać w 2038 r. i mogą obejmować infrastrukturę krytyczną.
„Problem jest niezwykle złożony nawet dla programistów. By poradzić sobie z nim w już pracujących urządzeniach trzeba by przeprowadzić pełny i skomplikowany audyt kodu, a specjalistów, którzy potrafią zrobić to skutecznie jest obecnie niewielu.” – podsumowuje Paweł Dawidek – „Co więcej, w przypadku działających od dawna rozwiązań trudno o dostęp do kodu źródłowego, a bez niego rozprawienie się ze zmienną „time_t” oznacza przepisanie całości od zera. By uporać się z tym problemem w najbliższych latach specjalistów czeka żmudna praca.”
Problemy z czasem
Poza powszechnie znanym problemem pluskwy milenijnej, który powodował dwucyfrowy system zapisu daty w wielu programach i komputerach, namiastką problemów, z jakimi możemy zetknąć się w 2038 r. jest m.in. problem z sekundą przestępną. Jest to dodatkowa sekunda w celu zsynchronizowania czasu uniwersalnego z czasem słonecznym na podstawie obserwacji astronomicznych. Konieczność jej dodawania wynika z niedostatecznej dokładności, z jaką wyznaczono długość doby w latach 50. XX w. oraz wynikających stąd długości sekundy i zmian okresu obrotu Ziemi. Jej dodawanie potrafi jednak zakłócić pracę komputerów, zwłaszcza platform opartych na systemach Linux i Java. W 2012 r. sekunda przestępna spowodowała zaburzenie działania serwerów należących do Mozilli, fundacji odpowiedzialnej m.in. za popularną przeglądarkę internetową Firefox i Reddit.