見出し画像

【OS開発よもやま話】名が体を表しているとは限らない

以前、「命名規則からは例外をなくせ」という記事を書きました。

優秀なエンジニアほど、命名に気を遣います。
命名をするときに念頭に置くべきことは、以下の 3 つです。

  1. 定義を明確にする

  2. 命名規則があれば、それに従う

  3. 名が体を表す名前にする

意外と (3) が疎かになっていることがあります。





《デバイス間のデータコピーを禁止せよ》

当時、とある専用機向けの OS を開発していました。
その専用機には、記憶デバイスを挿入するスロットがあり、

デバイス間のデータコピーを禁止する

という要求がありました。

ファイルシステムは独自のもので、簡単にファイルを抜き出すことはできません。しかし、ファイルシステムを丸ごと抜き取られると、簡単にコピーできてしまいます。

画像はイメージです


◎デバイスごとに暗号化鍵を変える

対策としては非常にシンプルで、デバイスごとに異なる鍵で暗号化すればいいのです。問題は、何を暗号化鍵にするかです。

ハードウェアマニュアルを見ると、その記憶デバイスには「CARD ID」という固有の ID があり、ソフトウェア側で利用可能でありことが分かりました。

問題は、あっさり解決しました。
テストも通り、製品は発売されました。


《市場での不具合発生》

エンジニアが最も恐れるのは、市場流通後の不具合です。
しかも、怖いのはサポートセンターへの問い合わせではなく「噂話」による伝聞です。既にユーザー間で情報が出回ってしまっているわけなので。

そのときも
「どうやら、デバイス間でのコピーができてしまっているらしい」
という噂が流れてきました。

素材提供:Adobe Stock


◎メーカーへ問い合わせ

ソースコードを確認しても、テストをしても問題はありません。
私たちは、記憶デバイスを製造しているメーカーへ問い合わせました。

「CARD ID」は、製造メーカーを識別する ID になります。
デバイス固有の ID をご使用したい場合は「CARD NUMBER」の方をお使いください。

・・・○| ̄|_

「CARD ID」の方が、デバイス固有の ID だと思うじゃん!
まぁ、ちゃんと調べなかったこちらが悪いんですが。。。

テストで使用していたデバイスは、たまたま製造メーカーが異なっていたために合格してしまっていただけでした。
テスト実施者が常に同じ人だったのも、今回はマイナスに働いてしまいました。

素材提供:Adobe Stock

反省すると同時に、
「このような命名をしてはいけない」と心に誓うのでした。



いいなと思ったら応援しよう!