[GHC DevOps Group] Release policies

Boespflug, Mathieu m at tweag.io
Wed Dec 13 22:11:26 UTC 2017


> * Note: today, users are effectively tied to whatever version of the
packages ships with GHC (i.e. the "reinstallable" bit is problematic today
for various technical reasons). That's why a breaking change in bytestring
is technically a breaking change in GHC.

By the way, this is why I think GHC should strive to *reduce* as much as
possible the set of libraries it ships with and exposes in ghc-pkg by
default. e.g. if GHC did not expose bytestring, then tools like Stack that
insist that only one version of any library be in any given package set
could freely upgrade to a new bytestring major version. And GHC wouldn't
need to impose its 3-version policy on bytestring. I suspect this is not
technically possible in the case of bytestring, but what about e.g. time or
xhtml?

--
Mathieu Boespflug
Founder at http://tweag.io.

On 13 December 2017 at 23:03, Boespflug, Mathieu <m at tweag.io> wrote:

> [replying to ghc-devops-group@, which I assume based on your email's
> content is the mailing list you intended.]
>
> Hi Simon,
>
> feedback from downstream consumers of Cabal metadata (e.g. build tool
> authors) will be particularly useful for the discussion here. Here are my
> thoughts as a bystander.
>
> It's worth trying to identify what problems came up during the integer-gmp
> incident in Trac #14558:
>
> * GHC 8.2.1 shipped with integer-gmp-1.0.1.0 but the release notes said
> otherwise.
> * GHC 8.2.1 shipped with Cabal-2.0.0.2, but specifically claimed in the
> release notes that cabal-install-1.24 (and by implication any other build
> tool based on Cabal-the-library version 1.24) was supported: "GHC 8.2 only
> works with cabal-install version 1.24 or later. Please upgrade if you have
> an older version of cabal-install."
> * GHC 8.2.2 also claimed Cabal-1.24 support.
> * GHC 8.2.1 was released in July 2017 with Cabal-2.0.0.2, a brand new
> major release with breaking changes to the metadata format, without much
> lead time for downstream tooling authors (like Stack) to adapt.
> * But actually if we look at their respective release notes, GHC 8.2.1 was
> relased in July 2017, even though the Cabal website claims that
> Cabal-2.0.0.2 was released in August 2017 (see
> https://www.haskell.org/cabal/download.html). So it looks like GHC didn't
> just not give enough lead time about an upstream dependency it shipped
> with, it shipped with an unreleased version of Cabal!
> * Libraries that ship with GHC are usually also uploaded to Hackage, to
> make the documentation easily accessible, but integer-gmp-1.0.1.0 was not
> uploaded to Hackage until 4 months after the release.
> * The metadata for integer-gmp-1.0.1.0 as uploaded to Hackage differed
> from the metadata that was actually in the source tarball of GHC-8.2.1 and
> GHC-8.2.2.
> * The metadata for integer-gmp-1.0.1.0 as uploaded to Hackage included
> Cabal-2.0 specific syntactic sugar, making the metadata unreadable using
> any tooling that did not link against the Cabal-2.0.0.2 library (or any
> later version).
> * It so happened that one particular version of one particular downstream
> build tool, Stack, had a bug, compounding the bad effects of the previous
> point. But a new release has now been made, and in any case that's not a
> problem for GHC to solve. So let's keep that out of the discussion here.
>
> So I suggest we discuss ways to eliminate or reduce the likelihood of any
> of the above problems from occurring again. Here are some ideas:
>
> * GHC should never under any circumstance ship with an unreleased version
> of any independently maintained dependency. Cabal is one such dependency.
> This should hold true for anything else. We could just add that policy to
> the Release Policy.
> * Stronger still, GHC should not switch to a new major release of a
> dependency at any time during feature freeze ahead of a release. E.g. if
> Cabal-3.0.0 ships before feature freeze for GHC-9.6, then maybe it's fair
> game to include in GHC. But not if Cabal-3.0.0 hasn't shipped yet.
> * The 3-release backwards compat rule should apply in all circumstances.
> That means major version bumps of any library GHC ships with, including
> base, should not imply any breaking change in the API's of any such library.
> * GHC does have control over reinstallable packages (like text and
> bytestring): GHC need not ship with the latest versions of these, if indeed
> they introduce breaking changes that would contravene the 3-release policy.
> * Note: today, users are effectively tied to whatever version of the
> packages ships with GHC (i.e. the "reinstallable" bit is problematic today
> for various technical reasons). That's why a breaking change in bytestring
> is technically a breaking change in GHC.
> * The current release policy covers API stability, but what about
> metadata? In the extreme, we could say a 3-release policy applies to
> metadata too. Meaning, all metadata shipping with GHC now and in the next 2
> releases should be parseable by today's version of Cabal and downstream
> tooling. Is such a long lead time necessary? That's for build tool authors
> to say, and a point to negotiate with GHC devs.
> * Because there are far fewer consumers of metadata than consumers of say
> base, I think shorter lead time is reasonable. At the other extreme, it
> could even be just the few months during feature freeze.
> * The release notes bugs mentioned above and the lack of consistent upload
> to Hackage are a symptom of lack of release automation, I suspect. That's
> how to fix it, but we could also spell out in the Release Policy that GHC
> libraries should all be on Hackage from the day of release.
>
> Finally, a question for discussion:
>
> * Hackage allows revising the metadata of an uploaded package even without
> changing the version number. This happens routinely on Hackage today by the
> Hackage trustees. Should this be permitted for packages whose release is
> completely tied to that of GHC itself (like integer-gmp)?
>
> Best,
>
> Mathieu
>
>
> On 13 December 2017 at 17:43, Simon Peyton Jones via ghc-devs <
> ghc-devs at haskell.org> wrote:
>
>> Dear GHC devops group
>>
>> The conversation on Trac #14558
>> <https://ghc.haskell.org/trac/ghc/ticket/14558> suggests that we might
>> want to consider reviewing GHC’s release policies
>> <https://ghc.haskell.org/trac/ghc/wiki/WorkingConventions/Releases>.
>> This email is to invite your input.
>>
>> The broad questions is this. We want GHC to serve the needs of all its
>> users, including downstream tooling that uses GHC.  What release policies
>> will best support that goal?  For example,  we already ensure that GHC 8.4
>> can be compiled with 8.2 and 8.0.  This imposes a slight tax on GHC
>> development, but it means that users don't need to upgrade quite as often.
>>  (If the tempo of releases increases, we might want to increase the window.)
>>
>> Trac #14558 suggests that we might want to ensure the metadata on GHC’s
>> built-in libraries is parsable with older Cabals.  One possibility would be
>> this:
>>
>>    - Ensure that the Cabal metadata of non-reinstallable packages (e.g.
>>    integer-gmp) shipped with GHC be parsable by the Cabal versions shipped
>>    with the last two major GHC releases [i.e. have a sufficiently old
>>    cabal-version field].  That is, in general a new Cabal specification will
>>    need to be shipped with two GHC releases before GHC will use start using
>>    its features in non-reinstallable packages.
>>    - Upholding this policy won't always be possible. There may be cases
>>    (as is the case Hadrian for GHC 8.4) where the benefit of quickly
>>    introducing incompatible syntax outweighs the need for compatibility. In
>>    this (hopefully rare) case we would explicitly advertise the
>>    incompatibility in the release documentation, and give as much notice as
>>    possible to users to allow downstream tools to adapt.
>>    - For reinstallable packages, of which GHC is simply a client (like
>>    text or bytestring), we can’t reasonably enforce such a policy, because GHC
>>    devs have no control over what the maintainers of external core libraries
>>    put in their Cabal files.
>>
>> This is just a proposal.  The narrow questions are these:
>>
>>    - Would this be sufficient to deal with the concerns raised in #14558?
>>    - Is it necessary, ow would anything simpler be sufficient?
>>    - What costs would the policy impose on GHC development?
>>    - There may be matters of detail: e.g. is two releases the right
>>    grace period. Would one do?
>>
>> Both the broad question and the narrow ones are appropriate for the
>> Devops group.
>>
>> Thanks!
>>
>> Simon
>>
>> _______________________________________________
>> ghc-devs mailing list
>> ghc-devs at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devops-group/attachments/20171213/3e4f5ffa/attachment-0001.html>


More information about the Ghc-devops-group mailing list