Hi everyone,<div><br></div><div>As anyone following this <span class="" style="background-color:yellow"><span class="" style>mailinglist</span></span> surely noticed, there are a few issues regarding <span class="" style="background-color:yellow"><span class="" style>haskell</span></span> packaging.</div>
<div><br></div><div>Lot of discussion is going on about how cabal contributes to the problems and how things could be fixed by making our tools smarter (which is a great thing to do IMHO).</div><div><br></div><div>I think though, that there might be other ways to deal with or at least reduce the problems.</div>
<div><br></div><div>One of those ways would be expressing the influence of changes in a package&#39;s public API, using the name of a package instead of just version numbers.</div><div><br></div><div>I mean, in case a major backwards incompatible/breaking change happens, one would change the name of the package/<span class="" style="background-color:yellow"><span class="" style>namespaces</span></span> a.s.o. And with breaking I really mean that kind of &quot;oh my ... now I have to rewrite this part of my application because of this&quot;. Simple additions to the API do not count as breaking because existing functionality is left alone.</div>
<div><br></div><div>This way, incompatible versions of the &quot;same&quot; library can coexist without any problems right within the same program if one chose to do so even allowing for improved transition processes for larger application I presume.  It would easily be possible to safely install newer versions of the same package without breaking things.</div>
<div><br></div><div>There are more open source libraries/projects as it seems, which use this approach (version number in the package name) such as the <span class="" style="background-color:yellow"><span class="" style>kdelibs</span></span>, <span class="" style="background-color:yellow"><span class="" style>gtk</span></span>, <span class="" style="background-color:yellow"><span class="" style>beautifulsoup</span></span>, <span class="" style="background-color:yellow"><span class="" style>apache</span> and bind</span>.</div>
<div><br></div><div>One example: take an application which needs two libraries A and B which both depend on library C. Now lets assume that A uses a slightly older version of C and B uses a version with a major incompatibility. In the current <span class="" style="background-color:yellow"><span class="" style>versioning</span></span> scheme, there could be major problems causing development delays or custom forks to emerge a.s.o.</div>
<div>But following the other naming method, in case library C chooses to introduce a major breaking change in the public API, a new package C2 is born, which can be used alongside C (and effectively is a different library anyway I think).</div>
<div>The choice for the new version of C (C2) is explicit within the name and all related things.</div><div><br></div><div>I am aware of the fact that this would take more forethought on library design, but I do not think that this alone would be a bad idea anyway.</div>
<div>Also it would be difficult to enforce this, but well, a good maintainer would be aware of this anyway, taking care of not introducing breaking changes to the public API I guess.</div><div><br></div><div>Furthermore we would end up with more packages with different names (but probably the same idea behind it) which would be on <span class="" style="background-color:yellow"><span class="" style>hackage</span></span>. Likely it would be nice to add some grouping or tagging features which would bind them together for everyone browsing the packages. But I think this is probably not a real problem but more a <span class="" style="background-color:yellow">cosmetic</span> one.</div>
<div><br></div><div>I really would like to see this discussed here. What would be the good and the bad of promoting this kind of <span class="" style="background-color:yellow"><span class="" style>versioning</span></span>.</div>
<div><br></div><div>I am looking forward to hear what you think.</div><div><br></div><div>Best regards,</div><div><br></div><div>Rico <span class="" style="background-color:yellow"><span class="" style>Moorman</span></span></div>