Postel's Law and Robustness
"Be conservative in what you do, be liberal in what you accept from others." — Jon Postel, RFC 793 (1981). 1년의 robustness 원칙. Protocol의 수명은 사용자가 예외를 어떻게 처리하느냐에 달려 있다. 그러나 modern view는 이걸 조건부로 본다 — bug propagation의 trap이 발견됐기 때문. 이 trap을 알면 학내 marketplace의 robustness 정책을 layer별로 다르게 design할 수 있다.
1. 철학
Jon Postel이 1981년 RFC 793 (TCP)에서 한 줄로 박은 robustness principle:
"Be conservative in what you do, be liberal in what you accept from others."
보낼 때 엄격, 받을 때 관대. 이 원칙은 분산 시스템에서 protocol이 진화하면서도 호환성을 유지하는 mechanism이다.
왜 작동하는가:
- 사람들은 spec을 정확히 따르지 않는다. 미세한 deviation은 항상 발생한다.
- receiver가 엄격하면 → 첫 deviation에서 protocol이 깨진다.
- receiver가 관대하면 → 미세 deviation을 흡수해서 protocol이 살아남는다.
핵심 thesis 한 줄:
Protocol의 수명은 receiver의 관대함에서 나온다. sender의 정확성에서 오는 게 아니다.
이게 worse-is-better + standardization-political-economy와 합쳐지는 마지막 축이다. 단순한 spec (Worse is Better) + 사용자가 만드는 권력 (de facto) + 관대한 receiver (Postel's Law) = 살아남는 표준.
2. 추상 작동 구조
Postel's Law가 작동하는 mechanism
핵심 — 다양성을 흡수하는 receiver만이 ecosystem을 키운다. 이게 bus가 아니라 funnel. 다양한 입력을 한 출력으로 모아준다.
Layer별 다른 robustness 정책
한 protocol에서도 layer마다 robustness 정책이 다르다. transport는 엄격해야 보안/정확성이 보장된다. content는 관대해야 비개발자가 진입한다. 이게 layer 분리 (protocol-theory-lamport-tanenbaum)의 직접적 적용.
3. 약점
Postel's Law도 trap이 있다. 이건 modern view에서 발견된 가장 중요한 critique.
Trap 1 — Bug propagation
Martin Thomson이 RFC에서 박은 critique: liberal receiver가 sender의 bug를 영구화시킨다.
mechanism:
- sender가 잘못된 message를 보냄
- receiver가 관대해서 그냥 받아줌
- sender는 자기 bug를 모름. 고칠 이유가 없음
- 결과: bug가 영원히 살아남음
가장 큰 사례 — HTML의 quirks mode. 깨진 HTML이 30년 동안 살아 있다. browser들이 너무 관대해서 누구도 자기 HTML을 고치지 않음.
Trap 2 — 보안 취약점
liberal receiver는 예측 불가능한 행동을 한다. 어떤 deviation을 tolerate할지 spec에 없으면 — attacker가 그 ambiguity를 활용한다.
사례:
- HTTP request smuggling — proxy와 server가 다르게 관대함 → 공격 표면
- XML external entity injection — XML parser가 너무 관대 → 보안 침해
- Email header injection — RFC를 liberal하게 해석한 결과
Trap 3 — Spec과 현실의 분기
liberal receiver가 너무 관대해지면 — 실제 구현이 spec과 점점 멀어진다. 새 구현자가 spec만 보고 만들면 작동 안 함. spec은 허구가 되고 실제는 구두 전승.
Trap 4 — Robustness 의무가 receiver에만 떠넘겨짐
sender는 대충 만들어도 됨. receiver만 정교해야 함. 비대칭이 receiver의 부담을 폭증시킨다. 이게 ecosystem 후반부에 receiver 부족 현상을 만든다.
4. 대안 흐름
Robustness 정책의 4 모델
| 모델 | sender | receiver | 결과 |
|---|---|---|---|
| Strict-Strict | 엄격 | 엄격 | fragile. 작은 deviation에도 깨짐 |
| Liberal-Liberal | 관대 | 관대 | chaos. 무엇이 표준인지 알 수 없음 |
| Strict sender + Liberal receiver (Postel) | 엄격 | 관대 | 진화 가능. trap들 있음 |
| Strict sender + Standardized liberal receiver (modern view) | 엄격 | 정의된 관대함 | 진화 + 보안 둘 다 |
Modern view — Standardized liberal
liberal acceptance도 spec으로 정의되어야 한다.
HTML5의 parsing algorithm이 가장 큰 사례. 어떻게 깨진 HTML을 처리할지 spec에 박아뒀다. browser마다 다르게 행동하던 quirks mode가 통일됐다.
핵심 — liberal하지만 random하지 않음. 모든 deviation에 대해 정의된 행동. 이게 Postel's Law의 trap을 줄이는 답.
Agent 영역에서 4 모델 매핑
| 표준 | Sender 정책 | Receiver 정책 |
|---|---|---|
| MCP의 JSON-RPC (transport) | strict | strict |
| AGENTS.md (frontmatter) | strict suggestion | liberal — frontmatter 없어도 작동 |
| agentskills.io SKILL.md (body) | liberal | liberal — Markdown 자유 |
| OpenAI tool spec (JSON schema) | strict | strict 시도, 실제는 liberal |
⚠️ AI 추정: agent 영역의 표준들은 layer마다 다른 정책을 의식적으로 채택. transport은 strict, content는 liberal. 이게 layer 분리의 효과.
5. 인사이트
5.1 Markdown 표준이 살아남는 이유 — Postel's Law 직접 적용
AGENTS.md, SKILL.md, agentskills.io는 모두 Markdown. Markdown 자체가 liberal한 format이다. parser가 깨진 Markdown도 대충 렌더링. front matter는 optional, body는 자유. 이게 비개발자도 작성 가능한 이유. 표준이 liberal하면 진입장벽이 수직 하강. worse-is-better가 왜 작동하는지의 마지막 축.
5.2 Layer마다 다른 robustness 정책이 답
한 표준에서도 layer마다 정책이 다르다.
- Transport layer (MCP의 JSON-RPC) → strict 둘 다. 보안 + 정확성.
- Metadata layer (AGENTS.md frontmatter) → strict sender + liberal receiver. 진화 가능.
- Content layer (SKILL.md body) → liberal 둘 다. 비개발자 진입 가능.
v1.0에서 layer마다 다른 robustness 정책을 의식. 한 정책을 모든 layer에 박으면 — 한쪽이 무너진다. transport이 liberal이면 보안 침해, content가 strict면 비개발자 진입 불가.
5.3 학내 marketplace에서 결정적
비개발자가 다수인 segment에서 — 사용자의 실수가 기본이다. liberal receiver 없이 marketplace 형성 불가능. 그러나 standardized liberal로 가야 함. 어떤 실수를 tolerate하고 어떤 걸 reject할지 spec에 박아두기.
- 예: SKILL.md frontmatter의
name필드가 없어도 파일명을 fallback으로. 이건 정의된 관대함. - 예: SKILL.md body의 형식이 자유. 자유가 정의되어 있음 (= Markdown).
5.4 Bug propagation trap을 deprecation warning으로 막기
liberal하게 받지만 경고는 함. sender가 자기 deviation을 알 수 있게.
- 학내 marketplace에서 skill을 받을 때 — 깨진 frontmatter여도 작동시키되 warning log 남기기.
- 이게 protocol이 진화하면서 bug를 정리하는 mechanism.
- v1.0부터 deprecation warning hook을 박아두는 게 결정적. 나중에 추가하기 어려움 (이미 사용자들이 deviation에 익숙해져서).
5.5 Liberal receiver = Anti-corruption layer
liberal receiver의 본질은 다양한 sender를 흡수해서 일관된 내부로 변환하는 것. 이게 design-principles #7 Anti-Corruption Layer의 정의 자체. 외부 다양성 → 내부 단일성으로 변환하는 layer.
학내 marketplace에 적용:
- 외부 (사용자가 만든 skill): 다양한 형식, 미세 deviation 가득
- 내부 (marketplace의 통일된 skill model): 일관된 표현
- 둘 사이 liberal receiver = anti-corruption layer
이게 v1.0 architecture에서 반드시 있어야 하는 layer.
5.6 첫 사용자의 실수 패턴이 표준의 liberal 영역을 정한다
liberal receiver는 실수의 패턴을 학습해서 spec에 반영. 어떤 실수를 자주 하는지가 표준의 형태를 정한다.
- v1.0의 첫 비개발자 사용자가 어떻게 실수하는지 관찰해야 함.
- 그 실수 패턴이 standardized liberal의 영역을 정의.
- 이건 사용자 research가 기술 design에 직접 입력되는 자리.
5.7 비대칭 부담을 의식하라
Postel's Law는 receiver의 부담이 sender보다 크다. 학내 marketplace에서:
- skill 작성은 자유 (sender 부담 작음)
- skill 수신/실행은 정교해야 함 (receiver 부담 큼)
이 비대칭이 flexibility의 비용. v1.0에서 receiver (= marketplace runtime, agent host) 구현이 가장 정교한 부분이 될 것이다. 이건 우연이 아니라 Postel's Law의 직접적 결과.
6. ① Fundamentals 완성 — 4축 종합
이 노트로 ① fundamentals의 4축이 박혔다:
| 축 | 노트 | 답하는 질문 |
|---|---|---|
| 1 | worse-is-better | 왜 단순함이 이기는가 |
| 2 | protocol-theory-lamport-tanenbaum | 어떻게 layer가 분리되는가 |
| 3 | standardization-political-economy | 어떻게 표준이 권력이 되는가 |
| 4 | 이 노트 | 어떻게 표준이 오래 사는가 |
4축의 합산 thesis:
단순한 spec (worse-is-better) + 깨끗한 layer 분리 (protocol-theory-lamport-tanenbaum) + de facto 권력 형성 (standardization-political-economy) + 관대한 receiver (이 노트) = 살아남는 표준.
이 4 조건이 모두 동시에 충족되면 표준이 ecosystem을 잡는다. 하나라도 빠지면 — 중간 영역에 빠져 사라진다.
이 lens를 가지고 ② Evolution으로 넘어가면 왜 function calling에서 MCP까지 진화했는가가 기계적으로 해석된다. ③ Frontier도 ④ Trade-off도 ⑤ Segment 적용도 — 모두 이 4축으로 분석 가능.
다음으로
② Evolution 영역으로 진입. 후보:
- evolution-function-calling-to-mcp — 2023 OpenAI function calling → 2024-11 MCP 표준화. 각 단계의 결정과 이유를 ① 4축으로 해석.
- evolution-mcp-to-skills — 2024-11 MCP → 2025 Skills lazy loading. token 부담이 trigger한 진화. ① 4축이 실시간 진화에 어떻게 적용되는지.
내 추천 — evolution-function-calling-to-mcp 먼저. 출발점이 분명하고, ① fundamentals가 역사에 어떻게 작동하는지 가장 깔끔하게 보여준다. 그 다음 자연스럽게 evolution-mcp-to-skills로 이어짐.
참조
- Jon Postel, RFC 793 (1981) — TCP, robustness principle 원본
- Martin Thomson, "The Harmful Consequences of the Robustness Principle" (IETF draft, 2019) — modern critique
- HTML5 Parsing Algorithm — standardized liberal의 가장 큰 사례
- Joel Spolsky, "The Law of Leaky Abstractions" — robustness의 환상
연결:
-
- worse-is-better — 단순함이 이기는 thesis
- protocol-theory-lamport-tanenbaum — layer 분리. 이 노트는 layer마다 다른 robustness 정책이 필요하다는 결론
- standardization-political-economy — 표준 권력. 이 노트는 권력을 유지하는 mechanism
- design-principles #7 Anti-Corruption Layer — liberal receiver의 본질