The Harmful Consequences of Postel’s Maxim

No implementation can hope to avoid having to trade correctness for
interoperability indefinitely.

An implementation that reacts to variations in the manner advised by
Postel sets up a feedback cycle:

  • Over time, implementations progressively add new code to constrain
    how data is transmitted, or to permit variations in what is
    received.
  • Errors in implementations, or confusion about semantics can thereby be masked.
  • These errors can become entrenched, forcing other implementations to be tolerant of those errors.

.. the original JSON specification [RFC4627] omitted critical details on a range of points including Unicode handling, ordering and duplication of object members, and number encoding. Consequently, a range of interpretations were used by implementations. An update [RFC7159] was unable to correct these Thomson Expires December 14, 2017 errors, instead concentrating on defining the interoperable subset of JSON.

.. An entrenched flaw can become a de facto standard.

.. This is colloquially referred to as being “bug for bug compatible”.

4. A New Design Principle

   The following principle applies not just to the implementation of a
   protocol, but to the design and specification of the protocol.

      Protocol designs and implementations should fail noisily in
      response to bad or undefined inputs.

In contrast, generating warnings provide no incentive to fix a problem as the system remains operational. Users can become inured to frequent use of warnings and thus systematically ignore them, whereas a fatal error can only happen once and will demand attention.