<story><title>Postel’s Principle is a Bad Idea</title><url>http://programmingisterrible.com/post/42215715657/postels-principle-is-a-bad-idea</url></story><parent_chain><item><author>gruseom</author><text>&lt;i&gt;when instead they&apos;ve accidentally built dependencies on other people&apos;s implementation details&lt;/i&gt;&lt;p&gt;I think it would be very interesting if you could give an example or two of this.</text></item><item><author>tptacek</author><text>Postel&apos;s Principle was very important for bootstrapping adoption of TCP/IP, but it&apos;s mostly a curse in mature systems. It doesn&apos;t even help new implementors; instead, it deceives them into thinking that they&apos;ve achieved interoperability when instead they&apos;ve accidentally built dependencies on other people&apos;s implementation details.&lt;p&gt;That said, I wouldn&apos;t suggest that our Insertion, Evasion paper presented an argument regarding the Principle in either direction. Even if we forbad leniency, there&apos;d still be ambiguous standards.</text></item></parent_chain><comment><author>MichaelGG</author><text>Here&apos;s the general outline.&lt;p&gt;Vendor A writes a parser that is helpful and is liberal and infers missing quotes and stuff. Vendor B writes something that&apos;s mostly to spec, but accidentally doesn&apos;t properly quote things. It works fine, because A is liberal and infers these quotes.&lt;p&gt;Vendor C comes along and builds exactly to spec. But despite being perfectly to spec, it doesn&apos;t interop because B sends invalid data! But B is a big vendor, and their stuff works with A.&lt;p&gt;So now C must add a hack to their parser to deal with the fact that, because A was liberal, B got their implementation wrong.&lt;p&gt;One example is the loose routing parameter, &quot;lr&quot;. It has no value, you just add the name of the parameter &quot;uri;lr&quot; in contrast to other parameters like &quot;tag=bla&quot;. Some implementations send &quot;lr=on&quot;, and that should be mostly harmless. Except other implementations take that to mean &quot;lr&quot; has a value, and no longer accept just &quot;lr&quot; as turning the feature on.&lt;p&gt;SIP is full of these things, many of them in the &lt;i&gt;parsing&lt;/i&gt; layer alone, let alone actual semantics of what things mean. Browsers are another example: vendor A decides to allow closing tags out of order - how do you do handle such unspecified stuff cross browser?</text></comment>
<story><title>Postel’s Principle is a Bad Idea</title><url>http://programmingisterrible.com/post/42215715657/postels-principle-is-a-bad-idea</url></story><parent_chain><item><author>gruseom</author><text>&lt;i&gt;when instead they&apos;ve accidentally built dependencies on other people&apos;s implementation details&lt;/i&gt;&lt;p&gt;I think it would be very interesting if you could give an example or two of this.</text></item><item><author>tptacek</author><text>Postel&apos;s Principle was very important for bootstrapping adoption of TCP/IP, but it&apos;s mostly a curse in mature systems. It doesn&apos;t even help new implementors; instead, it deceives them into thinking that they&apos;ve achieved interoperability when instead they&apos;ve accidentally built dependencies on other people&apos;s implementation details.&lt;p&gt;That said, I wouldn&apos;t suggest that our Insertion, Evasion paper presented an argument regarding the Principle in either direction. Even if we forbad leniency, there&apos;d still be ambiguous standards.</text></item></parent_chain><comment><author>kens</author><text>Windows software is a similar case - a program works on one version of Windows due to accidental dependencies on Windows implementation details (e.g. memory management), and then fails on the next version of Windows when the underlying implementation changes. Raymond Chen has written about the huge difficulty for Windows to maintain backwards compatibility with &quot;broken&quot; programs. New versions of Windows provide special-case handling for old applications so they will still run. See &lt;a href=&quot;http://www.joelonsoftware.com/articles/APIWar.html&quot; rel=&quot;nofollow&quot;&gt;http://www.joelonsoftware.com/articles/APIWar.html&lt;/a&gt; and scroll way down to &quot;The Two Forces at Microsoft&quot; for a long discussion of this, and how Apple is much stricter.</text></comment>