Packages in GHC 6.6
simonmar at microsoft.com
Tue Aug 22 06:11:46 EDT 2006
Here is what I propose to do regarding the libraries we ship with GHC
6.6. Comments are appreciated, since we need to finalise this story
before the release candidate at the end of this week.
For a while we have had the goal of devolving as many of the libraries
that ship with GHC as possible. With Cabal, this is now possible: you
can download GHC and then install 3rd-party packages with little hassle,
or upgrade libraries that came with your GHC installation.
So the days of the monolithic GHC+libraries installations should perhaps
come to an end. On the other hand, it's often quite useful to be able
to install a single distribution and get a comprehensive set of
libraries. The folks who package GHC for the deeply package-based OSs
like Debian, Gentoo and *BSD would like GHC to come with a minimal set
of libraries and install the others as separate packages.
Another consideration is that it's useful for our nightly builds to
build as many libraries as possible, so we can help catch bitrot.
However, the default GHC build now takes a very long time mostly due to
the huge set of libraries, and most people building GHC don't need to
build eg. OpenGL by default. What's more, the maintainers of many of
these libraries would like to be able to make releases independently of
So here's what I propose:
- A "GHC source tree" will contain a core set of packages. This is
what you will get if you download ghc-6.6-src.tar.bz2, or do
"sh darcs-all get" in a darcs repo. The core packages are:
base, haskell98, template-haskell, readline, stm,
Cabal, unix, Win32
plus hopefully regex-base and regex-posix if I integrate them this
week. These are the packages required to bootstrap GHC, or those
with deep GHC dependencies (template-haskell & stm).
- The core packages will have a stable API across patchlevel
releases of GHC (perhaps with the exception of Cabal). We will
fork the darcs repos of the core packages where necessary.
- A source tree can optionally be populated with more packages,
which will be included in the build as normal. At the moment,
the only packages you can add in this way are:
ALUT, HGL, HUnit, OpenAL, OpenGL, QuickCheck, X11, cgi,
fgl, haskell-src, html, mtl, network, parsec, time, xhtml
because we're still using GHC's build system to build packages
rather than Cabal. When we switch to using Cabal to build
packages inside a GHC build, then it will be possible to populate
the tree with any Cabal package.
Possibly we could also distribution an "extra libs" source
bundle containing these packages.
- We will continue to build all these packages in the nightly
builds. (but perhaps build failures in optional packages should
not break the whole build).
- darcs-all will have an option to grab the optional packages (all
the packages in the list above).
- Gentoo, Debian etc. will include only the core packages with GHC,
the others will become separate entities.
- We will continue to bundle the .tar.bz2 binary distributions, and
the Windows installer, with all the optional packages. Perhaps
there could also be minimal installers containing just the core
- We may have to change the set of core packages in the future, if
GHC accumulates more dependencies for example.
Any comments, or suggestions?
More information about the Cvs-ghc