Skip to content

Overflow

ジョン・タイターという男がいた。いたことになっている。

2000年、インターネットの掲示板に「2036年から来た」と名乗る人物が現れた。タイムトラベルの仕組みを図解し、未来の出来事を予言し、自分の任務はIBM 5100を回収して持ち帰ることだと書いた。古いコンピュータの問題を修正するために、IBM 5100の隠し機能が必要だという。

荒唐無稽な話だが、ひとつだけ奇妙な事実があった。IBM 5100には本当に隠し機能があった。公式には文書化されていない、System/370メインフレームのエミュレーション能力。開発者のBob Dubkeが後年これを認めている。IBM社内でも一部の人間しか知らなかった機能を、なぜ掲示板の匿名投稿者が知っていたのか。タイターの予言はほぼ外れた。しかしIBM 5100の件だけが、いまだに説明がつかない。シュタインズ・ゲートでこの話を知った人も多いだろう。わたしもそのひとりだ。

タイターが来たと称する2036年。その2年後に、もうひとつの時限爆弾が控えている。2038年1月19日3時14分7秒(UTC)。UNIXの時計が巻き戻る。UNIX時刻はエポック(1970年1月1日)からの経過秒数を32ビットの符号付き整数で表現している。その上限が2,147,483,647。これを超えた瞬間、値は-2,147,483,648に反転し、時刻は1901年12月13日に飛ぶ。137年の巻き戻りだ。

2000年問題が先にあった。年を2桁で保存していたせいで、2000年が1900年に戻る。世界中がパニックになり、修正費用は全世界で3000億ドルから6000億ドルと言われた。結果的には大規模な障害は起きなかったが、それは何年もかけて修正したからだ。米海軍天文台のウェブサイトが日付を「January 1, 19100」と表示していたのは、修正が漏れた愛嬌のある実例だ。

2桁で保存したのはプログラマの怠慢か。当時の制約を知ると、そうは言えない。1960年代のメモリは1ビットあたり約1ドル。1バイトで8ドル。1キロバイトで8000ドルだ。パンチカードは80桁が物理的な上限で、1桁が貴重だった。2バイト節約するために年を2桁にしたのは、当時の環境では合理的な判断だった。問題を認識していた人間もいたが、多くのプログラマは、このソフトウェアが2000年まで使われるとは思っていなかった。

2038年問題も根は同じだ。制約の質は違う。メモリのコストではなくビット幅の選択だ。しかし「自分の現役時代は余裕でカバーできる」という判断の構造は変わらない。32ビットで足りると判断した時点では、68年先の話だった。

主要なOSの64ビット時刻への移行は、すでにほぼ片付いている。問題はアップデートされない機器だ。ファームウェアの更新手段もなく、32ビットのまま、どこかで静かに秒を刻んでいる組み込み機器が無数にある。2038年が来たとき、それらは1901年に戻る。

桁あふれは時刻だけの話でもない。NTPの時刻フォーマットは2036年に上限を迎える。GPSの週番号は1024週でリセットされ、1999年と2019年に実際にロールオーバーが起きた。時計は至るところで、それぞれの上限に向かって静かに刻んでいる。

人間は、自分の現役時代をカバーできればいいと考える。わたしも新しいサービスのデータ量を見積もるとき、だいたい引退するまでの年数で暗算している。その先は次の世代がなんとかするだろう。1960年代のプログラマもそう思っていた。2000年代のエンジニアもそう思っている。

ジョン・タイターの正体は結局わからない。ただ、2038年にUNIXの時計が巻き戻ったとき、掲示板に書き込みがあるかもしれない。「言っただろう」と。