<story><title>OpenSSL 3.0</title><url>https://www.openssl.org/news/cl30.txt</url></story><parent_chain><item><author>dariusj18</author><text>Something I&amp;#x27;ve never quite understood about semantic versioning.  Sometimes fixing a bug is a breaking change, especially if someone is relying on that behavior to be bugged.  How does one make the distinction?</text></item><item><author>jabl</author><text>Apart from API&amp;#x2F;ABI changes, notable changes are:&lt;p&gt;* Changed the license to the Apache License v2.0.&lt;p&gt;* Switch to a new version scheme using three numbers MAJOR.MINOR.PATCH.&lt;p&gt;&lt;pre&gt;&lt;code&gt;   - Major releases (indicated by incrementing the MAJOR release number)
     may introduce incompatible API&amp;#x2F;ABI changes.
   - Minor releases (indicated by incrementing the MINOR release number)
     may introduce new features but retain API&amp;#x2F;ABI compatibility.
   - Patch releases (indicated by incrementing the PATCH number)
     are intended for bug fixes and other improvements of existing
     features only (like improving performance or adding documentation)
     and retain API&amp;#x2F;ABI compatibility.
&lt;/code&gt;&lt;/pre&gt;
See also the project&amp;#x27;s blog post about the new release: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.openssl.org&amp;#x2F;blog&amp;#x2F;blog&amp;#x2F;2021&amp;#x2F;09&amp;#x2F;07&amp;#x2F;OpenSSL3.Final&amp;#x2F;&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.openssl.org&amp;#x2F;blog&amp;#x2F;blog&amp;#x2F;2021&amp;#x2F;09&amp;#x2F;07&amp;#x2F;OpenSSL3.Final&amp;#x2F;&lt;/a&gt;</text></item></parent_chain><comment><author>da_chicken</author><text>Remember, versioning rules are like D&amp;amp;D. The purpose of the rules is to give you a framework to operate in that is easily understood in the vast majority of situations, not to comprehensively define every aspect. You don&amp;#x27;t get any rewards for following the rules, after all. When things get weird, you just ask the DM, they make a ruling, and then you keep the game moving forward.&lt;p&gt;There&amp;#x27;s always going to be corner cases. Fortunately, there is always a person available to act as a referee.</text></comment>
<story><title>OpenSSL 3.0</title><url>https://www.openssl.org/news/cl30.txt</url></story><parent_chain><item><author>dariusj18</author><text>Something I&amp;#x27;ve never quite understood about semantic versioning.  Sometimes fixing a bug is a breaking change, especially if someone is relying on that behavior to be bugged.  How does one make the distinction?</text></item><item><author>jabl</author><text>Apart from API&amp;#x2F;ABI changes, notable changes are:&lt;p&gt;* Changed the license to the Apache License v2.0.&lt;p&gt;* Switch to a new version scheme using three numbers MAJOR.MINOR.PATCH.&lt;p&gt;&lt;pre&gt;&lt;code&gt;   - Major releases (indicated by incrementing the MAJOR release number)
     may introduce incompatible API&amp;#x2F;ABI changes.
   - Minor releases (indicated by incrementing the MINOR release number)
     may introduce new features but retain API&amp;#x2F;ABI compatibility.
   - Patch releases (indicated by incrementing the PATCH number)
     are intended for bug fixes and other improvements of existing
     features only (like improving performance or adding documentation)
     and retain API&amp;#x2F;ABI compatibility.
&lt;/code&gt;&lt;/pre&gt;
See also the project&amp;#x27;s blog post about the new release: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.openssl.org&amp;#x2F;blog&amp;#x2F;blog&amp;#x2F;2021&amp;#x2F;09&amp;#x2F;07&amp;#x2F;OpenSSL3.Final&amp;#x2F;&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.openssl.org&amp;#x2F;blog&amp;#x2F;blog&amp;#x2F;2021&amp;#x2F;09&amp;#x2F;07&amp;#x2F;OpenSSL3.Final&amp;#x2F;&lt;/a&gt;</text></item></parent_chain><comment><author>simias</author><text>If the bug wasn&amp;#x27;t documented and the user effectively relied on &amp;quot;undefined behavior&amp;quot; I don&amp;#x27;t think it constitutes a breaking change. Like if a function called with certain parameters causes an unexpected crash, and a user decided to use that to quit the application, you can&amp;#x27;t reasonably be expected to maintain that behaviour.&lt;p&gt;If the bug was that a well documented function actually behaved differently than was expected but still consistently (like a string function that was supposed to return a number of characters but really returned a number of bytes) then yeah, that&amp;#x27;s a breaking change.&lt;p&gt;In practice the line can be fuzzy of course, but I find that it&amp;#x27;s not usually to hard to decide what constitutes a breaking change and what doesn&amp;#x27;t.</text></comment>