cabal and platform-independent haskell installation management (again) (Re: [Haskell-cafe] Re: Ubuntu and ghc)

Duncan Coutts duncan.coutts at worc.ox.ac.uk
Wed Jun 4 10:43:48 EDT 2008


On Wed, 2008-06-04 at 15:14 +0100, Claus Reinke wrote:
> > I think that's fundamentally the wrong approach.  We shouldn't have to 
> > build a "Haskell installation manager".  Would you also want installation 
> > managers for Perl, Python, Ruby, C, C++, etc. each with their own different 
> > user interfaces and feature sets?  I think not - you want a single package 
> > manager for the whole system from which you can install/uninstall libraries 
> > for any language.
> > 
> > This is something that Windows gets completely wrong.  Why do I have twelve 
> > icons in my status bar all representing little programs that are running in 
> > the background checking for updates to their own bits of software?  Why on 
> > earth do I have a Printer Driver Update Manager?  And I'd be wondering the 
> > same thing about a "Haskell installation manager": installation and 
> > dependencies are not something specific to Haskell.
> 
> why then do we have ghc-pkg, or cabal? surely the native package
> managers should handle all that?
> 
> there are (at least) two dimensions of uniformity: across different
> kind of software on a single kind of system, and with a single kind 
> of software across different kinds of system. platform-specific
> package managers hide the software-specific notions of package
> dependency maintainence, haskell-specific package managers
> hide the platform-specific notions of package dependency 
> maintainence. 
> 
> there is no need for platform- and haskell-specific tools to be 
> entirely separate or in conflict with each other: where both exist, 
> one can be a view on the other (if you are on linux-of-the-day, 
> you can use its package manage, independent of whether your
> packages are haskell or lisp; and if you are using haskell, you
> should be able to use its package manager, independent of
> whether you are on unix-variant-of-today or on 
> unix-variant-of-yesterday).
> 
> there seems to be a lot of confusion here, some of us not 
> understanding the issues because we happen to be using
> systems where "everything just works", others among us
> not understanding the issues because we happen to be
> using systems where "such things would never work anyway",
> and yet others insisting on "i'll do it my way, so i know what
> works" (and then, of course, there are those who are
> actively working on improving the situation who will see
> my criticism as constructive, i hope!-).
> 
> 1. there are no systems where "packages just work"!
>     there are systems where a few people ensure that
>     many people can live in such an illusion, though.

Yes indeed! :-)

> 2. systems with native package manager software still
>     need help from haskell-specific toolchains (unless
>     you want the human package managers on those
>     systems to code all haskell-specific dependencies
>     by hand).

Yes. As an illustration: gentoo has an "haskell-cabal.eclass" that
interfaces between ebuilds and cabal as the build manager and there is a
tool to generate ebuilds that use the haskell-cabal.eclass from .cabal
descriptions (so we get correct deps automatically).

> 3. systems without native package managers (or perhaps
>     i should say: systems on which users with unix background
>     traditionally avoid getting acquainted with the details and 
>     usage of whatever might pass as installation management 
>     on those systems) are still in *very* wide-spread use, 
>     and if haskell users on those systems are left out in the
>     rain, haskell developers will not be able to support those
>     systems. this limits the user and application base of haskell
>     on those systems, making haskell less relevant than it could be.

Eg Windows, OSX, Solaris.

> 4. haskell enables programming at a very high level of 
>     abstraction, with fairly good support for mostly platform
>     independent code. but that code needs to be installed, 
>     and integrated with dependencies and dependents, and 
>     the integrated haskell installations needs to be maintained.
>     and that should "just work", even if the developer is on
>     (1;2) and the user is on (3), or vice versa, or if developers
>     and users are on different flavours of (1;2) or (3).
> 
> with these clarifications out of the way, my interpretation 
> of cabal was that it set out to provide two things
> 
> (A) a uniform platform-independent interface to such a 
>     haskell package installation manager.
> (B) a uniform platform-independent toolchain to support
>     such a haskell package installation manager.

I guess so.

> on systems in the (1;2) class, human package managers 
> would use (B) to integrate haskell packages into the native
> package management software, so users might never even
> encounter cabal.

As in my example with the gentoo haskell packages above.

>  even so, (A) might offer a haskell-specific
> view on the general platform package management (when 
> you want to see the haskell gui libs rather than all gui libs).
> 
> on systems in the (3) class, users and developers would
> interface with (A/B) directly, for lack of a better alternative.
> 
> and developers/users in the (4) class would simply use
> (A/B), without having to check whether they are "real"
> or just a view on the platform-specific software. it is this
> cross platform view of software development that i'm
> most interested in (i'm one of those who use bash, vim,
> opera, and haskell, no matter whether i'm on windows,
> solaris, or whatever, and the cross-platform availability
> of those tools has saved me many a headache;-).
> 
> returning to my earlier message, it seems that my 
> concerns were mainly these:
> 
> - it isn't sufficient to worry about installation management,
>     one has to worry about integration, lifetime and uninstall
>     management as well. in short, maintain the dependency
>     graphs over any of "install"/"upgrade"/"uninstall".

For users in (1;2) class we would expect the native package manager to
do this.

> - for this to work, cabal needs to maintain not only
>     libraries as packages, but tools and compilers as
>     well. without this, some dependencies are not
>     recorded (this haddock depends on that ghc; to
>     build this package i need that tool; that tool was 
>     built with this ghc version, from those sources, etc). 
>     
>     and if the dependencies are not even recorded, they 
>     are likely to be broken if one does install/upgrade or
>     uninstall any haskell software, be it library, tool, or
>     compiler.

Right. Currently cabal-install in its roll as a secondary package
manager is very weak on that front. It does not record anything about
what it installs. There's clearly plenty of work to be done there.

> ps. i'd cc to libraries or cabal, but i don't know which
>     would be most appropriate (perhaps someone could
>     point readers there to this thread if that sounds relevant?).

You can cc both.

Duncan



More information about the Haskell-Cafe mailing list