L'année 2020 est marquante pour Unix : au début de l'année, le système d'exploitation original a eu 50 ans. Le temps Unix, également connu sous le nom de « dates d'époque », est le nombre de secondes écoulées depuis le 1er janvier 1970. Mais qu'est-ce qui préoccupe les développeurs du noyau à l'occasion du cinquantenaire d'Unix ?

Bien que certaines des premières développements d'Unix aient précédé le début officiel de son « époque », le 1er janvier 1970 demeure le point zéro dans le temps POSIX. Ainsi, depuis le 1er janvier 2020, la plateforme a officiellement exactement 50 ans.
Temps Unix contre le temps humain
Du point de vue du temps humain, 50 ans est une longue période. Du point de vue d'Unix, il n'y a rien de spécial à avoir 50 ans, 43 ans auraient également été significatifs. Les systèmes Unix (y compris Linux) stockent les valeurs de date et d'heure comme le nombre de secondes écoulées depuis le 1970-01-01 00:00:00 UTC, en utilisant une représentation sur 32 bits. Pour déterminer le nombre de secondes écoulées depuis ce moment et donc la valeur actuelle du temps Unix, on peut exécuter la commande :
$ date +%s
1576883876
L'argument %s après la commande date spécifie l'affichage de la date et de l'heure actuelles sous forme de nombre de secondes depuis le début du 1970-01-01.

Quelle est la date maximale que les systèmes Unix peuvent stocker ?
Pour comprendre combien de temps un système Unix peut contenir, il faut évaluer la capacité d'un champ de 32 bits. Cela peut être calculé comme suit :
$ echo '2^32' | bc
4294967296
Cependant, comme Unix prévoit de stocker des nombres négatifs, un bit est réservé pour le signe, réduisant ainsi la valeur du temps à :
$ echo '2^31' | bc
2147483648
Et comme la numérotation Unix commence à 0, cela signifie que nous avons 2 147 483 648 valeurs, mais la plus grande est 2 147 483 647 — la valeur de date et d'heure Unix ne peut pas dépasser ce nombre. Tout comme le compteur kilométrique d'une voiture ne peut pas afficher plus de 999 999 kilomètres — ajoutez 1 et la valeur se remet à zéro.
Combien de temps une année dure-t-elle en secondes ?
Le nombre de secondes dans une année peut être calculé comme suit :
$ expr 24 * 60 * 60 * 365
31536000
Lors d'une année bissextile, un jour supplémentaire est ajouté :
$ expr 24 * 60 * 60 * 366
31622400

Comment Unix affiche-t-il son 50e anniversaire ?
Le 1er janvier 2020 à minuit, il sera 1577836800. Le calcul est un peu plus compliqué car il faut tenir compte des années bissextiles. Depuis le début de l'époque Unix, il y a eu 12 années bissextiles, de 1972 à 2016. Cela signifie qu'il y a eu 38 années normales.
Voici comment la commande expr apparaît pour calculer le nombre de secondes écoulées au cours des 50 dernières années :
$ expr 24 * 60 * 60 * 365 * 38 + 24 * 60 * 60 * 366 * 12
1577836800
Ou bien ainsi, en tenant compte des calculs précédents :
$ expr 31536000 * 38 + 31622400 * 12
1577836800
Cette façon d'enregistrer le temps a rendu les systèmes Unix résistants au problème Y2K, dont beaucoup s'inquiétaient à la fin de l'année 1999, craignant que le passage à l'an 2000 n'endommage les systèmes informatiques. Les difficultés se sont révélées beaucoup moins nombreuses que prévu. En réalité, seuls les programmes enregistrant les années au format à deux chiffres ont été confrontés à un retour à zéro des dates. De nombreux développeurs ont fourni un effort supplémentaire pour s'assurer que leurs applications ne seraient pas touchées par le problème Y2K.
Quand le temps Unix rencontrera-t-il des problèmes ?
Des difficultés similaires attendent les systèmes Unix au plus tôt en 2038, lorsque les dates enregistrées dans le format décrit ci-dessus dépasseront l'espace 32 bits. Il reste encore 18 ans, mais les développeurs du noyau travaillent déjà à éviter les pannes à venir.
Le problème de l'an 2038 est parfois mentionné comme le problème Y2K38. S'il n'est pas résolu avant le mardi 19 janvier 2038, après cette date, les systèmes pourraient penser qu'il est 1901. Une des solutions à ce problème consiste à passer à une représentation en 64 bits de l'information sur les dates et heures. Certains pensent que cela sera beaucoup plus compliqué qu'il n'y paraît.
Quoi qu'il en soit, il est encore trop tôt pour paniquer. Ce qui est vraiment important aujourd'hui est le 50ème anniversaire des systèmes Unix, qui sont reconnus comme l'un des systèmes d'exploitation les plus importants de l'histoire.
Source : 3dnews.ru
