20年以上前の話になります。
当時関わっていたある育成ゲームの開発で、「これは明らかにバグだ」と分かっていながら、一度は“仕様として存置しよう”という判断になりかけた不具合がありました。
0x7fffffff秒後の成長
そのゲームは、リアルタイムで時間が経過するタイプの育成ゲームでした。
問題の不具合は、0x7fffffff秒(約68年)経過した時点で、本来とは異なる成長をしてしまうというものです。
この数字にピンと来る方もいるかもしれません。
原因はシンプルで、32bit符号付き整数の扱いを誤っていたことでした。
今で言えば完全に
「Unixの2038年問題を、自分の手で再現してしまった」
というやつです。
気づいたのは、マスターROM作成“直後”
この不具合に気づいたのは、マスターROMを作成した直後でした。
ソースコードを見返していて、「あ、これまずいな」と思った訳です。
ただし当時の判断としては、
- 68年後に発生する
- 現実的に誰も到達しない
- 今すぐ致命的な不具合ではない
という理由から、「今回は仕様として残そうか」という空気が、一度は流れました。
今振り返ると、かなりモヤモヤする判断です。
たまたま救われた「ついで修正」
ところが、別のもっとクリティカルな不具合が見つかりました。
そちらはどうしても修正が必要で、ROMを切り直すことになったんですね。
その流れで、
どうせ修正するなら、あれも一緒に直そう
となり、結果的にこの不具合も修正されました。
もしこの偶然がなければ、そのバグはおそらく
- ゲーム本体よりも
- プラットフォームよりも
- そして作った本人である私よりも
長生きしていた可能性があります。
バグは、人より長く生きることがある
この話で改めて思うのは、ソフトウェアのバグは、人の寿命や想定を軽々と超えて残ることがある、ということです。
「起きないから大丈夫」
「今は問題にならないから後回し」
そう判断された不具合が、何十年も後に掘り起こされることは、決して考えられない事ではありません。
それでも、少しだけ前向きな話を
もっとも、今所属している辰巳電子工業株式会社の製品には、発売から40年以上経った今でも話題にしていただいているもの(TX-1など)があります。
そう考えると、
- 私がそこそこ長生きできて
- さらに運が良ければ
「あの修正、ちゃんと効いてたな」と確認できる日が来るかもしれません。
ソフトウェアは、人の手を離れたあとも、思った以上に長く生き続けます。
「今の判断が、未来でどう見えるか」を少しだけ想像しながら、コードと向き合っていきたいものですね。
――以上、仕様として残りかけたバグの昔話でした。
おわりに
X(旧Twitter)やBlueskyを中心に日々発信しております。
ご興味をお持ちいただけましたら、ぜひ弊社Webサイトや私のXもご覧いただけますと幸甚でございます。
https://www.tatsu-mi-systemsolution.jp/
https://x.com/itchie_tatsumi
https://bsky.app/profile/itchie-tatsumi.bsky.social