Il 2020 è un anno significativo per Unix: all'inizio dell'anno il sistema operativo originale ha compiuto 50 anni. Il tempo Unix, conosciuto anche come "data epocale", è il numero di secondi trascorsi dal 1° gennaio 1970. Ma cosa preoccupa gli sviluppatori del kernel in occasione del cinquantennale di Unix?

Sebbene alcuni degli sviluppi iniziali di Unix precedano ufficialmente l'inizio della sua "epoca", il 1° gennaio 1970 rimane il punto zero nel tempo POSIX. Pertanto, con l'inizio del 1° gennaio 2020, la piattaforma ha ufficialmente compiuto esattamente 50 anni.
Tempo Unix contro il tempo umano
Dal punto di vista del tempo umano, 50 anni sono un lungo periodo. Dal punto di vista del tempo Unix, non c'è nulla di speciale nei 50 anni, e anche 43 anni sarebbero altrettanto significativi. I sistemi Unix (incluso Linux) memorizzano i valori di data e ora come il numero di secondi trascorsi dal 1970-01-01 00:00:00 UTC, utilizzando una registrazione a 32 bit. Per determinare quanti secondi sono trascorsi da quel momento e quindi il valore attuale del tempo Unix, si può eseguire il comando:
$ date +%s
1576883876
L'argomento %s dopo il comando date definisce la visualizzazione della data e dell'ora attuale come numero di secondi dall'inizio del 1970-01-01.

Qual è la data massima che i sistemi possono memorizzare Unix?
Per capire quanto tempo può contenere un sistema Unix, è necessario valutare la capacità di un campo a 32 bit. Si può calcolare così:
$ echo ‘2^32’ | bc
4294967296
Tuttavia, poiché Unix prevede la memorizzazione di numeri negativi, un bit viene riservato per il segno, riducendo così il valore del tempo a:
$ echo ‘2^31’ | bc
2147483648
E poiché la numerazione Unix inizia da 0, ciò significa che abbiamo 2.147.483.648 valori, ma il numero massimo è 2.147.483.647 — il valore della data e dell'ora Unix non può superare questo numero. Proprio come un contachilometri su un'automobile non può mostrare più di 999.999 chilometri — aggiungi 1, e il valore si azzera.
Quanto dura un anno in secondi?
Il numero di secondi in un anno può essere calcolato nel seguente modo:
$ expr 24 * 60 * 60 * 365
31536000
In un anno bisestile si aggiunge un giorno in più:
$ expr 24 * 60 * 60 * 366
31622400

Come visualizza Unix il suo 50° compleanno?
Il 1° gennaio 2020 alle 12:00, il tempo sarà 1577836800. Il calcolo è complicato perché bisogna considerare gli anni bisestili. Dall'inizio dell'era Unix ci sono stati 12 di questi anni, dal 1972 al 2016. Ciò significa che sono trascorsi 38 anni normali.
Ecco come appare il comando expr per calcolare i secondi trascorsi negli ultimi 50 anni:
$ expr 24 * 60 * 60 * 365 * 38 + 24 * 60 * 60 * 366 * 12
1577836800
Oppure in questo modo, tenendo conto dei calcoli effettuati in precedenza:
$ expr 31536000 * 38 + 31622400 * 12
1577836800
Questo modo di registrare il tempo ha reso i sistemi Unix immuni al problema Y2K, che ha preoccupato le persone alla fine del 1999, temendo che il passaggio al 2000 potesse danneggiare i sistemi informatici. Le difficoltà si sono rivelate molto inferiori alle aspettative. Infatti, solo le applicazioni che registravano gli anni in formato a due cifre hanno affrontato il problema del reset delle date. Molti sviluppatori hanno fatto lavoro aggiuntivo per garantire che le loro applicazioni non fossero colpite dal problema Y2K.
Quando il tempo Unix avrà problemi?
Difficultà simili si prevedono per i sistemi Unix non prima del 2038, quando le date memorizzate nel formato descritto sopra supereranno lo spazio a 32 bit. Rimangono ancora 18 anni, ma gli sviluppatori del kernel stanno già lavorando per evitare futuri malfunzionamenti.
Il problema del 2038 è talvolta definito come il problema Y2K38. Se non verrà risolto entro martedì 19 gennaio 2038, dopo questa data i sistemi potrebbero erroneamente pensare che sia il 1901. Un modo per affrontare questo problema è passare a una rappresentazione temporale a 64 bit. Alcuni ritengono che questo sarà comunque molto più complicato di quanto possa sembrare.
In ogni caso, non c'è motivo di farsi prendere dal panico. Ciò che è davvero importante oggi è il 50° anniversario dei sistemi Unix, considerati uno dei sistemi operativi più significativi della storia.
Fonte: 3dnews.ru
