[GHC DevOps Group] Making GHC's fast release cadence work

John Ericson john.ericson at obsidian.systems
Tue Jul 2 15:59:32 UTC 2019


Yeah there are many interlocking issues here. I've been thinking about 
writing one of those ecosystem proposals about this. Here's some 
observations about the status quo for now.

- Frequent releases are a really nice for feature for the community. I 
know I, for one, would be less motivated to work on GHC if it would take 
a year in some case for my contributions to trickle back to my day job. 
Rust releases every 6 *weeks*. I see no reason why we shouldn't aim for 
that.

- The GitLab move and switch to CI have made GHC development more 
accessible and, temporary Marge Bot issues aside, better scaling. I am 
immensely grateful for those that put in the work for that every MR I 
write. Going back to annual releases would feel like a regression, 
cancelling out some of those gains.

- Base really is a PVP mess. Only the messy guts actually make sense to 
pair with GHC releases, a breaking change every time. The "pure" bits 
would naturally have *fewer* breaking releases, but *more* non-breaking 
releases.

- AMP-like proposals could probably move faster if they weren't tied to 
GHC releases. I.e. if multiple GHC releases supported multiple class 
hierarchies, people could move at their own pace to some extent, and we 
could support faster *and* slower migrations.

- I hope GHC can move in a more modular direction, which by definition 
means farming off work to libraries. In other words, I think GHC should 
ultimately have the same degree of code reuse as any other Haskell 
project. But the current experience with submodules is excruciating, so 
no one dealing with GHC every day rightfully has any appetite for that. 
It's a pity because once it's done I think it would be *less* work for 
the core GHC team, there's just the awkward transition out of today's 
monolithic local maximum.

So all this needs leads me to conclude a few things

- Base must be broken up, so it can be released more often than GHC. 
Base would continue to exist reexport code in other libraries 
exclusively. New users, executables, and legacy code can continue to 
depend on base as before, but libraries are encouraged to adopt more 
fine-grained dependencies on the underlying libraries.

- the kicker: Any library that wishes to be included in GHC / base *must 
share maintainership* with the GHC release team / libraries committee, 
respectively/./ That means those groups can release things whenever they 
want to unblock themselves.
//

It's fairly clear-cut to me: having your library being included in GHC 
or base is a big honor, and so you should not be able to hold up the 
release process of these important projects unilaterally. If you want to 
keep full custody of your baby, that's fine, but it's worth not the 
precious time of the GHC/base developers to use it then. [Aim for, say, 
Haskell Platform inclusion rather than base inclusion.]

Granted, GHC, unlike Base, there is the alternative to use Cabal's new 
support for multiple versions of a package in the same package DB. But 
until will have private dependencies that would place some probably 
unpopular constraints on consumers of GHC-the-library. If GHC does 
migrate from ~10 to ~100 dependencies, maybe it might make sense to 
float that as an alternative, but seeing that is many GHC releases away 
no matter what, I think it's best to start with the shared 
maintainership policy.

  John

On 7/2/19 8:36 AM, Henning Thielemann wrote:
>
> On Tue, 2 Jul 2019, Simon Peyton Jones via Libraries wrote:
>
>>  1. What should GHC’s release cadence be? For example, would annual be
>>     better than semi-annual?  Herbert and
>>     Michael both think so, and they know a thing or two.   I’d love to
>>     hear from more people on this question.
>
> Annual is better for me. I do not need the latest and greatest GHC 
> features immediately. I am happy to get bugfixes quickly and easily 
> via hvr's ghc ppa.
>
> However, I'd prefer that libraries are separated from GHC and 'base' 
> would be split.
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries


More information about the Libraries mailing list