1. 連鎖するバグ
◇ 1. 連鎖するバグ
この世に不可能はない。どこで聞いた言葉だったか。昨日ぶらりと立ち寄った書店に、平積みになった新書の売り込みフレーズがそんなだったか。曰く。この世に不可能はなく、あなたは変われる。壺を買い大宇宙のサイキック・ジェネシスを受け入れさえすれば。
あるいは、10年ほど前に通っていた中等学校の体育教師が、そんな言葉を好んでいた気はする。
長距離走で息の切れた女生徒を、木剣で叩いて走らせるのを生きがいにしていた。
強制わいせつの不祥事で捕まったとかなんとか、この前の同窓会で話題になっていた気はする。ともあれ。
この世に不可能はない。誰が言っていたとしても不思議はない、陳腐な言葉ではある。
たしかに何でも思う通りになれば、と思うことはある。眼前に蛇の巣のようにのたうち回るソースコード。
ところどころ文字がかすれ、イレイザーのゴムが鼠の糞のように張り付いた設計書。これをあるべき正しい姿に直すことは不可能ではない。時間さえあれば。
ふう、と息を吐いて柱時計を見やる。夜の3時過ぎ。締切は今日の昼までだ。それまでに、最低限、稼働可能な状態にまで持っていかないといけない。多少の不具合を口八丁で誤魔化すのは慣れたものだが、そもそも動かないことは誤魔化しきれるものではない。脳の腐ったクライアント―接待と賄賂とこちらの若い女性担当を食うことにしか興味がない―そんな輩が相手だとしても。
この世に不可能はない。学生時代には純粋に信じていたようにも思う。学校を卒業し、ずいぶん遠くまで来た気もするが、刹那のことだったようにも思える。社会に出て思い知ったのは、己の限界と、そして世界の汚さばかりだが。どちらにも慣れて、いや、麻痺してきてしまった。もうあまり興味はない。
徹夜組はまだ何人か残っていたはずだが、周囲を見渡せば机に突っ伏している者、一心不乱に紙と格闘している者、だれも他人のことを気にしている余裕はなさそうだった。
デスクの引き出しから紙巻煙草を一本取り出し、マッチの火をこすりつける。紫煙がぷかぷかと、石造りの天井にのぼっていく。いつもは屋外に出て吸っているのだが、流石に真冬の深夜に外の空気に身をさらすのは気遅れした。設計室で吸っているのがばれると、後あと室長にうるさく言われるのだが、幸いホウレンソウが大好きな若手はみんな寝潰れている。
……と思っていたが。
「あれー、主任……?ひょっとして、また吸ってます?」
横合いから声をかけられ、やれやれという心地でそちらを向く。
相手は机に上半身をべったりつけ、半分眠っているような様子だった。
寝癖でくしゃくしゃになった栗色の毛を払い、半分閉じた眼をこすりながら、
鉛筆の先で不満げにこちらを指してくる。
「ばれたか。まぁ、ちょっとした気分転換だよ。内緒にしておいてくれるとありがたい」
「だめですよー。あとで室長に報告しますー。まったく、主任はそんなだから、奥さんも、ふぁぁぁ、できないんです、よー……すぴー。」
こちらを糾弾している最中に眠ってしまった。能力的にはエースクラスの優秀な魔術技師だったが、徹夜作業にはまだ慣れていないらしい。
さて、と気を取り直し、新しい紙に文字を走らせる。光媒質を含有した鉛筆が、紫に輝く文字を紙の上に描いていく。書いている最中に考えることはあまりない。頭の中で既に出来上がっているものをどう表現するか、それは手と感性に任せれば済んだ。その結果として形になるのが、先ほどの、のたうち回ったゴミコードだが、たまに綺麗にまとまることもある。どのような経験や工夫があろうと、最後は運任せにはなる。
気にすることはない。出来るまで続けるしかないのだ。この世に不可能がないならば、何であれいずれは完成する。
◇
8時間が経った。締切まで残すところ、あと1時間。広がっている光景はいつもの通りの修羅場だった。
「畜生誰だ俺のコードを勝手に変えたやつはっ!?」
「くそっ!くそっ!くそっ!動け動け動け!!」
「カリカリカリカリカリ……」
(やれやれ。)
徹夜明けでアドレナリンを全開にしている同僚を脇目に、最後の調整を入れていく。
「た、たすけてください主任。どうやっても動かないんです!」
「ちょっと見せてみ。……496行目だ。」
「えっ!?あっ!み、見落としてました。ありがとうございますっ!」
「主任ー、こっちもだずけてぐだざいぃぃぃー」
「……君は助けるまでもないだろ?」
「ぞんなごとないでずぅ、もうむりですぅうぅ」
「ちょっと落ち着こう。深呼吸して。大丈夫、君なら出来る、君なら出来る、君なら出来る」
「あっ、ああっ。なんか出来るような気がしてきました!ありがとうございますー!」
たまに部下が泣きついてくるのを、適当にあしらいつつ。
「主任、A級の不具合が残り3件。進行不能系は一通り片づけました。もう少しでそちらを手伝えそうです」
「ご苦労。俺のところもあと少しで片付くから、終わったらコルのところを見てやってくれ。」
「了解しました」
「主任、プロセスA-5986で停止します。原因はおそらくコルのコードと思われますが」
「あぁ、それはクラウに見てもらってる。もう少しで片付くはずだ。」
「分かりました。直ったらこちらまで連絡貰えますか?」
「了解。後でクラウを行かせるよ」
「主任ーっ!新しい不具合見つけちゃいましたーっ!」
「ヤバイ系?」
「すんごいヤバいですー。256年に一度クラッシュしますーっ!」
「……そんなに長く保守しないだろ。放置。」
「もう一つは256分に一度クラッシュしますー」
「今回のプレゼンは45分で終わるから、それも放置。45分以内に発生しそうな不具合を優先してくれるとありがたい」
「りょーかいしました!」
「すみません、主任。コルのコードですが、領域の未初期化が多すぎます。時間内にすべて修正するのは困難と思われます。」
「そうか・・・。たしかコルの担当はプロセスA-5950から9000だったな。洗える不具合は洗って、発生条件をエミリーに伝えてくれ。条件を確定してプレゼン手順を修正する。」
「了解しました。」
ここまでくれば、やるべきことは大体ルーチンワークだ。潰せるリスクは潰し、潰せない不具合には回避を考える。修正がマストな問題にはエースを投入し、それでも駄目なら諦める。
「主任、エミリーからの最終チェック・レポートです。」
「きたか。どれ。」
「A級不具合30件、B級200件、C以下700件。A級の発生条件は全て判明しています。」
「なるほど、これならプレゼン手順の修正で対応可能だな。ありがとう」
「いえ。」
笑顔を返しても、反応は薄い。俺の経験でしかないが、魔術技師というのは優秀になればなるほど感情が少なくなる。とはいえ、まったく無いわけでもない。若い技師の目を閉じた表情からは、疲労と、少しの安堵が伺える。収束の予感の甘美な香り。どんなベテラン技師でも抗えない。さて。そろそろ区切りか。
「みんな!最終チェックが終了した!各自対応中の案件はレポートにまとめて今日中に俺まで提出してくれ。レポート書けたら帰っていいぞ!」
終わりを告げる。歓声をあげる者。安堵の溜息をつく者。疲れ果てて崩れ落ちる者。反応は様々だが。
ひとまず、今日のリリース作業はこれで終了した。あとは俺が室長に怒られてくれば、一見落着というところか。このところ怒涛のような忙しさだったが、来週には休みがとれそうではある。休暇を思えば、室長の皮肉や罵声も、苦ではない。
◇
「まったく。もう少し、不具合を減らせんのかね?毎回毎回ギリギリまで修正しなければ式の一つも上げられんとは。ここには国の最エリートを集めているはずなんだがな?」
「努力はしていますよ。」
「そうだろうとも!そうでなければとっくにクビにしている。まぁいい、君、もう下がりたまえ。」
「はい。」
純金製のドアノブを回し、ごてごてとした装飾が施された扉を静かに閉める。
報告に30分。皮肉と罵声が2時間半。計3時間。今日はまだ短かった方だな、と思う。
前任者はたしか室長の小言に耐え切れず、抑うつになって退職したとは聞いている。際限なく何時間でも相手の欠点を指摘できるのは、優れた能力であり、国営企業の管理職にはうってつけの素質なのかもしれなかった。正直あまり関わり合いたい手合いではないが、これも仕事ではあるので、仕方ない。
(やれやれ)
胸中で溜息をつく。部下が標的になって辞めていくよりマシとはいえ、無意味な針のムシロに立たされるのは、いまだに慣れない。今のポジションが自分に向いていないのは自覚していた。もともと自分は生粋の技師で、あまり人と関わるのは得意ではない。会話をするよりコードを書いていた方が生産的という学生じみた理想を、人に話すことはないが、胸中では未だに信じている。孤独に一人でコードを書き続ける。それがコーダーというものであり、人ではなく、世界とコードで語り続ける、魔術師のあるべき姿だ。
その本来の姿から何歩も腐敗した地点が現実となるのは、ひとえに営利組織で利益を上げなければならず、そして組織とは人との繋がりで出来たもので、そして人とは多かれ少なかれ腐敗するものだからだが。
つまるところ極論すれば、問題は人がいるからだとは言える。他人さえいなければこの世はもう少しシンプルではあったろう。
「あれー、主任?報告終わったんですかー?」
煙草でも吸いにいこうと屋上への階段に差し掛かったところで、部下に声をかけられた。
くせっ気のある栗色の髪に、丸いメガネ。寝ぐせは直したようだった。疲れで薄く青みがかったまぶたの上に、水色の瞳がくりくりと、好奇心と少しの悪意を輝かせている。アティーティア・ランガージュ。2年前からこの研究所で働いている若手の魔術技師。能力は優秀だが、性格に問題あり。
たしか、大学を飛び級していたはずだ。実のところ問題児というより、情緒面がまだ年相応の小娘というだけなのだろう。能力はあるが未熟な天才。
「あぁ、アティか。どうせ君のことだから、俺が室長にどんな小言を言われてたか興味津々なんだろうが。徹夜明けなので少し休ませてもらえるとありがたい。」
「そうじゃないですよー。今日の不具合の件で報告ですー。」
「不具合……?君が昼に見つけた、256年経つとどうたらっていう、アレか?」
「ですです。なんか変だなーって思って、少し調べてみたんですよー。そしたら」
「どれ?」
アティが手渡してきた報告書を眺める。記載されていたのは問題のコードと、魔術式の展開中の状態値が細かく記載された、つまりは平凡なクラッシュレポートだったが。
(あれ……?)
妙な違和感を覚える。どうせ変数サイズを誤ったなどのケアレス・ミスだろうと思っていたが、コード自体には何の問題もないように見える。不具合の多くは、一見して問題ないように見えるのが通例とはいえ、他人が書いたコードの不具合は経験上すぐに分かるものだったが。
「問題ないコードのように見えるな。」
「そですねー。私もそっちは問題ないと思いますー。」
「てことはデータか?」
状態値を細かく見ていく。1行に16個の記号が羅列された、数千行にもなるデータ。見るべき個所は限定されているとはいえ、これをぱっと見るだけで問題を検出するのは、才能が必要だった。
「すまない……どこだろう?」
「分かりませんかー?」
ああ、と素直に頷く。天才を相手に見栄を張っても仕方ない。
「つまりここがここで、こうでー。そうするとこうなってー……」
「いや、待った待った。それならここは、こうなってたはずだから、こうで……」
「ちがいますちがいますー。それは154ステップ前で、ここでこうなってるからー。」
「あー、そうか。それでそこが、そうなって……くそ、なんだこれは。」
「わたしに言われてもー。」
◇
アティの説明は15分の簡潔なものだった。自分で再検証するのに、1時間かかった。
原因は領域破壊というありふれた、そして難度の高い不具合だった。
実行中のコード自体には問題ないが、別のコードが突然正常な領域を破壊する。
結果として、エラーが起きたコードと問題を起こしているコードがまったく別になる。
他人が勝手に自分の家の物を壊したが、誰が壊したかを特定するのは困難を極める。
本来、発見には犯人捜査にも近い長時間の確認作業を必要とする、技師が忌み嫌う不具合の一つだ。
今回のそれはさらに輪をかけて厄介で、破壊が連鎖していく。AのコードがBを壊し、BのコードがCを壊し、CのコードがDを壊していく。
破壊されない限りは正常なコードだから、一見するだけでは分からない。
元の破壊者まで辿らなければ発見できない。そしてその大本の破壊者が難物だった。
「ヨーツン社のライブラリーか」
「はい。基幹システムに利用しています。先方の不具合報告の中に、本件は含まれていませんでした。」
エミリーが百科事典のようなレポートを片手に、淀みなく流暢に答える。
普通ならこちらから不具合報告を出して、相手に直して貰えばいいだけの話だったが。
「大本の破壊コードは、256年周期、次のターゲット・コードの不具合が、256週周期、その次が256日、その次が256時間、最後が256分。これは一体、何なんだろうな?」
「ヨーツン社の技師が遊び半分で仕込んだ、という話だったら分かりますが……」
いつもは淡々としているクラウが珍しく語尾を濁した。
(この世に不可能はない……か)
暗鬱した心地で、言葉を転がす。可能性。不可能性。
そう、大本以外は全てこちらの研究所で書かれたコードだった。普通ならば、こうも多段階でバグが連鎖することは起こりえない。
「陰謀論を信じたくはありませんが。しかしただの偶然とは思えません……」
クラウが頭を振りつつぼやく。
今回問題を発見できたのは、ひとえにアティの、天真爛漫な例外的天才ゆえだった。
いつも他人のコードに興味を示さない彼女が面白がって担当範囲外の問題を追跡してくれたのは奇跡に近く、また彼女のような技師がチームにいることも奇跡に近い。そして奇跡が無ければまず発見できない。
開発で他者の悪意を疑うのは、経験則としてはありがちな愚行だ。しかし。
(こちらのコードを知ったうえで仕込まなければ、まず起こせないバグだ。内部に共犯者がいるか、あるいは……?)
もちろんただの偶然だという可能性はゼロではない。ただ、限りなくゼロではある。
単なる技術的な問題ではなくなってきている。苦い空気を噛みしめ、悪い可能性と妥当な可能性の二面を想定する。
「クラウ、アティと協力して不具合を無効化できないか試してもらえるか?何ならリバース・エンジニアリングをかけてもいい。」
「了解しました。」
「エミリー、ヨーツン社への報告はひとまず控えてくれ。あとは俺の方で所内の別チームに探りを入れてみる。余計な疑いを持つべきじゃないが、万が一ってこともあるからな。」
「分かったわ。」
エミリーが頷く。
ふと、窓を見やる。夕刻のオレンジ色の空に薄暗い雨雲が立ち込めてきていた。