Unixの時代はあなたが思っているよりも早く来るかもしれない

Table of Contents

Unixの時代はあなたが思っているよりも早く来るかもしれない

「2038年問題」としても知られる、来たる新世界についての厳しい警告が過去からもたらされた。国立コンピューター博物館のシステム修復者が、古代のシステムに取り組んでいるときに不安定な問題を発見したのだ。

iプレイヤー

エポック・アリプス・ナウ:BBC iPlayerが2038年の期限を誇示し、インフラゲームを漏らす

続きを読む

最近、博物館で Digital Equipment Corporation (DEC) の機器の展示会に参加したボランティアの Robin Downs 氏は、現在稼働中の PDP-11/73 が設置されている博物館の Large Systems Gallery で、The Registerに対してこの問題のデモンストレーションを行いました。

このマシンのソフトウェアは、西暦を2桁で保存していたため、世紀が変わると頭を悩ませるY2K問題に対応するパッチを既に適用済みだった。ダウンズ氏は、「Y2Kは主にアプリケーションプログラミングの問題でした…アプリケーションプログラマーが2桁の数字を考慮に入れていなかったことが主な原因でした」と説明した。

2038年問題はまた別の話だ。ダウンズ氏はPDP-11/73を指しながら、「このマシンはUnixは動作していませんが、Cコンパイラが搭載されています。しかも、そのCコンパイラは1982年製なので…様々な問題があります」と述べた。

Downs 氏によれば、このオペレーティング システムは 1990 年代後半に Y2K 対策パッチが適用されているが、内部の日付と時刻には同じ時間構造を使用していないという。

「つまり、このCコンパイラは、時刻と日付を尋ねると、既に間違った答えを返すのです。時刻は正しいのですが、日付が間違っています。」

面倒ではありますが、解決可能です。チームはこの問題を回避しました。しかし、ダウンズ氏がシステムクロックを進めてテストしていたところ、予期せぬ事態が発生しました。彼はシステムクロックを2036年まで進めると、すべて正常に動作しているように見えました。

そして、2037年――新紀元が到来する1年前――にプログラムはクラッシュした。「時間関数に別のバグがあることが判明しました」とダウンズ氏は語った。「文書化されておらず、未知のバグなのですが、2037年の初めには、時間関数を呼び出すプログラムはすべてクラッシュしてしまうのです。」

「そこで、これを書いているときに、2038年以前に存在していた、我々が知らなかったバグを発見したのです。」

2038 年問題は、Unix 時間 (Unix エポック (1970 年 1 月 1 日 00:00:00 UTC) からの秒数を符号付き 32 ビット整数で保存するシステムで発生します (64 ビットは最新のアプローチの 1 つですが、レガシー システムでは長引く傾向があります)。

2038年1月19日3時14分7秒(UTC)に、秒カウンタがオーバーフローします。理論上は、エポック(1901年12月13日20時45分52秒(UTC))より前の日付と時刻が返されるはずですが、ダウンズではそうはなりませんでした。

同氏は、「現地時間関数は 1901 を返すはずだと予想していました。そうなるだろうと考えていたのです」と語った。

代わりに、1970 年に戻りました。

「わかりました」とダウンズ氏は言った。「つまり、現地時間機能にバグがあって、-68 年前ではなく 68 年前に戻ってしまうということですね...」

つまり、コンパイラに問題がある可能性があります。コードが問題を処理する方法に問題があるかもしれません。マシンが実際に何を行うかに問題があるかもしれません。そして、それはまた続きます。

元マイクロソフトエンジニアのデイブ・プラマー氏は、この問題はいずれ解決されると楽観視している。彼はThe Register紙に対し、「カウンターは現在時刻から始まるため、2038年に切り替わる時点で稼働しているものはすべて疑わしいものになります。つまり、長期間稼働している必要はありません」と語った。

「GetTickCount() やそれに類似したものに依存している重要なものがあることは考えられますが、その間の 13 年間でそれらを見つけるのに十分でしょう。」

  • Debianは2038年が終わるのを待たず、すべてを64ビット時間に切り替える
  • 国立コンピューティング博物館がブレッチリー・パークのHブロックを改修
  • 壊れたVPN、2038年、そして100年前に期限切れになった証明書に関する奇妙な物語
  • 2038年以降も32ビットLinuxを使い続けるには?カーネルバージョン5.6がリリースされれば、素晴らしい体験が待っています。

しかしダウンズ氏は懸念を抱いており、今日この博物館に修学旅行に来た子どもたちは、12年か13年後にはエンジニアとしてのキャリアをスタートし、レガシーコードを学ぶことになるかもしれないと指摘した。彼は、潜在的な問題の広がりを認識していないプロのCプログラマーに会ったことがある。「そしてもう一つの問題があります」と彼は言った。「私たちが今作っているものは、12年以上もつと予想されているのです」

予後は良くありません。

「答えはありません」とダウンズ氏は結論づけている。「なぜなら、個々のデバイスと、場合によってはソフトウェアのバージョンをテストしない限り、動作が異なる可能性があるからです。」

「Y2K のときよりも、程度の差はあれ、問題が発生する可能性が非常に高くなっています。」®

Discover More