「本当の時間なんて知る必要があるのか?時計が狂うと何が問題なのか?」と思う人もいるだろう。
実のところ、何らかの形でコンピューターを使っていれば、時計が狂うといろいろと問題が発生する。システム管理者やネットワーク管理者でなければあまり知らないかもしれないが、セキュリティや認証、ネットワークなどといった、インターネットを動かすためのあらゆる技術は、正確な時計に大きく依存している。一部のシステムでは、時計を正確に合わせるために全地球測位システム(GPS)の受信機とGPSDデーモンが使用されている。ところがGPSDに、これまで発見されてこなかった厄介なバグが発見され、米国時間2021年10月24日に発現することが明らかになった。この問題を修正せずにいると、時計が2002年3月に巻き戻ってしまい、システムは音を立ててクラッシュすることになる。では、なぜそんなことが起こるのだろうか。
そもそも地球の時間は絶対的なものではない。これは地球の自転速度が、さまざまな地質学的事象によって変化するためだ。これを追跡しているのが国際地球回転・基準系事業(IERS)で、この国際機関が数年に1度、うるう秒を加えている。この操作は、世界の標準時刻系である協定世界時(UTC)に対して行われるものだ。UTCは、インターネットの時刻同期を行うプロトコルであるNTP(Network Time Protocol)で使用されている。さらに、そのNTPは、インターネットに接続されているデバイスの時計を互いに同期させるために使われている。
では、NTPは今何時なのかをどうやって知るのだろうか。これは、NTPサーバーを原子時計と同期させることによって行われている。NTPには階層構造があり、各階層にはStratumと呼ばれる番号が付与されている。Stratum 1のサーバー(プライマリーサーバー)は、衛星、無線、またはモデムを介して国家が提供している時刻源と直接的に同期されている。Stratum 2のサーバー(セカンダリーサーバー)は、Stratum 1のサーバーと時刻を同期しており、それ以降の階層でも同じように次の階層のサーバーと同期している。
ここまではいいとして、では、Stratum 1のサーバーはどうやって時計を同期させているのだろうか。多くのサーバーでは、そのためにGPSDが使われている。このサービスデーモンは、1つまたは複数のGPSを監視して、位置、経路、速度、そして(この目的でもっとも重要な要素である)時刻を追跡するものだ。
最近になって、GPSDのコードには、次は2038年11月に使われるはずだった、「GPS週数ロールオーバー」(週数が0に戻る)のサニティーチェックコードにバグがあり、誤って次の日曜日である2021年10月24日にこの処理が発生して、週数から1024が引かれることが明らかになった。別の言い方をすれば、多くのコンピューターが、突然2002年3月の世界に戻ってしまうということだ。
このバグを発見したStephen Williams氏は、「世界中のGPSDを使用している多数のStratum 1 NTPサーバーが、早朝に2002年への長くて奇妙な旅に出る『興味深い瞬間』が訪れるような気がする」と述べている。
米コンピュータ緊急事態対策チーム(US-CERT)は米国時間10月21日、このGPSDのバグについて注意を呼びかけている。GPSDのバージョン3.20~3.22にバグがあるという。