ロバストネス原則

ロバストネス原則（ロバストネスげんそく、robustness principle）または堅牢性原則（けんろうせいげんそく）とは、ソフトウェアの設計指針の一つで、「貴方が自分ですることに関しては厳密に、貴方が他人から受けることに関しては寛容に」(be conservative in what you do, be liberal in what you accept from others)というものである。これは「送信するものに関しては厳密に、受信するものに関しては寛容に」(be conservative in what you send, be liberal in what you accept)とも言い換えられる。この原則は、TCPの初期仕様でこのことを主張したジョン・ポステルにちなんでポステルの法則(Postel's law)とも呼ばれる。

これは、他の装置（または同じ装置上の他のプログラム）との間でメッセージをやり取りする場合、送信側は仕様に完全に準拠すべきであるが、受信側は、メッセージの意味が明確である限り、仕様に非準拠であってもそれを受け入れるべきであるということである。

解釈 
1989年の RFC 1122 では、ロバストネス原則を発展させて、プログラマに対し「ネットワークには、考え得る限り最悪の効果をもたらすように設計されたパケットを送ってくる悪意のある組織が存在すると仮定する」(assume that the network is filled with malevolent entities that will send in packets designed to have the worst possible effect)よう推奨している。

プロトコルは、将来のバージョンのプロトコルで既存のフィールドに新しいコードを追加できるように、未知のコードを持ったメッセージを受け入れられる（少なくとも、そのようなメッセージを受け取ったというログを取る）ようにするべきである。プログラマはプログラムを設計する際に、受信側の欠陥をあらわにしてしまう可能性のあるような「プロトコルには書かれているが不明瞭な機能」を持ったメッセージの送信を避け、「仕様に従わない他のホストを生き残らせるのではなく、そのようなホストが通信設備に与える混乱を少なくするために協力する」ようにするべきである。

批判 
は2001年に、新しいアプリケーションプロトコルの設計にポステルの法則を適用した場合の問題点を指摘した。仕様に適合しないメッセージを送信する欠陥のある実装は、当初は仕様からの逸脱を許容する実装のみで使用されたとしても、その数年後には、そのメッセージを拒否するような許容度の低い実装と接続される可能性がある。この場合、問題を特定するのが難しくなり、解決策が判明しても、その導入にコストがかかる。そこでローズは、「実装上のオーバーヘッドが発生してでも、プロトコルで明示的に一貫性をチェックする」べきであると主張した。

マーティン・トムソンは、2015年から2018年にかけて執筆したインターネットドラフトの中で、ロバストネス原則は、実際にはセキュリティを含むロバストネスの「欠如」につながると主張した。

2018年のFlorentin RochetとOlivier Pereiraによるに関する論文で、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.

コンピュータの文化
インターネット標準