メインコンテンツへスキップ
カテゴリ: 法則
タイプ: ネットワーク/システム相互運用の原則
起源: Jon Postel; TCP 仕様(例:RFC 793, 1981
別名: 堅牢性の原則(Robustness principle)
先に答えるとポステルの法則(Postel’s Law)は堅牢性の原則:送るものは保守的に、受け取るものは寛容に(文書によって表現はやや異なる)。初期のインターネットプロトコルが不完全な実装同士でもつながるのを助けた。今日も設計のヒューリスティックだが、寛容さがバグを固定し攻撃面を広げうるため議論もある。

ポステルの法則とは

ポステルの法則(Postel’s Law)は、プロトコル実装への指針:送出バイト列は仕様に厳密に従い、意味が復元できるなら入力の解釈は寛容にという組合せです。仕様が成熟途上でピアが異なる時代の相互運用を狙います。コンウェイの法則(システムがコミュニケーション構造を映す——別軸)と並べ、ブルックスの法則(人を増やすと調整コストが増える——直交だが出荷制約に効く)とも対照になります。マーフィーの法則とは違い、ポステルは規範的です。

3つの深さで見る

  • 入門: 古いクライアントは奇妙な空白を送る。サーバは違法フレームは拒否しつつ、無害な揺らぎは正規化しうる。
  • 実践: 出力は正準形で符号化。入力は許可リストで検証し、異常をログし、挙動を明示的にバージョン管理する。
  • 上級: 寛容さをセキュリティ予算として扱う。寛容な受け入れが相互運用バグを生態系に固定する、という現代的分析がある。

起源

Jon Postel が初期 TCP/IP 作業で堅牢性を実装戦略として述べました。広く引用される表現は RFC 793Transmission Control Protocol, 1981年9月)に見え、TCP 実装に堅牢性を求めます。厳密な生成意味が保たれる範囲の寛容な消費の組は、その後のプロトコル・パーサ・API の語彙になっています。

要点

相互運用を最大化し、その後で寛容さが安全を損なう場所を測る。
1

相互運用が先

異なるベンダーと部分導入では、寛容な受信側がネットを使えるようにした。
2

出力の正準化

「保守的送信」は複雑さをテストされたエンコーダに集約する。
3

寛容な受け入れには境界が要る

スキーマ、ファジング、監視なしでは、寛容なパーサが脆弱性の温床になりうる。
4

生態系効果が支配する

多くのピアが癖に依存すると、修正は協調変更が要る——バグごとの互換圧力。

応用場面

現代の API とプラットフォーム設計に写像する。

プロトコルとパーサ

JSON や protobuf は厳密に送出。受信は曖昧や過大な入力を早めに拒否する検証層で。

Web フロント

保存時に入力を正規化。レンダリングでは依然エスケープ——寛容な UX は SQL インジェクション赦免ではない。

協業規範

外向きの約束は精密に。更新の言い回しには、合意した基準の中で善意の揺らぎを許す。

後方互換

API を明示的にバージョン管理。黙って永遠に癖を抱えるのではなく、廃止スケジュールを公開する。

事例

制度的アンカーはテキストである:RFC 793(1981)が、ベンダーをまたぐ TCP 実装に堅牢性を課す——RFC 番号と年という外部引用可能な標準であり、研究室指標ではない。その後の工学議論(2000–2020年代ACM Queue / Communications of the ACM など)は、寛容な受け入れが相互運用バグを固定したかを再検討する——論点が「つながるか」から「寛容がデフォルトのとき不変量は守れるか」へ移った指標になる。

限界と失敗パターン

限界1:セキュリティが単純な寛容を壊す
攻撃者は、パーサが意図を推測する地点に曖昧な入力を作る。
限界2:標準は成熟した
現代のプロトコルは、黙って修復より明示的失敗を好むことが多い。
典型の誤用: テレメトリなしの無限寛容——癖が消せないレガシーになる。

よくある誤解

実際: 寛容なパースでも違法状態は拒否する。善意は安全と仕様の意図で縛られる。
実際: 保守的送信は規律ある検証と組になることが多い(構文と意味の層)。
実際: トレードオフは進化したが、相互運用が要る所には残る。

関連概念

コンウェイの法則

システム形はコミュニケーション形に従う——「互換」の意味は協調で決まる。

ブルックスの法則

人を増やすとコミュニケーションが増える——レガシー癖の修正にも時間がかかる。

マーフィーの法則

起こりうることは起きる——検証をそれに合わせる。

一言で言うと

送出は正準形。受信は明示的な限界と指標付きで検証する——無限の推測ではない。