4月頃のワイアードにコンピュータの時計は狂う、けしからん!という話が出ていた。なかなかよく調べている人で、気温や湿度で水晶発信子が狂うということも知っているし、遅れることが多いということも気がついているようだ。しかし、そこまで知っていて・・・。コンピュータネタ、目次へコンピュータの時計は進んではいけないのだ。水晶発信子がいかに収縮しようと決して進んではいけないのだ。だから普通は遅れるのだ。先ほどのような記事がワイアードに出るということは、この事実があまり人に知られていないことを意味するのかもしれない。そんなわけでなぜ進んではいけないかの理由を書いておくのも無駄ではあるまい。
ログに記される時間の問題なのだ。OSは自分が意識した出来事をイベントログに書く。アプリケーションも動作をログに書き出すものがある。もしコンピュータの時計が進んでいたとすれば、どこかでこれを戻さなくてはならない。そのとき、単純に戻してしまうとイベントログをはじめとするログに記された出来事の時系列が狂ってしまう。前後が逆転するのだ。
こうなるとログを見て動作状況を確認するプログラムがどんな誤動作をするか分からない。あるいは、出来事の順序を見誤ったゆえに、重要な事象が発見できないかもしれない。telnetでのアクセス記録が外部からのポートスキャンの直後に記録されていれば「ぎくっ」とするだろうが、逆であれば見過ごすのではないかな。
これに対して、時計を進めて時刻を合わせるのであれば、少なくとも前後関係は狂わない。直した時間の間は空白となるが、それは只何もなかったというだけだ。そんなわけでコンピュータの時計は遅れるように出来ている。正確には進むくらいなら遅れた方がましだ、というようにチューニングされている。だから普通の時計に比べて狂いが大きいように見えるのだ。(まあ確かに記事にあるように使われている水晶発信子が安物ということも原因だが、それがすべてではない。)
上記のような問題があるおかげでnettimeコマンドなどを使って、ネットワーク上のコンピュータ群の時刻同期を自動でとるという仕組みは作りにくい。万が一進んでいるコンピュータがあった場合、自動で直して良いものかどうか悩むのである。
進んでいた場合、例えば、2秒に1秒ずつ時間を刻んで、のんびりと時刻同期をとってくれるという仕組みを作り込まねばならないだろう。それにしても、テレビ録画が出来る家庭用パソコン。時報に合わせて時刻を自動調整するというVTRでポピュラーな機能を付けてくれていないかなあ。タイムサーバーにしたいのよ。それはインターネットと接続すればタイムサーバーを作るのは簡単だ。でもセキュリティを確保することを考えるとそうとも言い切れない。ファイアーウォールサーバーをわざわざその為に立てるのは鬱陶しいし、いかにも高くつきそうだ。