2038年問題

先日、世界の終わりに関する2037年の予言のことを書いたら、
後輩から「そこを生きのびても、2038年問題でIT業界はしっちゃかめっちゃかでしょう」と。
 
2038年問題とは…
世界中で今も多く使われているコンピュータのOS「UNIX
その機能のひとつに「UNIX時間」というのがあって、
1970年1月1日0時0分0秒を基準に、今、どれぐらい経過したかを
「time_t」という形式で取得することができる。
それを「yyyymmdd」という日付の形式に変換すれば現在の時刻となる。
話ははしょるが、この経過した秒数を通常「int」という型で定義しているため
2の31乗、つまり32ビットまでしか扱えない。
そこを超えると UNIX が数値として認識できなくなる。
2の31乗がどれぐらいになるかというと約21億秒。
1970年1月1日0時0分0秒からだと、2038年1月19日3時14分7秒。
そこから先、time_tを利用しているUNIXのシステムは誤動作を引き起こしてしまう。
何が起きるかはプログラム次第だが、平たく言うと日付の判定が正しく行えなくなる。
半分経過した2004年1月11日に誤課金した、というケースが過去にある。
 
影響範囲の広さで言えば、2000年問題の比じゃない。
西暦を下2桁だけで扱っていたシステムの場合、
「99」を暗黙の裡に「1999」と補っていたならば、
2000年を表そうとして「00」とすると「1900」となってしまう。
そのように変換するプログラムを自分で組んでいたら、が前提となる。
一方で2038年問題の場合、OSが標準的に用意しているデータの形式を利用していたら、
となるので日付を扱うシステムならば通常無意識のうちに使うことになる。
対策としては time_t 型を32ビットではなく64ビットで扱うことで扱える数値の範囲を広げる。
最近のシステムは事前にその対応を行っているだろう。
しかし、2000年問題と同じで、古いシステムは未対応のままのものとなっている。
 
自分でも理解するために長くなってしまった。
コンピュータは日夜すごいスピードで進化を続けているが、
全世界のシステムが自然と追随してアップデートする、ということはないため、
1980年代、1990年代に組まれた古いシステムがそのまま稼働していることはよくある。
古い水道管が今も修理・メンテナンスを続けながら利用されているようなものだ。
最高性能のサーバをエキスパートのエンジニアが日々面倒を見てバリバリ動いているのなんて一握り。
この世界のシステムのほとんどは継ぎ足し継ぎ足しでどうにかこうにか動いている。
僕ら利用者にとってそんなふうに感じられないのは
インターネットがバーチャルな空間であって、僕らはスマホタブレットで享受するだけ、
提供元がどんなシステムで動いているかは知らなくてもいいからだ。
 
そんな事情がある一方で、2045年にはAIが人類の知性を凌駕すると言われている。
いわゆるシンギュラリティ。
2038年にIT技術者があたふたする一方で、着々とAIの方はバーチャルな空間で進化を続ける。
それってどういう世界なんだろうなと。
どこか滑稽だ、というか皮肉だ。
 
これが逆なら、AIが人類を追い越してその後2038年問題のような時限爆弾が一斉に炸裂して
狂ったAIが暴走する、なんてストーリーが考えらるけど。
 
---
余談として。
全国各地の空き家が問題になっているのと同じように、
今後は適切に管理されず野放しになった野良システムが問題になってくると思う。
ほったらかしになったまま動いている。それをハッカーが乗っ取る、など。
 
企業が運営するシステムはサーバやネットワークが物理的に存在するものであれ仮想のものであれ、
コストが発生するので野放しにはならないだろうけど、
個人がつくったシステムであるとか、大学の研究室やサークルでつくったシステムが
きちんと管理されず忘れ去られてるということは結構あるんじゃないか。
その多くは無害なものだろうけど、2038年問題で意外な影響をもたらすのは
そういう野良システムなんじゃないかと。