<?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: Jigsaw Versioning is Ridiculous</title>
	<atom:link href="http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/feed/" rel="self" type="application/rss+xml" />
	<link>http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/</link>
	<description>work. life. open source. diatribes.</description>
	<lastBuildDate>Fri, 12 Mar 2010 01:04:59 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Is there a future for software versioning? &#124; All the small things</title>
		<link>http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/comment-page-1/#comment-1530</link>
		<dc:creator>Is there a future for software versioning? &#124; All the small things</dc:creator>
		<pubDate>Tue, 15 Dec 2009 00:56:20 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1494#comment-1530</guid>
		<description>[...] Chris Aniszczyk: http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/ [...]</description>
		<content:encoded><![CDATA[<p>[...] Chris Aniszczyk: <a href="http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/" rel="nofollow">http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/</a> [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex Buckley</title>
		<link>http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/comment-page-1/#comment-1518</link>
		<dc:creator>Alex Buckley</dc:creator>
		<pubDate>Wed, 02 Dec 2009 21:22:43 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1494#comment-1518</guid>
		<description>The design and implementation of the Jigsaw module system is carried out in OpenJDK&#039;s Project Jigsaw. The project&#039;s mailing list would have been an excellent place to comment on the Jigsaw version scheme. Unfortunately, there has been very little activity in the OpenJDK project by members of the OSGi community. This may be because the goals of the Jigsaw module system are very different to the goals of the OSGi module system, as Sun has documented in recent public presentations (Strange Loop 2009, Devoxx 2009).</description>
		<content:encoded><![CDATA[<p>The design and implementation of the Jigsaw module system is carried out in OpenJDK&#39;s Project Jigsaw. The project&#39;s mailing list would have been an excellent place to comment on the Jigsaw version scheme. Unfortunately, there has been very little activity in the OpenJDK project by members of the OSGi community. This may be because the goals of the Jigsaw module system are very different to the goals of the OSGi module system, as Sun has documented in recent public presentations (Strange Loop 2009, Devoxx 2009).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex Buckley</title>
		<link>http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/comment-page-1/#comment-1517</link>
		<dc:creator>Alex Buckley</dc:creator>
		<pubDate>Wed, 02 Dec 2009 20:21:29 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1494#comment-1517</guid>
		<description>The Jigsaw version scheme is very similar to OmniVersion. The OmniVersion link has very little to say on semantics; the meaning of individual segments is deferred to the underlying system (Mozilla, RedHat, Apache...). The OmniVersion comparator assumes structured input of arbitrary length, just like the Jigsaw comparator.</description>
		<content:encoded><![CDATA[<p>The Jigsaw version scheme is very similar to OmniVersion. The OmniVersion link has very little to say on semantics; the meaning of individual segments is deferred to the underlying system (Mozilla, RedHat, Apache&#8230;). The OmniVersion comparator assumes structured input of arbitrary length, just like the Jigsaw comparator.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Aniszczyk</title>
		<link>http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/comment-page-1/#comment-1506</link>
		<dc:creator>Chris Aniszczyk</dc:creator>
		<pubDate>Tue, 24 Nov 2009 16:01:42 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1494#comment-1506</guid>
		<description>&lt;blockquote cite=&quot;#commentbody-1500&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;#comment-1500&quot; rel=&quot;nofollow&quot;&gt;Reinier Zwitserloot&lt;/a&gt; :&lt;/strong&gt;
&lt;p&gt;Now, which part of that argument is ‘ridiculous’ and ‘terrible’? I might be overestimating the amount of version fail that’s going to occur, but you can’t deny accidents happen.&lt;/p&gt;
&lt;/blockquote&gt;

My biggest problem was that Sun hasn&#039;t really reached out to the OSGi community for help in building a module system. They just came down from the mountains with their solution. However, that&#039;s a topic of another post. Also, I thought people would be a bit more thick-skinned by now working in open source.

My point is that versioning is critical to module systems and they can&#039;t just be an afterthought. Having a consistent version scheme so you can express contracts is mandatory. Just look at the versioning landscape in Java... it&#039;s a mess. I would just like to clean things up given a chance.</description>
		<content:encoded><![CDATA[<blockquote cite="#commentbody-1500"><p>
<strong><a href="#comment-1500" rel="nofollow">Reinier Zwitserloot</a> :</strong></p>
<p>Now, which part of that argument is ‘ridiculous’ and ‘terrible’? I might be overestimating the amount of version fail that’s going to occur, but you can’t deny accidents happen.</p>
</blockquote>
<p>My biggest problem was that Sun hasn&#8217;t really reached out to the OSGi community for help in building a module system. They just came down from the mountains with their solution. However, that&#8217;s a topic of another post. Also, I thought people would be a bit more thick-skinned by now working in open source.</p>
<p>My point is that versioning is critical to module systems and they can&#8217;t just be an afterthought. Having a consistent version scheme so you can express contracts is mandatory. Just look at the versioning landscape in Java&#8230; it&#8217;s a mess. I would just like to clean things up given a chance.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Aniszczyk</title>
		<link>http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/comment-page-1/#comment-1505</link>
		<dc:creator>Chris Aniszczyk</dc:creator>
		<pubDate>Tue, 24 Nov 2009 15:54:25 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1494#comment-1505</guid>
		<description>Yes, I think that this would have been easier if we had export ranges or some other metadata in the MANIFEST.MF indicating binary compatibility. 

However, this still doesn&#039;t give us any consistent semantics about versions... it would be up to the decision of each bundle supplier how to treat their version values. It&#039;s a step forward, but I think we would all be doing ourselves a favor if we just chose a reasonable versioning scheme and stuck with it. What do we really get out of coming up with version numbers for our components? A chance to express some creativity? Ideally, I would love to have it happen automatically for us based on changes in the code.</description>
		<content:encoded><![CDATA[<p>Yes, I think that this would have been easier if we had export ranges or some other metadata in the MANIFEST.MF indicating binary compatibility. </p>
<p>However, this still doesn&#8217;t give us any consistent semantics about versions&#8230; it would be up to the decision of each bundle supplier how to treat their version values. It&#8217;s a step forward, but I think we would all be doing ourselves a favor if we just chose a reasonable versioning scheme and stuck with it. What do we really get out of coming up with version numbers for our components? A chance to express some creativity? Ideally, I would love to have it happen automatically for us based on changes in the code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Luke Patterson</title>
		<link>http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/comment-page-1/#comment-1504</link>
		<dc:creator>Luke Patterson</dc:creator>
		<pubDate>Tue, 24 Nov 2009 14:06:19 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1494#comment-1504</guid>
		<description>&lt;blockquote cite=&quot;#commentbody-1494&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;#comment-1494&quot; rel=&quot;nofollow&quot;&gt;Jannick&lt;/a&gt; :&lt;/strong&gt;
Couldn’t this issue be resolved by having the commons 3.0 module meta-data include a binary-compatible-replacement-off-versions:
&lt;/blockquote&gt;

This discussion wouldn&#039;t be complete without this tidbit from Peter Kriens:

&quot;... I believe life would have been easier if we would have had export ranges because the exporter of a package knows exactly to which version he is compatible, being the responsible person for that package. If he changes a package, he is the one thinking and deciding about backward compatibility. The importer is almost always guessing. That is, if I make a change to a package called p, I can knowingly say that I am package p version 2, but I am completely compatible to version 1 I therefore can export p;[1,2]. In contrast, if I import package p I have no clue if version 1 and 2 will be compatible except for the convention of version number interpretation. Alas, export versions did not make it to R4.&quot;

http://www.osgi.org/blog/2008/02/research-challenges-for-osgi.html</description>
		<content:encoded><![CDATA[<blockquote cite="#commentbody-1494"><p>
<strong><a href="#comment-1494" rel="nofollow">Jannick</a> :</strong><br />
Couldn’t this issue be resolved by having the commons 3.0 module meta-data include a binary-compatible-replacement-off-versions:
</p></blockquote>
<p>This discussion wouldn&#8217;t be complete without this tidbit from Peter Kriens:</p>
<p>&#8220;&#8230; I believe life would have been easier if we would have had export ranges because the exporter of a package knows exactly to which version he is compatible, being the responsible person for that package. If he changes a package, he is the one thinking and deciding about backward compatibility. The importer is almost always guessing. That is, if I make a change to a package called p, I can knowingly say that I am package p version 2, but I am completely compatible to version 1 I therefore can export p;[1,2]. In contrast, if I import package p I have no clue if version 1 and 2 will be compatible except for the convention of version number interpretation. Alas, export versions did not make it to R4.&#8221;</p>
<p><a href="http://www.osgi.org/blog/2008/02/research-challenges-for-osgi.html" rel="nofollow">http://www.osgi.org/blog/2008/02/research-challenges-for-osgi.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gunnar Wagenknecht</title>
		<link>http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/comment-page-1/#comment-1503</link>
		<dc:creator>Gunnar Wagenknecht</dc:creator>
		<pubDate>Tue, 24 Nov 2009 10:58:32 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1494#comment-1503</guid>
		<description>&lt;blockquote cite=&quot;#commentbody-1498&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;#comment-1498&quot; rel=&quot;nofollow&quot;&gt;Miroslav Pokorny&lt;/a&gt; :&lt;/strong&gt;
[...] I believe a “i-am-backward-compatible-with” would help.[...]
&lt;/blockquote&gt;

I think you hit the nail on its head. The issue of specifying version ranges at import time just delegates the problem. 

Chris, you had some very good examples in your blog. But in all cases it was *never* the clients fault. In all examples the producers just didn&#039;t get the versioning right. It really is the task of a producer to decide which versions they &lt;i&gt;want&lt;/i&gt; to be compatible to. This should be as dead easy as declaring it at export time, i.e. a package export should say &quot;hey, I&#039;m version 3.0 and I&#039;m binary compatible to 2.1, 2.2 and whatever was out there before, if not my module vendor screwed up&quot;.</description>
		<content:encoded><![CDATA[<blockquote cite="#commentbody-1498"><p>
<strong><a href="#comment-1498" rel="nofollow">Miroslav Pokorny</a> :</strong><br />
[...] I believe a “i-am-backward-compatible-with” would help.[...]
</p></blockquote>
<p>I think you hit the nail on its head. The issue of specifying version ranges at import time just delegates the problem. </p>
<p>Chris, you had some very good examples in your blog. But in all cases it was *never* the clients fault. In all examples the producers just didn&#8217;t get the versioning right. It really is the task of a producer to decide which versions they <i>want</i> to be compatible to. This should be as dead easy as declaring it at export time, i.e. a package export should say &#8220;hey, I&#8217;m version 3.0 and I&#8217;m binary compatible to 2.1, 2.2 and whatever was out there before, if not my module vendor screwed up&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas Hallgren</title>
		<link>http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/comment-page-1/#comment-1502</link>
		<dc:creator>Thomas Hallgren</dc:creator>
		<pubDate>Tue, 24 Nov 2009 07:56:45 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1494#comment-1502</guid>
		<description>&lt;a href=&quot;#comment-1493&quot; rel=&quot;nofollow&quot;&gt;@Fatih Coskun&lt;/a&gt; 
If that&#039;s what they are trying to do, then they should have a look at the p2 &lt;a href=&quot;http://wiki.eclipse.org/Equinox/p2/Omni_Version&quot; rel=&quot;nofollow&quot;&gt;OmniVersion&lt;/a&gt;. It may look complex at first glance but that&#039;s what it takes to unify different versioning formats. There&#039;s not much use unifying formats if you cannot understand the semantics.</description>
		<content:encoded><![CDATA[<p><a href="#comment-1493" rel="nofollow">@Fatih Coskun</a><br />
If that&#8217;s what they are trying to do, then they should have a look at the p2 <a href="http://wiki.eclipse.org/Equinox/p2/Omni_Version" rel="nofollow">OmniVersion</a>. It may look complex at first glance but that&#8217;s what it takes to unify different versioning formats. There&#8217;s not much use unifying formats if you cannot understand the semantics.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Reinier Zwitserloot</title>
		<link>http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/comment-page-1/#comment-1500</link>
		<dc:creator>Reinier Zwitserloot</dc:creator>
		<pubDate>Tue, 24 Nov 2009 03:26:39 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1494#comment-1500</guid>
		<description>Sun decided that the burden of having a module version number that is NOT the same as the marketing version number is the lesser evil compared to having module version numbers that have no explicitly defined meanings per version sub-number.

A debatable issue, to be sure. There&#039;s a third way out, of course: Enforcing that marketing no longer decides versions. If you think you can enforce this across the entire java community, you&#039;re delusional.

So, two fairly legitimate strategies. I have a slight preference for OSGi&#039;s model over sun&#039;s choice, but, eh. Sun wants to be compatible with stuff like debian, which already has semantic meanings for this stuff, and it&#039;s somewhat different to the OSGi model, so I get where they are coming from.

And yet you start ranting like a crazy man - calling it &#039;ridiculous&#039; and &#039;terrible&#039;. You&#039;re not doing OSGi any favours by acting this way.

FYI, jigsaw allows a similar version bounding scheme as OSGi. jigsaw splits the version string into pieces along punctuation (dots and dashes), and per block you can specify bounds, including numeric ones, so [1.1, 1.2) has similar meaning. The problem is of course that you have to check the exact meaning of each level of number per module, but you yourself said that log4j broke backwards compatibility by accident. They would release the wrong version. Version systems suck unless a given version release is never ever changed, so once log4j released this wrongly labelled version, you&#039;re stuck with it forever.

Pragmatically speaking, then, this much celebrated intrinsic meaning of version numbers is a guideline at best. Add in projects throwing documentation to the wind and going with their own versioning schemes because marketing said so, and the OSGi situation isn&#039;t all that much different from jigsaw&#039;s proposals, except that jigsaw&#039;s proposal is far more flexible.

Now, which part of that argument is &#039;ridiculous&#039; and &#039;terrible&#039;? I might be overestimating the amount of version fail that&#039;s going to occur, but you can&#039;t deny accidents happen.

NB: Regarding take-backsies on misversioned stuff, jigsaw&#039;s plan is for (module-name+version, jar*) tuples to be stored in a central repository on the local machine, so with that plan, taking back a released version to reversion it is just not feasible.

*) It won&#039;t be a jar, but some other file format, but I doubt this is a relevant detail.</description>
		<content:encoded><![CDATA[<p>Sun decided that the burden of having a module version number that is NOT the same as the marketing version number is the lesser evil compared to having module version numbers that have no explicitly defined meanings per version sub-number.</p>
<p>A debatable issue, to be sure. There&#8217;s a third way out, of course: Enforcing that marketing no longer decides versions. If you think you can enforce this across the entire java community, you&#8217;re delusional.</p>
<p>So, two fairly legitimate strategies. I have a slight preference for OSGi&#8217;s model over sun&#8217;s choice, but, eh. Sun wants to be compatible with stuff like debian, which already has semantic meanings for this stuff, and it&#8217;s somewhat different to the OSGi model, so I get where they are coming from.</p>
<p>And yet you start ranting like a crazy man &#8211; calling it &#8216;ridiculous&#8217; and &#8216;terrible&#8217;. You&#8217;re not doing OSGi any favours by acting this way.</p>
<p>FYI, jigsaw allows a similar version bounding scheme as OSGi. jigsaw splits the version string into pieces along punctuation (dots and dashes), and per block you can specify bounds, including numeric ones, so [1.1, 1.2) has similar meaning. The problem is of course that you have to check the exact meaning of each level of number per module, but you yourself said that log4j broke backwards compatibility by accident. They would release the wrong version. Version systems suck unless a given version release is never ever changed, so once log4j released this wrongly labelled version, you&#8217;re stuck with it forever.</p>
<p>Pragmatically speaking, then, this much celebrated intrinsic meaning of version numbers is a guideline at best. Add in projects throwing documentation to the wind and going with their own versioning schemes because marketing said so, and the OSGi situation isn&#8217;t all that much different from jigsaw&#8217;s proposals, except that jigsaw&#8217;s proposal is far more flexible.</p>
<p>Now, which part of that argument is &#8216;ridiculous&#8217; and &#8216;terrible&#8217;? I might be overestimating the amount of version fail that&#8217;s going to occur, but you can&#8217;t deny accidents happen.</p>
<p>NB: Regarding take-backsies on misversioned stuff, jigsaw&#8217;s plan is for (module-name+version, jar*) tuples to be stored in a central repository on the local machine, so with that plan, taking back a released version to reversion it is just not feasible.</p>
<p>*) It won&#8217;t be a jar, but some other file format, but I doubt this is a relevant detail.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Miroslav Pokorny</title>
		<link>http://aniszczyk.org/2009/11/23/jigsaw-versioning-is-ridiculous/comment-page-1/#comment-1498</link>
		<dc:creator>Miroslav Pokorny</dc:creator>
		<pubDate>Mon, 23 Nov 2009 20:45:40 +0000</pubDate>
		<guid isPermaLink="false">http://aniszczyk.org/?p=1494#comment-1498</guid>
		<description>It appears figuring out versions requires modules to not only declare what they need bt also for modules to also delcare what they are eqivalent too. One cannot jst declare that a modle needs a particular range because a new release of said dependency could be compatible but perhaps had an unforseen increase in the version number that makes it out of range even though it is compatible. I believe a &quot;i-am-backward-compatible-with&quot; would help. Naturally this would probably only work provided the public api has not changed, and specifying such a value would imply that said module was a drop in replacement with no changes.</description>
		<content:encoded><![CDATA[<p>It appears figuring out versions requires modules to not only declare what they need bt also for modules to also delcare what they are eqivalent too. One cannot jst declare that a modle needs a particular range because a new release of said dependency could be compatible but perhaps had an unforseen increase in the version number that makes it out of range even though it is compatible. I believe a &#8220;i-am-backward-compatible-with&#8221; would help. Naturally this would probably only work provided the public api has not changed, and specifying such a value would imply that said module was a drop in replacement with no changes.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
