【OS開発よもやま話】名が体を表しているとは限らない
以前、「命名規則からは例外をなくせ」という記事を書きました。
優秀なエンジニアほど、命名に気を遣います。
命名をするときに念頭に置くべきことは、以下の 3 つです。
定義を明確にする
命名規則があれば、それに従う
名が体を表す名前にする
意外と (3) が疎かになっていることがあります。
《デバイス間のデータコピーを禁止せよ》
当時、とある専用機向けの OS を開発していました。
その専用機には、記憶デバイスを挿入するスロットがあり、
という要求がありました。
ファイルシステムは独自のもので、簡単にファイルを抜き出すことはできません。しかし、ファイルシステムを丸ごと抜き取られると、簡単にコピーできてしまいます。
◎デバイスごとに暗号化鍵を変える
対策としては非常にシンプルで、デバイスごとに異なる鍵で暗号化すればいいのです。問題は、何を暗号化鍵にするかです。
ハードウェアマニュアルを見ると、その記憶デバイスには「CARD ID」という固有の ID があり、ソフトウェア側で利用可能でありことが分かりました。
問題は、あっさり解決しました。
テストも通り、製品は発売されました。
《市場での不具合発生》
エンジニアが最も恐れるのは、市場流通後の不具合です。
しかも、怖いのはサポートセンターへの問い合わせではなく「噂話」による伝聞です。既にユーザー間で情報が出回ってしまっているわけなので。
そのときも
「どうやら、デバイス間でのコピーができてしまっているらしい」
という噂が流れてきました。
◎メーカーへ問い合わせ
ソースコードを確認しても、テストをしても問題はありません。
私たちは、記憶デバイスを製造しているメーカーへ問い合わせました。
・・・○| ̄|_
「CARD ID」の方が、デバイス固有の ID だと思うじゃん!
まぁ、ちゃんと調べなかったこちらが悪いんですが。。。
テストで使用していたデバイスは、たまたま製造メーカーが異なっていたために合格してしまっていただけでした。
テスト実施者が常に同じ人だったのも、今回はマイナスに働いてしまいました。
反省すると同時に、
「このような命名をしてはいけない」と心に誓うのでした。