Last-modified: 2017-08-17 (木) 21:04:26 (97d)

【コンピュータ2000年問題】(こんぴゅーたにせんねんもんだい)

1990年代末期から世界各地で顕在化した技術的問題。
西暦2000年になった瞬間*1に世界中のコンピュータが誤作動するという危惧。

概要

黎明期のコンピュータは、日付を扱う際に「年」を西暦の下2桁のみで表現するのが一般的であった。
この仕様は当時の技術的限界によるものだったが、技術上の問題が克服された以降も慣習的に2桁表記が続いていた。

だが、年号を2桁の数で表現すると、西暦2000年を示す「00」を西暦1900年と誤認する可能性がある。
実際に2000年になった時に何が起こるかは未知*2であったため、考え得る最悪の事態に対する警鐘が何度となく指摘された。
重篤な社会的混乱を引き起こす危険性があるとなればさすがに放置も許されず、その確認と修正が全世界規模で行われた。

技術的背景

何故、たかが4桁の数字を2桁まで省略しなければならなかったのか?
答えは、その2桁の差が、かつてのコンピュータ科学における重大な課題であったからだ。

コンピュータの計算は、多数の『ビット』を機械的に操作する事によって処理されている。
1個の『ビット』は論理的には一桁の二進数(0/1)であり、物理的には電気回路のスイッチ(ON/OFF)である。
そして、コンピュータのCPU(中央処理装置)が1回の演算で操作できるビットの数は有限である。

1980年代に存在した端末の大半は、一度に8ビットまでしか制御できなかった。
つまり、数値が8ビットで表現できる数(0〜255)である事が保証されていないと、あらゆる操作・演算の所要時間が2倍以上に増えるのだ。
これに加えて計算内容を記憶するメモリも極めて限られていたため、データの節約は死活問題だった。

例えば、任天堂の「ファミリーコンピュータ(1983年)」は作業用の記憶領域を2キロバイト持っていた。
1バイトは8ビットで構成されるので、つまり2桁の数値2000種類、または4桁の数字1000種類で完全にメモリを使い果たす。
不用意に数字の桁数を増やすような余裕がなかった事は疑いない。

1990年代には、32ビットを制御できるCPUと1メガバイト以上の一時記憶装置が登場していた。
つまり日付の年数を正規の西暦表記に変える事が可能になっていたのだが、慣習的に2桁での表記が続いていた。
実際、日付の表記方法を変えるとなれば、当時存在していたほぼ全てのコンピュータが仕様変更や機種交換を余儀なくされる。
今日の高度情報社会の基盤となるコンピュータシステムは当時すでに普及しており、既存の端末の数はすでに膨大であった。

事前に予想されていた通り、これらの確認・修正作業は困難を極めた。
完全に修正不可能になっていたためゼロから新規設計でシステムを構築し直すしかなかった事例も少なくない*3

航空・軍事分野に関連する問題点

航空軍事の分野では次のような問題が危惧されていた。

…等々。

その後

1999年12月31日〜2000年1月1日にかけて、公共交通機関が日付をまたぐ運行を自粛するなどして不測の事態に備えていた。
実際に2000年になった際、一部の機械に小さなトラブルが出たものはあったが、重篤な被害には至らなかった。

結果として、この問題は人類史上において特筆に値する出来事には発展せず、いわゆる「世紀末カルト」の一種として急速に忘れ去られつつある。
当時のコンピュータ技術者たちがどのような問題を検知し、どのような対策を採っていたかについて全貌は明らかでない。
そして、今となっては調べるのも容易ではない。

とはいえ、2000年代になってから以後も類似の問題は(局地的ながら)たびたび生じている。
コンピュータの誤作動にまつわる問題は「2000年問題」という枠を越えていつでも起こり得る普遍的な現象と化しつつあるのが現状である。

2000年2月29日、「閏年」の認識*5を誤っていた事が原因で各所にトラブルが生じていた。
また、オーストラリアの銀行システムが、何故か「2010年」を「2016年」と誤認してトラブルを起こした。
今後予想される類似の問題として、GPS衛星の原子時計の桁あふれが生じた際や、UNIXシステムにおいて時刻を扱う数値が桁あふれした際*6にもトラブルの発生が予告されている。


*1 実際の発生予想時刻は各端末の内部時計に依存するので、実際には24時間に渡る。
*2 「データを日付順に並び替える処理をしても本来あるべき順序にならない」など、純機械的にどんなトラブルが起きるかは予期されていた。
  未知だったのは、世界中あらゆる端末が同時並行的にトラブルを起こした時に実社会が被る被害である。

*3 稼働開始から10年・20年も経てば、開発当時の技術者が社内に一人もいなくなっていても驚くには値しない。
*4 西暦2000年に突入した瞬間、この問題にかこつけて核兵器による奇襲を仕掛けようとする国家の存在も懸念されていた。
*5 グレゴリオ暦では「西暦の数字が4で割り切れる」「西暦の数字が100及び400で割り切れる」年を「閏年」とするが、「100で割り切れるが400で割り切れない年」は閏年としない。
*6 UNIXの内部時間は「1970年1月1日0時0分0秒(協定世界時)」を基準として定められているが、現在の書式では2038年1月19日3時14分7秒(同左)までしか扱えず、この時間を過ぎると数値がマイナスになってしまう。

トップ 編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード 新規 一覧 単語検索 最終更新ヘルプ   最終更新のRSS