About cabal and compatibility [Was: simplifying user hooks (non-backward-compatible)]

Robert Dockins robdockins at fastmail.fm
Sat Dec 10 18:26:53 EST 2005


[snip]

> This would greatly simplify the Distribution.Simple.UserHooks
> structure bringing it from 34 fields to 14 fields, or so.
>
> Downsides: Making pre and post hooks would now be slightly harder, and
> it would break existing hooks-using code.

I just want to mention that these kind of changes represent represent a VERY 
big problem. I discussed that issue at some length in an email I intended to 
send to this list very recently, but it seems to have gotten lost. 

So, to recap:

Suppose Alice writes a project A with a Cabal build system that relies on user 
hooks?  Now the interface changes.  Bob writes a Cabal build system using the 
new user hooks for project B.  Alice doesn't have time or inclination to 
update her build system (it still works right? Besides, Alice wants to work 
on project A; she doesn't want to rewrite her build system every time the 
cabal folks have a new good idea).  Now Jow (Debian package maintainer/gentoo 
haskell user/whatever) wants to build both projects A and B.  What version of 
Cabal should Joe have? How does he know how to enable the correct versions 
for which packages, and what versions of which packages?  Ugh! What a 
nightmare.

The interesting thing is that cabal seems to solve the versioning problem for 
most every library except itself!

The solution:

I suggest that the cabal team very seriously consider using the Eternal 
Compatibility in Theory method to manage interface change.

http://www.haskell.org/tmrwiki/EternalCompatibilityInTheory

Rob Dockins


More information about the Libraries mailing list