Be conservative in what you send, liberal in what you accept.
Postel's 1980 rule from TCP specification. Now contested in protocol design: leniency in what you accept entrenches other people's bugs, so the standard drifts toward whatever implementations happen to do.
In practice
- A payments gateway that quietly accepts dates in three formats is receiving all three from its clients within a year, and can never drop any of them.
- A parser that tolerates malformed input finds every producer relying on the tolerance, and the specification is now whatever the parser does.
- Possible explanations
- The explanation is interoperability under imperfect implementation: accepting sloppy input lets a network grow when not everyone implements the standard correctly.
- In its favour
- It worked as intended in the early internet, where strict rejection would have prevented adoption, and it remains sound advice where the sender cannot be fixed.
- Against it
- It is now contested in protocol design, since leniency entrenches other people's bugs, the de facto standard drifts towards whatever the most popular implementation accepts, and security flaws follow from parsing input that should have been rejected.
- Standing
- Now contested in protocol design, where leniency is argued to entrench bugs.
- Subject
- Design & Systems
- Essay
- Rules of thumb for building things that work