Commençons par prendre conscience du problème. Les considérations énoncées sur cette page n'ont pas forcément de lien direct avec NTP, mais divaguer un peu de temps en temps ne fait pas forcément de mal.
Nous avons tous un début (notre naissance) et une fin (notre mort) Nous connaissons en principe la date à peu près exacte de notre début et ignorons généralement jusqu'au dernier moment celle de notre fin, ce qui est probablement plutôt une bonne chose.
Entre les deux évènements, il s'écoule « un certain temps » que seuls ceux qui nous survivent peuvent mesurer avec une assez bonne précision, si ça les intéresse. Pour un fichier informatique, le processus est quasi identique. Il est créé à une certaine date et généralement détruit à une autre, toujours postérieure, de façon volontaire dans le meilleur des cas. Le « toujours postérieure » peut paraitre évident, mais l'est-ce vraiment ? Nous verrons que non.
Quoi qu'il en soit, dans le, monde matériel tout du moins, il est possible de mesurer une durée, du moment que l'on dispose d'une unité de mesure, même si l'on ne dispose pas de la notion de date. Mon chat a vécu 18 ans, 9 mois, 6 jours, 2 heures, 25 minutes et 45 secondes. C'est plutôt bien pour un chat, ce serait peu pour un humain, ce serait très peu pour une tortue, mais la tortue étant un animal très lent, ce n'est pas parce qu'elle vit longtemps qu'elle en profite plus. Pour un fichier informatique, tout dépend de la nature de ce qu'il contient (et des accidents qui peuvent se produire).
Dans la chronologie des choses, la durée, c'est bien, mais pouvoir donner une date, c'est pas mal non plus. Wolfgang Amadeus Mozart est mort le 5 décembre 1791 (je n'ai pas trouvé l'heure exacte). C'est plus pratique de se souvenir d'une date que d'un intervalle de temps qui varie sans arrêt, puisque le temps passe. Le 23 juin 2011, la durée qui nous séparait de la disparition de WAM était de 80188 jours, mais nous ne somme déjà plus le 23 juin 2011.
Pour définir une date, il faut définir une origine des dates. En France et dans de nombreux autres pays, cette date est celle (supposée) de la naissance de Jésus Christ. Ainsi Jésus Christ serait né le 00/00/0000:00:00:00 (traditionnellement, minuit) même si l'on sait aujourd'hui que c'est probablement faux. Peu importe car finalement, ce repère est complètement artificiel, il suffit que l'on s'accorde dessus. Notons tout de même que suivant les cultures, certains pays (certaines ethnies) adoptent une autre origine des temps. Ceci complique un peu les choses, mais sans grande gravité car l'unité de temps (la seconde) étant la même pour tout le monde, les conversions se bornent généralement à de simples additions ou soustractions.
La seconde est l'unité de temps universellement reconnue. elle est aujourd'hui mesurée avec précision puisqu'elle représente l'intervalle de temps qui s'écoule pendant 9 192 631 770 périodes de la radiation correspondant à la transition entre les niveaux hyperfins de l’état fondamental de l’atome de césium 133. Si vous n'y croyez pas, allez donc consulter le Bureau International des Poids et Mesures. Il n'est pas à la portée de tout le monde de disposer d'une poignée d'atomes de césium 133 et du matériel nécessaire pour en compter les 9 192 631 770 périodes, il nous faudra généralement nous accommoder de systèmes plus simples, mais moins précis. Le pendule d'un mètre, en oscillations de faible amplitude et à une altitude raisonnablement proche du niveau de la mer bat assez bien la seconde. Plus évolué technologiquement, les oscillations propres d'un cristal de quartz bien calibré peuvent servir de référence à une horloge de qualité acceptable.
Nous passerons rapidement sur les faits suivants :
La journée elle, est plus compliquée. Vous la voulez sidérale ou solaire ?
La journée sidérale, encore appelée journée stellaire, est régie par une rotation complète de la terre sur elle-même par rapport aux étoiles. Plus de césium 133 de quartz ou de pendule, nous changeons de méthode de mesure. Il ne faudra donc pas s'étonner si ça ne tombe pas « juste ». La loi de « Murphy » aussi appelée « loi de l'emmerdement maximum » fait qu'une journée dure en gros 86 164,098 903 691 secondes, soit 23 heures, 56 minutes et 4 secondes (jour stellaire, mesuré en 1820). Cette durée, en plus d'être variable en fonction de la lune et des gros tremblements de terre, augmente en moyenne de 2,3 millisecondes tous les 100 ans. Nous considérons qu'une journée dure 24 heures pour aller au plus simple.
La journée solaire est probablement plus proche de nos habitudes puisqu'elle est délimitée par deux levers de soleil consécutifs (ça doit fonctionner aussi avec les couchers et avec le zénith). Sa durée varie de 23 heures, 59 minutes et 39 secondes à 24 heures, 0 minutes et 30 secondes. Nous considérons qu'en moyenne, elle fait pile 24 heures.
L'année est le temps que met la terre pour effectuer une rotation complète autour du soleil. Toujours à cause de Murphy, cette durée serait à peu près de 365 jours 5 heures 48 minutes et 45,2606 secondes. Nous parlons ici de l'année tropique. Toujours pour aller vite, nous considérons que l'année fait exactement 365 jours, sauf pour les années bissextiles qui en font 366. En effet, il faudra bien de temps en temps rattraper l'erreur1).
Il est simple dans notre calendrier grégorien de savoir si une année est bissextile ou non, il suffit de vérifier que l'année est (divisible par 4 ET non-divisible par 100) OU divisible par 400.
Chacun voyant midi à sa porte, si l'on considère midi (12:00:00) comme étant le moment où le soleil est à son zénith (ombre portée au sol minimale), il est clair que le midi ne se produira pas en même temps partout le long d'un même parallèle. Tout va dépendre de la longitude. Ici encore, nous irons au plus rapide et découperons en tranches à l'intérieur desquelles l'heure sera artificiellement la même. Vous avez reconnu le fuseau horaire. Sauf que…
En se référant aux fuseaux horaires seuls, des pays aussi petits que le notre se verraient affublés de deux heures différentes à l'est et à l'ouest et nous ne serions pas les seuls dans ce cas en Europe. Aussi a-t-il été décidé pour ladite Europe, de couper la poire en trois. Peu importe puisque finalement, tout ici n'est que convention. Lorsque nous parlons à notre voisin, nous pouvons considérer que nous voyons tous les deux midi en même temps.
C'est un peu plus embêtant lorsqu'un système informatique marseillais (pourquoi faudrait-il absolument qu'il soit parisien ?) discute via l'internet avec un système informatique situé à Hydaburg (Canada). Puisque nous sommes dans le domaine de l'abstraction, pourquoi ne pas considérer un temps universel, une heure universelle, dé-corrélée de la position solaire, mais la même pour toute la planète, à l'instant T ? Les anglais ont tiré les premiers, et l'heure UTC2) aussi appelée heure GMT3) a été définie comme étant l'heure solaire sur le méridien passant par Greenwich. En ce qui nous concerne, dans l'Europe de l'ouest, nous avons droit à l'heure CET4). Depuis 1973 nous avons même droit à l'heure CEST5), ce machin qui nous fait sauter une heure au printemps et nous la rajoute un peu après l'automne, parait-il pour économiser l'énergie. Mais ne nous éloignons pas trop du sujet initial. Ce genre d'idée remonte à loin dans l'Histoire, défendue par des personnes qui n'étaient pas reconnues comme étant des idiots pourtant.
Bref, l'important est qu'il y ait une heure de référence, la même pour tous, et peu importe si le soleil est au rendez-vous ou pas. Dans le monde virtuel de l'informatique, il n'y a ni jour ni nuit. Un bit est un bit, il n'a pas d'horloge biologique, n'a pas besoin de lumière, d'obscurité, il ne lui faut qu'un peu d'énergie électrique pour se maintenir en vie.
Dans le monde réel toutefois, lorsqu'un ministre dans un bureau parisien (ce n'est pas de ma faute si c'est organisé ainsi) probablement climatisé (donc énergivore) décide que c'est mieux pour les économies d'énergie de placer par exemple sur une toiture un maçon couvreur travaillant à Oloron-Sainte-Marie en plein mois de juillet à 14h alors que, solairement parlant, il est tout juste midi, peut-être oublie-t-il un détail qui peut avoir une certaine importance pour la santé du maçon en question. Puisque nous en sommes à divaguer, notons aussi que le ministre doit se taper un col de chemise empesé, serré au cou par une cravate, le tout surmonté d'un veston où la transpiration est bannie, ce qui impose de fait l'usage de la climatisation et de tout un tas d'adjuvants chimico-cosmétiques, généralement assez peu recommandables sur le plan purement écologique, voire sanitaire. Le maçon, lui, a plus de chance car il peut s'affubler d'un vieux « T-Shirt » délabré et déjà sale, qui accepte parfaitement la transpiration sans pour autant qu'il paraisse plus maculé ni plus odorant.
Mais revenons à nos bits. Je crée un fichier, je le modifie plusieurs fois, j'y accède en lecture encore plus souvent (à quoi servirait d'écrire si ce n'est pour être lu) et finalement, je le détruis. Il est clair que pour la cohérence, il vaut mieux que je le modifie et/ou le consulte après l'avoir créé et avant de l'avoir détruit faute de quoi j'y perdrais mon latin.
Evident ? Ça ne l'est pourtant pas. J'ai mis mon ordinateur à l'heure (UTC). Je crée un fichier. Mon système de fichier va enregistrer l'heure de création. Nous sommes le 28 mai 2011, à 17h 53 minutes et 25 secondes.
J'éteins alors mon ordinateur. Son horloge CMOS (celle qui persiste à fonctionner, en principe, lorsque l'ordinateur est hors tension) aurait du continuer à égrener le temps, sauf que la pile est morte silencieusement. Lorsque je redémarre mon ordinateur, le lendemain pourtant, il croit que nous sommes le 1 janvier 1970 (GNU/Linux n'est-ce pas). J'ouvre donc le fichier pour le lire avant de l'avoir créé…
Il est possible de reproduire le phénomène en copiant simplement le fichier sur une machine qui n'est pas à la même heure que l'autre.
Téléphonez donc à un américain à 8h (CEST) pour lui dire que c'est l'heure de se lever…
Notons au passage qu'un certain système dont nous tairons le nom, positionne l'horloge CMOS non pas sur l'heure UTC mais sur l'heure locale. Ceux qui auraient la curieuse idée de placer ce système en « dual boot » avec un GNU/Linux, auront quelques soucis pour rester à l'heure, en passant d'un système à l'autre.
Il y a dans notre monde des choses qu'il ne faut pas mélanger.
Les systèmes informatiques ont des travaux répétitifs à exécuter. Etant répétitifs, quoi de plus simple que de trouver un moyen de les déclencher de façon automatique ? cron
est justement là pour remplir cet office. Cron se fonde sur l'heure à la minute pour exécuter une tâche. Si on lui subtilise justement cette minute, la tâche ne sera pas exécutée. Il ne doit pas y avoir de trous dans l'écoulement du temps, du moins pas de gros trous (inférieurs à une minute en ce qui concerne cron). Si une horloge n'est plus à l'heure, il faut l'accélérer ou la ralentir pour qu'elle rattrape son retard ou perde son avance sans créer de trous ni de recouvrements, du moins lorsque le système est opérationnel. Rien n'interdit en revanche de mettre l'horloge à l'heure au moment du démarrage de la machine, du moins à condition que le saut dans le temps se fasse dans le futur et non dans le passé, ce qui devrait être en principe toujours le cas.
Nous pouvons ici apercevoir le problème qu'il y aurait à utiliser l'heure locale, avec ses sauts temporels bisannuels. Qu'est-il advenu de tout ce que nous avions à faire le 28 mars 2010 entre 2 et 3 heures ?
Pire encore. Ne prévoyez rien à faire le 31 octobre 2010 entre 2 et 3 heures (ni le 30 octobre 2011 aux même heures (etc.)) sauf éventuellement s'il s'agit de tâches particulièrement attrayantes, vous aurez à les accomplir deux fois…