Google で「エラー忘却型コンピューティング」という技術が用いられていると言う話。
Radium Software : Failure-Obliviousness in Google より
プログラミング言語 Sawzall は Google 社内において開発されたデータ処理言語の一種である。その設計は同社の基盤技術である GFS [Ghemawat] や MapReduce [Dean] に合わせて特化されており,処理の並列性に関して非常に高いスケーラビリティを実現している。そのデータ処理言語としての利便性は非常に高く,今や Google 社内において最も広く用いられている言語の一つとなっている(ただし,ウェブサーチのインデクス生成には C++ コードが用いられているとのことなので,それ以外のアプリケーションに広く用いられているものと推察される)。
興味深いことに, Sawzall はエラー忘却型コンピューティング (failure-oblivious computing) [Rinard] の手法を採り入れている。エラー忘却型コンピューティングとは,プログラムの実行中に発生したエラーを「無かったこと」にすることによってシステムの頑健性を高めるという手法である。やや乱暴な手法ではあるが,バッファーオーバーランなどを悪用した攻撃に対して高い耐性を発揮することが確かめられている。
7~8年前だったかな?某Win32システム開発の仕事で、一部のモジュールを外注に出していました。しかし納品されたそのモジュールはとても品質が悪く、誤動作や不正落ちが多発。調べてみると明らかに未初期化変数やバッファオーバーランが原因くさい。
しかしシステム全体の納期も過ぎていてもう直している時間も無い。徹夜も続いていたのでチームの体力も限界。
その時は結局上司の判断によって、「今回そのモジュールはDebug ビルドのまま十分テストしてリリースすることにしよう」ということになりましたが、非常に心苦しかった思い出があります。
(注:Debug ビルドでは未初期化変数は不定値ではなく 0 で初期化されているため、0もしくはNULLチェックさえ行っていれば問題は発生しにくくなります)
この「エラー忘却コンピューティング」という技術自体は興味深いし、十分ソフトウェア自身の品質を追求した上でさらにフェイルセーフを担保するためのものだということは分かるんだけど、高橋さんの書いていらっしゃる通り諸刃の剣ではあると思う。
いざと言うときに誘惑に負け、頼ってしまいそうで怖い。