Problem roku 2038

Krótka animacja ułatwiająca wyjaśnienie problemu.

Problem roku 2038 (Y2K38, analogicznie do Y2K) – wada oprogramowania, która może ujawnić się 19 stycznia 2038 po godzinie 03:14:07 UTC.

Źródło problemu leży w sposobie zliczania czasu przez niektóre wersje systemu operacyjnego Unix oraz przez oprogramowanie korzystające z tzw. uniksowego timestampu (który bywa także wykorzystywany w systemach operacyjnych i oprogramowaniu niemającym korzeni w systemie Unix). W podatnym na problem oprogramowaniu do przechowywania informacji o punktach w czasie służy 32-bitowa zmienna typu całkowitego ze znakiem (ang. signed integer) zawierająca liczbę sekund, które upłynęły od rozpoczęcia tzw. ery Uniksa, czyli od 1 stycznia 1970, godz. 0:00 UTC. Maksymalna wartość wspomnianej zmiennej wynosi 2 147 483 647 sekund, co odpowiada godzinie 03:14:07 UTC, 19 stycznia 2038. W następnej sekundzie stan licznika stanie się ujemny – nastąpi przeskok do najmniejszej wartości ujemnej (-2 147 483 648) lub licznik zostanie wyzerowany. Wyświetli się wtedy data 13 grudnia 1901 godz. 20:45:52 (przeskok do najmniejszej wartości ujemnej) lub 1 stycznia 1970 godz. 00:00:00 (wyzerowanie licznika Timestamp). Może to spowodować poważne błędy w obliczaniu upływu czasu.

Zagrożenia

Problem 2038 wydaje się o wiele groźniejszy od pluskwy milenijnej z 2000, a także trudniejszy do uniknięcia. Zapobiec mu może przejście na 64-bitową reprezentację czasu (typ time_t), dla której analogiczny problem pojawi się dopiero w roku 292 277 026 596, czyli za około 292 miliardy lat – dla porównania wiek Ziemi szacuje się na 4,5 miliarda lat. Zmiana taka jest już powoli dokonywana[1] i należy się spodziewać, że zostanie zakończona przed rokiem 2038. 64-bitowa reprezentacja czasu zakończy się po upłynięciu (263-1) sekund (9223372036854775807) od rozpoczęcia ery Uniksa.

Problem roku 2038 nie dotyczy systemów z rodziny Microsoft Windows (z wyjątkiem Windows XP i starszych – pomijając Windows XP 64-bit Edition, w którym problem nie występuje).

Największym problemem wydaje się nie tyle zmiana samych systemów uniksowych, ile zmiany potrzebne w oprogramowaniu, które z różnych względów polegało na 32-bitowym rozmiarze zmiennej zawierającej czas. W systemach operacyjnych, w których komponent użytkownika (ang. userland) jest dostarczany wspólnie z jądrem systemu (np. w systemach operacyjnych z rodziny BSD), problem ten może być wyeliminowany poprzez dostosowanie bibliotek systemowych i ponowną kompilację oprogramowania użytkowego. Natomiast w systemie operacyjnym Linux działającym na 32-bitowych architekturach mikroprocesorów, zarówno część użytkownika systemu operacyjnego (np. biblioteka libc), jak i oprogramowanie użytkowe jest dystrybuowane oddzielnie od jądra, częstokroć w postaci binarnej, co utrudnia proces przystosowania zmiennych typu time_t do rozmiaru 64-bitowego.

Zobacz też

Przypisy

  1. Google Code Archive – Long-term storage for Google Code Project Hosting [online], code.google.com [dostęp 2017-11-26] (ang.).

Linki zewnętrzne

  • [1] – „poprawiona” biblioteka time.h, dla systemów POSIX, gdzie time_t jest 32-bitowe.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Kembali kehalaman sebelumnya