On 03:14:08 Greenwich Mean Time (GMT, aka Coordinated Universal Time) 19 stycznia 2038 roku (to jest wtorek), świat się kończy. Cóż, nie w sensie biblijnej Księgi Objawień. Ale to, co się stanie, to wartość czasu w 32-bitowych systemach operacyjnych opartych na Uniksie, takich jak Linux i starsze wersje macOS, zabraknie liczb i zacznie liczyć czas za pomocą liczb ujemnych. To nie jest dobre. Możemy się spodziewać, że 32-bitowe komputery z tymi systemami operacyjnymi będą miały problemy. Na szczęście twórcy Linuksa mieli już gotową poprawkę.
Problem zaczyna się od tego, jak Unix liczy czas. Unix, i jego odpowiedniki — Linux, macOS i inne systemy operacyjne zgodne z POSIX — datują początek czasu od epoki: 00:00:00 GMT 1 stycznia 1970 roku. Rodzina Uniksów mierzy czas liczbą sekund od Epoki.
Tak daleko, tak dobrze. Ale, ponieważ Unix i rodzina zaczęły się jako 32-bitowe systemy operacyjne, wartość czasu jest przechowywana jako pojedyncza podpisana 32-bitowa liczba całkowita. To dużo sekund, ale tak jak w przypadku błędu Y2K z ubiegłego wieku, to nie wystarczy.
Deweloperzy Linuksa widzieli, że to nadchodzi od dziesięcioleci. Tak więc, twórca jądra Linuksa Arnd Bergmann i inni pracowali nad naprawą. Te poprawki są teraz w nadchodzącym jądrze Linux 5.6. Bergmann wyjaśnił, „Linux-5.6, lub mój backport poprawek do 5.4, powinien być pierwszym wydaniem, które może służyć jako podstawa dla 32-bitowego systemu zaprojektowanego do działania po roku 2038.”
Jest kilka zastrzeżeń:
- Wszystkie przestrzenie użytkownika muszą być skompilowane z 64-bitowym time_t, który będzie obsługiwany w nadchodzącym musl-1.2 i glibc-2.32, wraz z zainstalowanymi nagłówkami jądra z wersji Linux-5.6 lub wyższej.
- Aplikacje, które bezpośrednio korzystają z interfejsów wywołań systemowych, muszą zostać przeportowane, aby używać syscalls time64 dodanych w Linux-5.1 w miejsce istniejących wywołań systemowych.
- Aplikacje, które używają prywatnej kopii plików nagłówkowych jądra uapi lub ich zawartości mogą wymagać aktualizacji do wersji Linux-5.6.
- Kilka pozostałych interfejsów nie może być zmienionych tak, aby przekazywały 64-bitowe time_t w kompatybilny sposób, więc muszą być skonfigurowane do używania czasów CLOCK_MONOTONIC.
- Wszystkie problemy z Epoch występujące na maszynach 64-bitowych dotyczą również maszyn 32-bitowych. W szczególności dotyczy to systemów plików z timestampami na dysku używającymi podpisanych 32-bitowych sekund: ext4 z małymi inodami w stylu ext3, ext2, xfs (zostanie wkrótce naprawiony) i ufs.
W skrócie, jest wiele do zrobienia nawet po naprawieniu głównego problemu.
MacOS odchodzi od 32-bitowego oprogramowania od ponad dekady. Ale dopiero w wydaniu macOS Catalina pod koniec 2019 r., Apple dał 32-bitowym aplikacjom buta.
Teraz możesz się zastanawiać — skoro wszyscy korzystamy z 64-bitowych komputerów w tych dniach — dlaczego to w ogóle jest problem. Cóż, wygląda to następująco. Po pierwsze, wiele systemów wbudowanych i urządzeń Internetu rzeczy (IoT) nadal korzysta z 32-bitowych systemów operacyjnych. W rzeczy samej, do 2038 roku na rynek prawdopodobnie wciąż będą trafiać nowe urządzenia 32-bitowe.
Wiemy również, dzięki błędowi Y2K wyskakującemu ponownie w 2020 roku, że systemy, które można założyć, że zostaną wyrzucone na wysypiska śmieci za 18 lat, nadal będą żywe i dobrze — i źle działające przyjdą Epoch.
Ale spójrz na to w ten sposób: Gdy to naprawimy, nie będziemy musieli się martwić, że 64-bitowemu Linuksowi zabraknie sekund do 15:30:08 GMT w niedzielę, 4 grudnia, 29 227 702 659 roku. Osobiście nie mam zamiaru się tym przejmować.
Powiązane historie:
- Błąd Y2K powraca, ponownie powodując ból głowy u deweloperów
- Rząd Korei Południowej bada przejście z systemu Windows na pulpit Linuksa
- Nastraszny błąd sudo w Linuksie i macOS znaleziony i naprawiony
.