Leto 2020 je pomembno za Unix: na začetku leta je izvirni operacijski sistem praznoval 50 let. Čas Unix, znan tudi kot 'epohalni datum', je število sekund, ki so pretekle od 1. januarja 1970. Kaj pa muči razvijalce jedra ob polstoletni obletnici Unixa?

Čeprav nekatere zgodnje različice Unixa predhajajo uradnemu začetku njegove 'epohalnosti', ostaja 1. januar 1970 ničelna točka v času POSIX. Zato je 1. januar 2020 uradno, da je platforma dosegla 50 let.
Čas Unix proti človeškemu času
Iz človeškega vidika je 50 let dolga doba. Z vidika časa Unixa pa 50 let ne pomeni nič posebnega, 43 let bi bilo prav tako pomembnih. Unix sistemi (vključno z Linuxom) shranjujejo vrednosti datumov in časov kot število sekund, ki so minile od 1970-01-01 00:00:00 UTC, z zapisom v 32 bitih. Da bi ugotovili, koliko sekund je minilo od takrat in torej trenutno vrednost časa Unixa, lahko izvedemo ukaz:
$ date +%s
1576883876
Argument %s po ukazu date določa prikaz trenutnega datuma in časa kot število sekund od začetka 1970-01-01.

Kako dolgo lahko sistemi Unix shranjujejo datum? Unix?
Da bi razumeli, koliko časa lahko shrani Unix sistem, moramo oceniti kapacitet 32-bitnega polja. To lahko izračunamo tako:
$ echo '2^32' | bc
4294967296
Vendar pa omdat Unix omogoča shranjevanje negativnih števil, je en bit rezerviran za znak, kar zmanjša vrednost časa na:
$ echo '2^31' | bc
2147483648
In ker se številčenje Unixa začne z 0, to pomeni, da imamo 2.147.483.648 vrednosti, a največja znaša 2.147.483.647 — vrednost datuma in časa Unixa ne more presegati tega števila. Tako kot odometer v avtomobilu ne more prikazati več kot 999.999 kilometrov — dodajte 1 in vrednost se ponastavi.
Koliko traja leto v sekundah?
Število sekund v letu se lahko izračuna tako:
$ expr 24 * 60 * 60 * 365
31536000
V prestopnem letu se doda še en dan:
$ expr 24 * 60 * 60 * 366
31622400

Kako Unix obeležuje svoj 50. rojstni dan?
1. januar 2020 ob 12:00 zjutraj bo čas 1577836800. Izračun se nekoliko zaplete, ker je treba upoštevati prestopna leta. Od začetka epoch Unixa je bilo 12 takih let, od leta 1972 do leta 2016. To pomeni, da je minilo 38 običajnih let.
Tako izgleda ukaz expr za izračun sekundi proteklih 50 godina:
$ expr 24 * 60 * 60 * 365 * 38 + 24 * 60 * 60 * 366 * 12
1577836800
Ili ovako, uzimajući u obzir prethodna izračunavanja:
$ expr 31536000 * 38 + 31622400 * 12
1577836800
Ovaj način zapisivanja vremena učinio je Unix sisteme imunima na problem Y2K, zbog kojeg su ljudi krajem 1999. godine strahovali da bi prelazak na 2000. godinu mogao naštetiti računarima. Teškoća je bilo mnogo manje nego što se očekivalo. U stvari, samo su aplikacije koje su godine zapisivale u dvocifrenom formatu naišle na problem sa nuliranjem datuma. Mnogi developeri su uradili dodatni rad kako bi osigurali da njihove aplikacije ne budu pogođene Y2K problemom.
Kada će Unix imati problema?
Slične teškoće očekuju Unix sisteme najranije 2038. godine, kada će datumi sačuvani u gore pomenutom formatu premašiti 32-bitni prostor. I dalje ostaje 18 godina, ali developeri jezgra već rade na izbegavanju nadolazećih kvarova.
Problem 2038. godine ponekad se naziva Y2K38 problemom. Ako ne bude rešen do utorka, 19. januara 2038. godine, posle ove datumske tačke sistemi bi mogli pomisliti da je došla 1901. godina. Jedan od načina rešenja ovog problema je prelazak na 64-bitno predstavljanje informacija o datumu i vremenu. Neki smatraju da će i to biti mnogo složenije nego što može izgledati.
U svakom slučaju, nije vreme za paniku. Ono što danas zaista ima značaj je 50. godišnjica Unix sistema, koji se smatraju jednim od najvažnijih operativnih sistema u istoriji.
Izvor: 3dnews.ru
