[Haskell-cafe] versioning of Haskell packages
Daniil Elovkov
daniil.elovkov at gmail.com
Sat Apr 30 09:55:36 CEST 2011
On 30.04.2011 5:06, Rogan Creswick wrote:
> On Fri, Apr 29, 2011 at 3:05 PM, Daniil Elovkov
> <daniil.elovkov at gmail.com> wrote:
>> Hello list
>>
>> I have an idea on versioning of Haskell packages and a small question about
>> release model of Haskell Platform. Since the latter is shorter let's start
>> with it.
>>
>> So, what is the release model of Haskell Platform? Is it released every N
>> months and frozen at that point? Or some intermediate package/compiler
>> updates can make the new version to appear out of schedule?
>>
>> Now, about package versioning. Haskell packages are flourishing and evolving
>> at a high speed. Packages depend on other package and they evolve
>> asynchronously. In result it is easy to end up in need of multiple versions
>> of the same package in one program or maybe stumble upon other
>> conflicts/problems. I'm expressing myself a little vaguely because I don't
>> have a good example in my head right now.
>>
>> However, the idea is to maintain not just multi-digit version names that
>> don't carry any semantics except that 1.1.3 is later than 1.1.2, but also
>> somehow describe compatibility between versions.
>>
>> This way, even if the package A has jumped from 1.0 to 1.5 and the dependent
>> package B has been stagnant all this time (and B depends on A 1.0), if we
>> have information that 1.5 is compatible with 1.0, then we can safely use A
>> 1.5 while building B. Or we could use whatever version of A is found in the
>> system as long as its compatible with A 1.0 that B depends on.
>
> I think the PVP (Package Versioning Policy) covers a lot of what
> you're discussing, but I may misunderstand:
>
> http://www.haskell.org/haskellwiki/Package_versioning_policy
>
> We *do* still have some trouble maintaining / enforcing the PVP in
> general, and there are a few things that it doesn't cover (I don't
> believe exception behavior is covered, for example, although I'd argue
> that throwing more exceptions than a previous version introduces a
> substantial API change. Anyhow, that's a different rant. ;).
>
> Finer granularity would be great -- if it can be done autonomously.
>
> I think that raising awareness of the PVP and refining the tools to
> check for necessary version bumps would be a great step in the right
> direction.
>
Mmm, thanks for the link, it makes sense. Version numbers that encode
whether interface has changed or not.
But I would think it's useful to decouple version numbers and
specification of compatibility relation, that is not to encode it in
versions themselves but sepcify separately. Version numbers are simple
things. But compatibilty specification language can become more and more
sophisticated with time, versions numbers will immediately become
unsuitable for it.
You have mentioned exceptions. That's quite an advanced example. But why
not. In some very distant future, we may want to be able to say 'This
new version is compatible with the previous one but it throws more
exceptions'. Or 'the function f has the same interface but has become
more strict'.
Alright, those 2 examples are a bit too sophisticated maybe. But what I
envisioned in the first place is this. In my program/package I specify
the fact that I successfully built it with the package X version
A.B.C.D.E.F and I don't care about the versioning policies of X. When
the package X evolves to any version, as long as the author of X says
that it's compatible with the version I used it's safe to use the newer
version.
The key thing is not trying to predict the future but only telling that
I built it with this version and it works.
Also I think that fixing A.B digits for package interface may not always
be a good idea. If the interface is quite simple and very stable but the
implementaion evolves from beta to a finalised high-quality production
code, then it would be desirable to reflect the fact in the version.
And the last argument in favor of the separate compatibility
specification language would be that it should be somewhat easier to
force package authors to provide compatibilty information than to follow
versioning policy. Compatibilty data would sit in a separate cabal
headers/sections and cabal could complain if they are omitted. Of
course, the author could write some stubs there and not bother about it.
Also, at the bottom of the PVP wiki page there's a link to a blog post
'Eternal compatibility'. I'd think it's quite a radical approach to
include every older version of modules in every new release of the package.
--
Daniil Elovkov
More information about the Haskell-Cafe
mailing list