Y2K és Y2K38, avagy a programozók és a világvége

A kívülállók azt gondolják, hogy a programozók, és úgy általában az informatikával foglalkozó emberek két lábbal a földön állnak. Nagyon úgy tűnik, hogy ez óriási tévedés. A legtöbb programozó valószínűleg szentül hisz a világvége-jövendölésekben! A bejegyzés címében a két ékes bizonyítékom.

A 90-es években is képesek voltak számos olyan rendszert kiadni, amely nem volt felkészítve 2000. év kezelésére, mert az évszámok tárolására csupán 2 számjegyet használt. Ekkora mellényúlás még az informatika sötét középkorában is viccnek tűnik. A problémás rendszereket azonban nem egyetlen programozó írta és ellenőrizte, nem egyetlen ember tévedésén nevetett/sírt akkor világ.

Létezhet az esetre más értelmes magyarázat, minthogy a programozók rendje szentül hitt abban, hogy az emberiség történelme 2000. év előtt ér véget? Nos?

Az első jövendölésük nem jött be, 2000. után is minden ment tovább. Valaki azt gondolja, hogy a programozók újabb jóslat nélkül hagytak minket a túlélt 2000. után? Naná, hogy nem.

Y2K38Szerintük a következő világvége a 2038. évben várható. Unix rendszereken elterjedt beállítás szerint a timestamp-et (az 1970. január 1. óta eltelt másodpercek számát) ugyanis 32 bites, előjeles egészként (int32) tárolják. Az előjelesség magyarázata gondolom az, hogy a programozók világvége eljövetele mellett a korlátozott mértékű időutazásban is hisznek.

Az int32 típusban a legnagyobb tárolható szám a 0x7fffffff, ami 2147483647 másodpercnek felel meg. Szép nagy szám, de 2038. január 19-én hajnalban óhatatlanul elérjük. Nem tudom mi lesz addigra a mai rendszerekkel, de megnéznék akkor egy olyan rendszert, ami mai, 2014. 09. 20-i állapotában képes az alábbi eredményt adni.

mysql> select unix_timestamp('2038-01-19 04:15');
+------------------------------------+
| unix_timestamp('2038-01-19 04:15') |
+------------------------------------+
|                                  0 |
+------------------------------------+
1 row in set (0.00 sec)
mysql> select from_unixtime(2147483648);
+---------------------------+
| from_unixtime(2147483648) |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)

Azt hiszem, hogy egy korszerűnek (mondott) rendszeren ennek nem így kellene kinéznie.

A problémáról a fejlesztők mindig is tudtak, néhány helyen orvosolták is. Sajnos, úgy tűnik a programozók rendje még 2038. előtt várja az óriásmeteor becsapódását, a zombi-apokalipszist, a szuper-vírust, a nukleáris háborút vagy az idegen-inváziót. Bízom benne, hogy nem lesz igazuk! Ha mégis, akkor elsőként mindenképpen a hasztalanná váló programozókat együk meg!