[GHC DevOps Group] Release policies
Simon Peyton Jones
simonpj at microsoft.com
Mon Dec 18 11:08:56 UTC 2017
This thread sounds as if it has been productive, though I have not followed the details.
Does anyone feel able to draw it together into a proposed release policy? Along with a summary of the reasoning that led to it?
Thanks
Simon
| -----Original Message-----
| From: Ghc-devops-group [mailto:ghc-devops-group-bounces at haskell.org] On
| Behalf Of Boespflug, Mathieu
| Sent: 18 December 2017 11:03
| To: Manuel M T Chakravarty <manuel.chakravarty at tweag.io>
| Cc: ghc-devops-group at haskell.org; ghc-devs at haskell.org Devs <ghc-
| devs at haskell.org>
| Subject: Re: [GHC DevOps Group] Release policies
|
| I think Mikhail's point is that if a package says build-type: Simple, then
| we know exactly what its Setup.hs says, and therefore also which part of the
| Cabal API it's using. Easy enough to keep that part stable even if others
| change. Case in point: Cabal-2.0 brought a number of changes to the overall
| API, but nothing that broke calling defaultMain from Distribution.Simple
| (which is what a build-type: Simple script does). At the end of the day the
| consumers of the wider Cabal API are pretty small. A substantial number of
| misc packages on Hackage do it but rarely heavily. Other than that it
| essentially comes down to Stack, cabal-install, Haskell For Mac and... any
| others?
|
| My takeaway from the discussion so far is that the number of heavy consumers
| looks small enough that a draconian BC policy for Cabal-the-library sounds
| overkill, provided, crucially, that everything is in place, by GHC feature
| freeze at the very latest, to allow a smooth migration. A "smooth
| transition" means having a migration guide available before start of feature
| freeze etc, but to Ben's concern stated earlier in this thread (about
| GHC/upstream coupling), ideally also a release.
|
| I should note that to the extent that GHC tracks upstream releases only (not
| git commits in unknown state), GHC can be released on a timely schedule
| without needing any coordination from upstream maintainers to await new
| releases on their part. So quite apart from the Cabal thing specifically,
| it's worth thinking about asking that the versions of all upstream packages
| only make it into GHC, at the behest of their respective maintainers, after
| a new release of upstream is made. This was already proposed earlier in the
| thread:
|
| > * [Proposal:] GHC does not track git commits of upstream dependencies
| > in an unknown state of quality, but tracks vetted and tested releases
| > instead.
|
| Potentially, this could even mean drastically cutting down on the number of
| git submodules carried in the GHC repo. Since these packages could as well
| be downloaded from Hackage.
|
|
| On 18 December 2017 at 05:04, Manuel M T Chakravarty
| <manuel.chakravarty at tweag.io> wrote:
| > Yes, you are right Haskell for Mac also links against Cabal-the-library
| and API changes have regularly required me to fix my code. I guess, I have
| never been particularly stressed about it, because I also link against GHC
| API and that doesn’t even know how to spell API stability — i.e., changes
| required by Cabal are usually drowned out by the chaos inflicted by GHC.
| >
| > In any case, you are making a good point.
| >
| > Mikhail, I don’t understand your response to Mathieu at all. What does the
| build-type have to do with this?
| >
| > Cheers,
| > Manuel
| >
| >> 15.12.2017, 19:41 Boespflug, Mathieu <m at tweag.io>:
| >>
| >> Thanks for the feedback, Michael.
| >>
| >> Manuel, I believe you are also a Cabal-the-library consumer in Haskell
| For Mac?
| >>
| >> Michael, you brought up another problem tangentially related to the
| >> original integer-gmp issue but that was not in my original list
| >> earlier in this thread:
| >>
| >> * Cabal-2.0.0 had breaking changes in the API.
| >>
| >> This means that by association GHC itself broke BC, because it
| >> shipped with Cabal-2.0, without the usual grace period.
| >>
| >> Now, there are far fewer users of Cabal than of base. All, Michael in
| >> his previous email seems to be okay with breaking changes in Cabal
| >> given the conditions he stated (2 months grace period, advance notice
| >> of when the 2 months start). And perhaps this points to the lack of a
| >> need for the regular grace period applying to Cabal. How many other
| >> users of Cabal-the-library are there? In principle, every single
| >> Hackage package out there, which all have a Setup.hs script. Most of
| >> them are trivial, but how many did break because of these API changes?
| >> I for one am pretty happy for Cabal to move fast, but I'm concerned
| >> that these breaking changes happened without any kind of advance
| >> notice. To Simon's original point - there does not to be a clear
| >> policy and a good process surrounding Cabal itself and other GHC
| >> dependencies. So far we discussed mostly metadata changes, not API
| >> changes.
| >>
| >> And to be clear, folks did get some (post facto) notice in September:
| >> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcoldw
| >> a.st%2Fe%2Fblog%2F2017-09-09-Cabal-2-0.html&data=02%7C01%7Csimonpj%40
| >> microsoft.com%7Ca4ef8935c10c4da1766f08d546070073%7C72f988bf86f141af91
| >> ab2d7cd011db47%7C1%7C0%7C636491918245390697&sdata=YNAuG7XcS9NiRMyklKe
| >> 1LyL6LrxKr%2BlIsu6oxFXb%2Byg%3D&reserved=0. That's helpful, but I
| >> submit that in the future this really should be part of the GHC release
| announcement (which happened over a month before that), and in fact a
| migration guide circulated before the feature freeze, so downstream tooling
| authors can adapt. If this is not possible, then perhaps it's premature for
| GHC to include that given Cabal release.
| >> Again, GHC should always have the option to stick to the old Cabal
| >> version until things get ironed out.
| >>
| >>
| >> On 15 December 2017 at 08:42, Michael Snoyman <michael at snoyman.com>
| wrote:
| >>>
| >>>
| >>> On Thu, Dec 14, 2017 at 12:27 PM, Boespflug, Mathieu <m at tweag.io> wrote:
| >>>
| >>> [snip]
| >>>
| >>>> * Or a middle ground: make feature freeze a thing. Meaning that for
| >>>> a couple of months before a major GHC release, the major new Cabal
| >>>> isn't technically released yet, but like GHC itself within this
| >>>> period, it's pretty staid, so not so much a moving target, and
| >>>> something downstream tooling authors can possibly adapt to even
| >>>> without any grace period on new metadata features. This assumes
| >>>> that the 2 months of feature freeze are enough time for downstream
| >>>> tooling. Thoughts from any of those maintainers?
| >>>>
| >>>
| >>> Short answer: if there's a clear idea in advance of when this
| >>> feature freeze is going to happen, I think we can coordinate
| >>> releases of downstream tooling (Stack being the most important, but
| >>> stackage-curator playing in as well) so that 2 months is sufficient.
| >>> I'll talk with the rest of the Stack team to see if there are any
| concerns.
| >>>
| >>> Longer answer: Stack intentionally avoids depending on the internals
| >>> of Cabal wherever possible. Instead of calling library functions
| >>> directly from within Haskell code to perform builds, for example, it
| >>> interacts with the Setup.hs files over their command line interface.[1]
| This has two results:
| >>>
| >>> * Stack can usually start using new GHC/Cabal versions without a new
| >>> Stack release, since it's just shelling out for the actual build
| >>> * There's not usually very much code churn needed in Stack to
| >>> upgrade to a newer Cabal release
| >>>
| >>> This past release was an exception because of all of the changes
| >>> that landed, both the new cabal grammar to support the ^>= operator
| >>> (making the old parser incapable of lossily parsing new files) and
| >>> API changes (I think mostly around Backpack, though there was some
| >>> code cleanup as well). In particular, the main interface we need
| >>> from Cabal—the package description data types and parser—changed
| >>> significantly enough that it took significant effort to upgrade.
| >>> There were also new features added (like sub libraries and foreign
| >>> libraries) that weren't immediately supported by the old Stack version,
| and had to be manually added in.
| >>>
| >>> Tying this up: generally upgrading to a new Cabal release should be
| >>> fine, and the only concern I'd have is fitting it into a release
| >>> schedule with Stack. The complications that could slow that down are:
| >>>
| >>> * Changes to the command line interface that Stack uses (hopefully
| >>> those are exceedingly rare)
| >>> * Major overhauls to the Stack-facing API
| >>>
| >>> Michael
| >>>
| >>> [1] This allows for more reproducible builds of older snapshots,
| >>> insuring that the exact same Cabal library is performing the builds
| >> _______________________________________________
| >> Ghc-devops-group mailing list
| >> Ghc-devops-group at haskell.org
| >> https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devops-group
| >
| _______________________________________________
| Ghc-devops-group mailing list
| Ghc-devops-group at haskell.org
| https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devops-group
More information about the Ghc-devops-group
mailing list