Thanks everyone for your comments, they have been really useful to get a handle on some hidden issues which I hadn’t considered deeply. It has been very helpful to make the project concrete. I’ve tried to summarise the four main issues and sticking points which people have raised so far.
We will do some work at Well-Typed to scope out these design points and propose some way to make progress. If there is anyone interested in collaborating then let me know!
We currently rely on base bounds to signal which GHC versions a package supports
For better or worse, build-depends: base >= … has become the ecosystem’s unofficial way of expressing compiler compatibility.
If base no longer tracks GHC releases, we lose a reliable way to express that a package only builds with a specific version of GHC. Thanks to @mniip and @george.fst for bringing this one up.
Cabal doesn’t yet provide a good way to specify compiler requirements
Mechanisms like if impl(ghc) or other-extensions either don’t work well, aren’t revision-safe, or don’t capture upper bounds on GHC.
Before reinstallability is safe, Cabal needs a proper, stable way for packages to say which versions of GHC or other compilers they work with. We need to do some more work to remove internal APIs from the base package.
A question which has been raised is whether it is better to have reinstallable base if packages will still have a tight bound on ghc-version. Packages will still need to be updated when a new compiler version comes out.
base and ghc-internal are still too intertwined
A lot of base’s implementation lives in ghc-internal.
That makes it hard to maintain base independently, because changes in ghc-internal can affect it, and contributors still have to go through the GHC repo.
Independent releases might only make sense once this boundary is clearer.
One concrete way to make progress would be deprecate some unstable modules - Formally deprecate modules informally marked unstable in #146 · Issue #299 · haskell/core-libraries-committee · GitHub
There is also a spreadsheet which explains the status of all the modules in base library. Base stability - Google Sheets
There will be an increased maintainership and coordination burden
If base becomes a normal, independently released library, we’ll need clearer boundaries and stronger coordination between GHC maintainers, CLC, and a new base-maintainers group.
It seems like there is desire in the community to go in this direction but it’s more work for someone.
It seems that the CLC is interested in this direction, but it would still need to be made more concrete.