コラム26.  :2038年問題と2045年問題

2000年問題

2038年問題および、2045年問題について説明する前に、関連性の深い2000年問題について説明しておきましょう。

かつて、西暦が1999年から2000年に変わる時、世の中では「2000年問題」なるものが大問題になっていました。これは、古いコンピュータの中には、限られた記憶量量を有効に使うためには年号を2桁で管理しているケースが多く、西暦2000年を1900年と誤認してしまい、処理を続行できなくなる問題のことです。

高々それだけのことですが、実はこれが大問題で、どこにあるシステムがどのように誤動作を起こしてしまうのか、ということが当初は全くわからなため、信号機は電車などが不具合を起こして交通がマヒしたり、最悪の場合核ミサイルのシステムが誤動作して、誤ってミサイルが発射されるのでは…というような極端な予想もありました。

しかし、世界中のプログラマーがありとあらゆるシステムでこの問題に対応するためにプログラムを修正したことから、小さなトラブルは発生したものの、幸いにも社会全体に混乱を与えるような大きな影響を与えるような大規模な問題は発生しませんでした。

2038年問題とは?

では、このコラムのタイトルになっている、2038年問題とは一体なんなのでしょうか?実はこれ、C言語と密接な関係があるのです。

世の中に、時刻の表現として「UNIX時間」(1970年1月1日0時0分0秒からの経過秒数)を使用しているコンピュータが存在し、この経過秒数を表現する型として、現在の標準では、C言語のtime_t型で使われています。

伝統的な実装ではtime_tをintとし、そのintは符号つき32ビットであることから、取り扱えるのは2,147,483,647秒、年に直すと約68年ということから、1970年の68年後、つまり2038年に2000年問題の時と同様な不具合が起こる可能性がある、というのがこの2038年問題です。

2000年問題よりも深刻になる可能性も

というと「では、2000年問題のときのように、対応していけばよいのでは」と思われるかもしれませんが、実は自体はそんなに単純なものではないのです。2000年問題は、あくあまでもアプリケーションソフト側の問題であり、プログラムのその部分を書き換えれば事足りる問題でした。しかし、2038年問題は、OSというシステムの深層部分に潜む問題であり、LinuxのようなオープンソースのOSならばともかく、ソースコードすら公開されず、どこでそのような処理を行っているかも見当もつかないようなOSの問題点を見つけ出すのは極めて困難です。

そのため、人によっては2038年問題は、2000年問題よりも深刻であると指摘している人もいます。コンピュータシステムが開発されたばかりのころは、これだけ社会全体に広範に、しかもネットワークでつながった状態でコンピュータが利用される日が来るとは、多くの人が予想できませんでした。そのため、2000年問題や、2038年問題以外にも、今後は類似な問題が規模の大小を問わず、多数発生する可能性があります。

今後は、こういった基幹部分を担うシステムは、長期間利用されることを最初から念頭に入れ、こういった問題を回避しやすいように設計することの必要性が増すことでしょう。

ちなみに、最近のOSや言語処理系では対策として時刻の管理に64ビットの符号付き整数を利用していることから、これを1970年1月1日午前0時からの経過秒数として使えば西暦3000億年程度までは同種の問題は起きないと言われています。

インドの台頭と2000年問題

ところで、話は主題からそれますが、現在世界でIT大国として認知されているインドですが、実は冒頭で述べた2000年問題がその飛躍のきっかけの一つになった、と言われています。

19999年、世界中で2000年問題への対応が大きな課題となると、対策ソフトとしてはインド製プログラムも米国製などと同様、欧米中心に広く利用されたのです。また、この対策のために雇用されたインド人IT技術者の技術の高さも注目を集めるようになり、それをきっかけにインドのIT産業は世界的にそのレベルの高さを認知されることになりました。

今度の2038年問題でも、もしかしたらインド同様、いままでIT大国とは認識されていなかったような国が、突然IT大国として注目を集めるようなことになるかもしれません。

2045年問題

続いて、2045年問題について説明しましょう。実はこの問題、同じ年号がついている問題であるにもかかわらず、その中身は2000年問題、および2038年問題とはまったく中身が違うのです。

2045年問題とは2045年にはコンピューターの性能が人間の脳を超えるという予測です。つまり、コンピュータ技術が、今のペースで発達し続けるとある地点で、人類の知能を超える、究極の人工知能が誕生するというものです。

予測不可能な未来

もしかしたら、2000年問題よりも、2038年問題よりも、こちらの問題のほうがよほど深刻かもしれません。なぜなら、その人工知能(Artificial Intelligence ; AI)が、更に自分よりも優秀な「AI」を開発し、更にその「AI」が、次のもっと優秀な「AI」を開発し…と、技術が人間の手を離れ、爆発的に発展していってしまうかもしれないからです。

そういったことが起これば、映画「ターミネーター」や、「マトリックス」のような世界が現実のものになるかもしれません。それを考えると、ぞっとしますが、かといって絶対にそう言うことが起こるとも言い切れない…。そこがこの問題の不気味な点なのです。