ロバストネス原則(堅牢性原則)とは
ロバストネス原則(または堅牢性原則)は、
ソフトウェア設計における基本的な指針の一つです。この原則は、「自分が送信するものに関しては厳密に、他者から受け取るものに関しては寛容に」という考え方を基盤としています。これは、データ通信において、送信側は定められた仕様に厳密に従うべきであり、受信側は意味が明確である限り、多少の仕様からの逸脱があっても受け入れるべきであるということを意味します。この原則は、TCPプロトコルの初期仕様を提唱した
ジョン・ポステルにちなみ、「ポステルの法則」とも呼ばれています。
原則の解釈
1989年に発表されたRFC 1122では、ロバストネス原則をさらに発展させ、プログラマーに対して、ネットワークは悪意を持ったエンティティで溢れており、最悪の影響をもたらすように設計されたパケットが送信される可能性があると想定するように推奨しています。プロトコルは、将来のバージョンで既存のフィールドに新しいコードを追加できるように、未知のコードを持ったメッセージを受け入れるように設計されるべきです。また、プログラマーは、受信側の欠陥を露呈させる可能性のあるような曖昧な機能を持ったメッセージの送信を避け、仕様に従わないホストの混乱を最小限に抑えるように協力すべきであるとされています。
ロバストネス原則に対する批判
しかし、この原則には批判も存在します。マーシャル・ローズは2001年に、新しいアプリケーションプロトコルの設計にロバストネス原則を適用した場合の問題点を指摘しました。仕様に適合しないメッセージを送信する欠陥のある実装は、当初は仕様からの逸脱を許容する実装のみで使用されていたとしても、数年後には、より厳密な実装と接続される可能性があります。その場合、問題の特定が困難になり、解決策を導入するコストも高くなります。そのためローズは、プロトコル内で明示的に一貫性をチェックするべきだと主張しました。
また、マーティン・トムソンは2015年から2018年にかけて、ロバストネス原則は実際にはセキュリティを含むロバストネスの欠如につながる可能性があると主張しました。
具体例
プライバシー強化技術に関する論文では、
Torのルーティングプロトコルがロバストネス原則を適用していることを利用して、
Torクライアントの匿名性を破る方法が示されました。この事例は、ロバストネス原則が必ずしもセキュリティの向上に繋がらないことを示唆しています。
まとめ
ロバストネス原則は、
ソフトウェアの相互運用性を高める上で重要な原則です。しかし、この原則を適用する際には、セキュリティや将来の拡張性、互換性などを考慮する必要があります。原則を盲目的に適用するのではなく、状況に応じて柔軟に対応することが重要です。
関連用語
ロバストネス (コンピュータ): システムの堅牢性や耐障害性を指す
UNIX哲学: シンプルで小さく、明確な目的を持つプログラムを組み合わせるという考え方
リスコフの置換原則: オブジェクト指向プログラミングにおける継承の原則の一つ
Static discipline: 静的型付けや静的解析など、コンパイル時にチェックする手法
参考文献
History of the (Internet) Robustness Principle (Nick Gall, May 2005)
Internet Protocol, page 22; J. Postel, IEN 111, August 1979.