<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Software Versioning is Ridiculous</title>
	<atom:link href="http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/feed/" rel="self" type="application/rss+xml" />
	<link>http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/</link>
	<description>work. life. open source. diatribes.</description>
	<lastBuildDate>Thu, 04 Mar 2010 21:01:32 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Chris Aniszczyk</title>
		<link>http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/comment-page-1/#comment-1490</link>
		<dc:creator>Chris Aniszczyk</dc:creator>
		<pubDate>Mon, 23 Nov 2009 14:54:24 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1376#comment-1490</guid>
		<description>&lt;a href=&quot;#comment-1484&quot; rel=&quot;nofollow&quot;&gt;@Richard Steele&lt;/a&gt;, I disagree with your assertion around version numbers being arbitrary especially when it comes to module systems.

&lt;blockquote cite=&quot;#commentbody-1484&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;#comment-1484&quot; rel=&quot;nofollow&quot;&gt;Richard Steele&lt;/a&gt; :&lt;/strong&gt;
&lt;p&gt;...Versions are arbitrary, as long as they can uniquely identify a specific release of the product...&lt;/p&gt;
&lt;/blockquote&gt;

Let me give you twos examples from OSGi land to think about. In OSGi, you can depend on different bundles using the &lt;code&gt;Require-Bundle&lt;/code&gt; header. You can depend on ranges. Let&#039;s say you were writing an application that needed to use log4j. What version of log4j do you want to depend on? The first stab of your dependency can be written like this...

&lt;code&gt;Require-Bundle: org.apache.log4j&lt;/code&gt;

You go to deploy your bundle on one system. It works, yay!

You know go to deploy your bundle on some other system or someone else deploys your bundle... you get some crazy exceptions. It turns out, you were developing against log4j 1.1 and that worked great when deployed into the first system that was running 1.1... however... the second system your bundle was deployed to was running 1.2 and in version 1.2... the log4j team decided to break binary compatibility. Ok, you can now fix your bundle with this dependency statement:

&lt;code&gt;Require-Bundle: org.apache.log4j;version=[1.1,1.2)&lt;/code&gt;

Now imagine that you needed commons collections? How should you depend on commons collections... what version ranges... what verison policy does the commons collections team follow? 

&lt;code&gt;Require-Bundle: org.apache.commons.collections;version=[2.1,3.0)&lt;/code&gt;

It turns out that commons collection 3.0 is binary compatible with 2.1...

You see what I&#039;m getting it?

When there is no consistent set of versioning semantics when it comes to module systems... it&#039;s a world of pain.</description>
		<content:encoded><![CDATA[<p><a href="#comment-1484" rel="nofollow">@Richard Steele</a>, I disagree with your assertion around version numbers being arbitrary especially when it comes to module systems.</p>
<blockquote cite="#commentbody-1484"><p>
<strong><a href="#comment-1484" rel="nofollow">Richard Steele</a> :</strong></p>
<p>&#8230;Versions are arbitrary, as long as they can uniquely identify a specific release of the product&#8230;</p>
</blockquote>
<p>Let me give you twos examples from OSGi land to think about. In OSGi, you can depend on different bundles using the <code>Require-Bundle</code> header. You can depend on ranges. Let&#8217;s say you were writing an application that needed to use log4j. What version of log4j do you want to depend on? The first stab of your dependency can be written like this&#8230;</p>
<p><code>Require-Bundle: org.apache.log4j</code></p>
<p>You go to deploy your bundle on one system. It works, yay!</p>
<p>You know go to deploy your bundle on some other system or someone else deploys your bundle&#8230; you get some crazy exceptions. It turns out, you were developing against log4j 1.1 and that worked great when deployed into the first system that was running 1.1&#8230; however&#8230; the second system your bundle was deployed to was running 1.2 and in version 1.2&#8230; the log4j team decided to break binary compatibility. Ok, you can now fix your bundle with this dependency statement:</p>
<p><code>Require-Bundle: org.apache.log4j;version=[1.1,1.2)</code></p>
<p>Now imagine that you needed commons collections? How should you depend on commons collections&#8230; what version ranges&#8230; what verison policy does the commons collections team follow? </p>
<p><code>Require-Bundle: org.apache.commons.collections;version=[2.1,3.0)</code></p>
<p>It turns out that commons collection 3.0 is binary compatible with 2.1&#8230;</p>
<p>You see what I&#8217;m getting it?</p>
<p>When there is no consistent set of versioning semantics when it comes to module systems&#8230; it&#8217;s a world of pain.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richard Steele</title>
		<link>http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/comment-page-1/#comment-1484</link>
		<dc:creator>Richard Steele</dc:creator>
		<pubDate>Fri, 20 Nov 2009 02:22:01 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1376#comment-1484</guid>
		<description>While I agree that this does seem to cause problems, in my experience it&#039;s as much a &quot;techno-political&quot; issue than anything else.  Versions are arbitrary, as long as they can uniquely identify a specific release of the product.  Don&#039;t forget another important reason for version numbers: support.  &quot;What version are you running, and what version of the OS are you running it on?&quot; are very often the first questions we need answered to address a support call.</description>
		<content:encoded><![CDATA[<p>While I agree that this does seem to cause problems, in my experience it&#8217;s as much a &#8220;techno-political&#8221; issue than anything else.  Versions are arbitrary, as long as they can uniquely identify a specific release of the product.  Don&#8217;t forget another important reason for version numbers: support.  &#8220;What version are you running, and what version of the OS are you running it on?&#8221; are very often the first questions we need answered to address a support call.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Stanchfield</title>
		<link>http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/comment-page-1/#comment-1483</link>
		<dc:creator>Scott Stanchfield</dc:creator>
		<pubDate>Thu, 19 Nov 2009 22:00:27 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1376#comment-1483</guid>
		<description>&lt;a href=&quot;#comment-1481&quot; rel=&quot;nofollow&quot;&gt;@oisin &lt;/a&gt; 

&lt;blockquote cite=&quot;#commentbody-1481&quot;&gt;
5) you’re going to have to re-write your code, sorry, by the way we have a new training course.&lt;/blockquote&gt;

Hehehe... I bet that was a great driver for the marketing team to up the version numbers artificially...</description>
		<content:encoded><![CDATA[<p><a href="#comment-1481" rel="nofollow">@oisin </a> </p>
<blockquote cite="#commentbody-1481"><p>
5) you’re going to have to re-write your code, sorry, by the way we have a new training course.</p></blockquote>
<p>Hehehe&#8230; I bet that was a great driver for the marketing team to up the version numbers artificially&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Stanchfield</title>
		<link>http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/comment-page-1/#comment-1482</link>
		<dc:creator>Scott Stanchfield</dc:creator>
		<pubDate>Thu, 19 Nov 2009 20:56:23 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1376#comment-1482</guid>
		<description>&lt;a href=&quot;#comment-1479&quot; rel=&quot;nofollow&quot;&gt;@Eugene Ostroukhov &lt;/a&gt; 
I agree - latest/old would work great when you&#039;re in an update manager. Won&#039;t work so well on a box at the store though ;)</description>
		<content:encoded><![CDATA[<p><a href="#comment-1479" rel="nofollow">@Eugene Ostroukhov </a><br />
I agree &#8211; latest/old would work great when you&#8217;re in an update manager. Won&#8217;t work so well on a box at the store though <img src='http://aniszczyk.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Oisin Hurley</title>
		<link>http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/comment-page-1/#comment-1481</link>
		<dc:creator>Oisin Hurley</dc:creator>
		<pubDate>Thu, 19 Nov 2009 20:54:26 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1376#comment-1481</guid>
		<description>Marketing is the major driver for a &#039;public&#039; version number in most cases. You get some interesting stories - for example, at one point our (now ex-) marketing team decided that products with a major version &quot;4&quot; were bad luck. So we had products go from 3.1 straight to 5.0 (which basically allows you to break binary compatibility twice!). People who don&#039;t care so much about that side of things have fun instead - like the π incident and negative range numbers. There&#039;s also plain old intransigence like the silly Scala 2.7 vs 2.8 affair.

@Scott - I&#039;ve seen that happen sooo many times. I&#039;ve always used version to tell a story - basically how hosed you are going to be once you upgrade. This ranges from 0) drop-in replacement; 1) we&#039;ve changed some third-party stuff; 2) you&#039;re going to have to re-write your scripts; 3) you&#039;re going to have to re-link all your binaries, sorry; 4) you&#039;re going to have to recompile everything, sorry; 5) you&#039;re going to have to re-write your code, sorry, by the way we have a new training course.</description>
		<content:encoded><![CDATA[<p>Marketing is the major driver for a &#8216;public&#8217; version number in most cases. You get some interesting stories &#8211; for example, at one point our (now ex-) marketing team decided that products with a major version &#8220;4&#8243; were bad luck. So we had products go from 3.1 straight to 5.0 (which basically allows you to break binary compatibility twice!). People who don&#8217;t care so much about that side of things have fun instead &#8211; like the π incident and negative range numbers. There&#8217;s also plain old intransigence like the silly Scala 2.7 vs 2.8 affair.</p>
<p>@Scott &#8211; I&#8217;ve seen that happen sooo many times. I&#8217;ve always used version to tell a story &#8211; basically how hosed you are going to be once you upgrade. This ranges from 0) drop-in replacement; 1) we&#8217;ve changed some third-party stuff; 2) you&#8217;re going to have to re-write your scripts; 3) you&#8217;re going to have to re-link all your binaries, sorry; 4) you&#8217;re going to have to recompile everything, sorry; 5) you&#8217;re going to have to re-write your code, sorry, by the way we have a new training course.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carey</title>
		<link>http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/comment-page-1/#comment-1480</link>
		<dc:creator>Carey</dc:creator>
		<pubDate>Thu, 19 Nov 2009 20:33:26 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1376#comment-1480</guid>
		<description>As far as I can tell, Linux version numbering has changed, and there will probably not be a version 2.7.anything. Two useless digits beats one for Java.

(I remember running successive versions of Linux 1.2.x, compiled myself. I had to quit X to have enough memory for GCC.)</description>
		<content:encoded><![CDATA[<p>As far as I can tell, Linux version numbering has changed, and there will probably not be a version 2.7.anything. Two useless digits beats one for Java.</p>
<p>(I remember running successive versions of Linux 1.2.x, compiled myself. I had to quit X to have enough memory for GCC.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Eugene Ostroukhov</title>
		<link>http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/comment-page-1/#comment-1479</link>
		<dc:creator>Eugene Ostroukhov</dc:creator>
		<pubDate>Thu, 19 Nov 2009 20:22:26 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1376#comment-1479</guid>
		<description>Even if they used some &quot;marketing&quot; version strings on this dashboard it would not help. I think it would me more then enough to have two version strings - &quot;latest&quot; and &quot;old&quot; :)

In most cases users do not care about exact version. Versions are more important to technical staff - IT, plug-in developers, etc. Technical staff really enjoys clean and easy-to-compare &quot;technical&quot; version string.</description>
		<content:encoded><![CDATA[<p>Even if they used some &#8220;marketing&#8221; version strings on this dashboard it would not help. I think it would me more then enough to have two version strings &#8211; &#8220;latest&#8221; and &#8220;old&#8221; <img src='http://aniszczyk.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>In most cases users do not care about exact version. Versions are more important to technical staff &#8211; IT, plug-in developers, etc. Technical staff really enjoys clean and easy-to-compare &#8220;technical&#8221; version string.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Stanchfield</title>
		<link>http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/comment-page-1/#comment-1476</link>
		<dc:creator>Scott Stanchfield</dc:creator>
		<pubDate>Thu, 19 Nov 2009 19:06:18 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1376#comment-1476</guid>
		<description>Marketing vs. internal versions. I have had to fight so hard to get people to understand the difference. I can&#039;t tell you how many times I&#039;ve been forced to go back into code and change the version number that&#039;s reported to match the marketing version. Sigh...

The only time the user cares about the actual version number is when there is a new version in a box on a shelf and they want to know if it&#039;s different from the one they have. Of course that could be served by &quot;better&quot; &quot;better still&quot; &quot;even better&quot; &quot;more superbly betterified&quot; and &quot;betterriffic&quot;, which we all know are in ascending order of betteritude. ;)</description>
		<content:encoded><![CDATA[<p>Marketing vs. internal versions. I have had to fight so hard to get people to understand the difference. I can&#8217;t tell you how many times I&#8217;ve been forced to go back into code and change the version number that&#8217;s reported to match the marketing version. Sigh&#8230;</p>
<p>The only time the user cares about the actual version number is when there is a new version in a box on a shelf and they want to know if it&#8217;s different from the one they have. Of course that could be served by &#8220;better&#8221; &#8220;better still&#8221; &#8220;even better&#8221; &#8220;more superbly betterified&#8221; and &#8220;betterriffic&#8221;, which we all know are in ascending order of betteritude. <img src='http://aniszczyk.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Stanchfield</title>
		<link>http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/comment-page-1/#comment-1475</link>
		<dc:creator>Scott Stanchfield</dc:creator>
		<pubDate>Thu, 19 Nov 2009 18:47:49 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1376#comment-1475</guid>
		<description>&lt;a href=&quot;#comment-1473&quot; rel=&quot;nofollow&quot;&gt;@David Carver &lt;/a&gt; 
Actually, they broke backwards compatibility in 1.2.

If you had

  import java.util.*;
  import java.awt.*;

  class Foo {
    List list = new List();
  }

It would compile fine in 1.1.x, but in 1.2.x, kaboom! Ambiguous import.
This is why Import On Demand Is Evil. (See http://javadude.com/articles/importondemandisevil.html)

-- Scott</description>
		<content:encoded><![CDATA[<p><a href="#comment-1473" rel="nofollow">@David Carver </a><br />
Actually, they broke backwards compatibility in 1.2.</p>
<p>If you had</p>
<p>  import java.util.*;<br />
  import java.awt.*;</p>
<p>  class Foo {<br />
    List list = new List();<br />
  }</p>
<p>It would compile fine in 1.1.x, but in 1.2.x, kaboom! Ambiguous import.<br />
This is why Import On Demand Is Evil. (See <a href="http://javadude.com/articles/importondemandisevil.html)" rel="nofollow">http://javadude.com/articles/importondemandisevil.html)</a></p>
<p>&#8211; Scott</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kelly Campbell</title>
		<link>http://aniszczyk.org/2009/11/19/software-versioning-is-ridiculous/comment-page-1/#comment-1474</link>
		<dc:creator>Kelly Campbell</dc:creator>
		<pubDate>Thu, 19 Nov 2009 17:35:07 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1376#comment-1474</guid>
		<description>Here&#039;s a unique one: TeX uses extended digits of pi. http://en.wikipedia.org/wiki/Software_versioning#TeX</description>
		<content:encoded><![CDATA[<p>Here&#8217;s a unique one: TeX uses extended digits of pi. <a href="http://en.wikipedia.org/wiki/Software_versioning#TeX" rel="nofollow">http://en.wikipedia.org/wiki/Software_versioning#TeX</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>
