Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Impact assement of breakage caused by mtl-2.3 #136

Closed
mpickering opened this issue Feb 23, 2023 · 64 comments
Closed

Impact assement of breakage caused by mtl-2.3 #136

mpickering opened this issue Feb 23, 2023 · 64 comments
Labels
meta General questions on CLC rules and policies

Comments

@mpickering
Copy link

This new release has caused major ecosystem breakage which I believe the CLC should be aware of.

  • The exposure of this issue has been limited to far because stackage snapshots are still using mtl-2.2.
  • GHC-9.6 will necessitate stackage moving to mtl-2.3 and GHC-9.6 bundles mtl-2.3.

A list of known affected packages are:

FailT (relies on MonadFix coming from reexport, no version bound)
HPDF (relies on reexports, no mtl version bound)
emacs-module (relies on reexports, no mtl version bound)
eventstore (relies on reexports, no mtl version bound)
htoml-parse (relies on reexports, no mtl bound)
mock-time (relies on reexports, no version bound)
mstate (relies on reexports, no version bound)
persistent-refs (relies on reexports, no version bound)
scalpel-core (relies on reexports, no version bound)
slackprogress-bar (relies on reexports, no version bound)
transient (relies on reexports, no version bound)
validationt (relies on reexports, no version bound)

aeson-typscript (relies on reexports, no version bound)
cron (relies on reexports, no version bound)
fortran-src (relies on reexports, < 3 bound)
frisby (relies on reexports, no version bound)
haxr (relies on reexports, no version bound)
hedis (relies on reexports, no version bound)
highlighting-kate (relies on reexports)
jl (relies on reexports)
logstash  (relies on reexports)
libgit  (relies on reexports)
oauthenticated  (relies on reexports)
persistent-discover  (relies on reexports)
persistent-documentation  (relies on reexports)
persistent-postgresql  (relies on reexports)
pretty-types  (relies on reexports)
sydtest  (relies on reexports)
vivid  (relies on reexports)
xml-conduit-writer  (relies on reexports)

happy-meta (removal of Control.Monad.Error)
mixed-types-num (removal of Control.Monad.Error)

The migration is quite simple but I believe the breakage to be significant because many of these packages

  • Have not had to be updated in a long time
  • Are not regularly updated so waiting for updates will slow adoption of 9.6 release
  • No impact assessment to the scale of the breakage was performed to my knowledge before the release was made.

Can the CLC please analyse this information and take ownership for the changes to this core library in the 9.6 release?

@mpickering
Copy link
Author

There are also these affected packages which have patches in head.hackage:

singletons-th-3.1.patch
cryptol-2.13.0.patch
sbv-9.0.patch
arith-encode-1.0.2.patch
diagrams-contrib-1.4.5.patch
mfsolve-0.3.2.1.patch
futhark-server-1.2.1.0.patch
futhark-0.22.7.patch
what4-1.3.patch
statestack-0.3.1.patch
haskeline-0.7.5.0.patch
futhark-data-1.1.0.0.patch
parameterized-utils-2.1.6.0.patch
Chart-diagrams-1.9.4.patch
diagrams-postscript-1.5.1.patch
refinery-0.4.0.0.patch
hgeometry-0.14.patch
blaze-svg-0.3.6.1.patch
endo-0.3.0.1.patch
hgeometry-combinatorial-0.14.patch
winery-1.4.patch
language-c-quote-0.13.patch
freer-simple-1.2.1.2.patch
operational-0.2.4.1.patch
cubicbezier-0.6.0.6.patch

@phadej
Copy link

phadej commented Feb 23, 2023

mtl is not governed by CLC.

@hasufell
Copy link
Member

mtl is not governed by CLC.

Yes, but I think we can support the migration effort.

@Kleidukos
Copy link
Member

Kleidukos commented Feb 23, 2023

Is the README out of date? I'm pretty sure I'm reading mtl here:

Screenshot 2023-02-23 at 19-31-00 haskell_core-libraries-committee

@Bodigrim
Copy link
Collaborator

To be precise, CLC governs but not maintains mtl, which means that CLC can appoint new or additional maintainers, but does not approve changes.

It was known for a long time (e. g., haskell/mtl#74 (comment)) that this is indeed a very significant breakage. Judging from my experience it is even more painful for applications than for libraries.

@david-christiansen it's a nice opportunity for HF to shine and help with development of migration tools, because sponsors of HF are most certainly to benefit greatly from them.

@TeofilC
Copy link

TeofilC commented Feb 23, 2023

I've opened ndmitchell/hlint#1460 to add a feature to ease stuff like this. I probably won't have the capacity to implement it though.

@mpickering
Copy link
Author

@Bodigrim So the CLC is on-board and takes responsibility with shipping mtl-2.3.1 with ghc-9.6.1?

@Bodigrim
Copy link
Collaborator

@mpickering As I said, CLC does not approve changes to mtl, so the responsibility for changes is with respective maintainers and they should be the first point of contact. Only if a discussion with mtl maintainers does not come to an amicable resolution, the question can potentially be escalated to CLC requesting a nuclear option to install or change maintainers team on the grounds of unsatisfactory performance.

To be fair, this is not a last-minute breakage at all. The change has been proposed back in 2019 and mtl-2.3 RC was first advertised in 2021 with a release in H1 2022. During all this time I was probably the most vocal opponent (haskell/mtl#74 (comment), haskell/mtl#68 (comment), haskell/mtl#101 (comment)), but almost everyone else seemed pretty much content with the breakage and maintainers were unanimous in their decision. There've been literally years to raise an objection.

Please raise an issue at https://github.com/haskell/mtl/issues, that's a better place to discuss opportunities and solutions.

@Ericson2314
Copy link
Contributor

Also to harp on one of the things that I often harp on, we should strive not to bundle breaking changes together! Questions:

  • Does 9.4 ship with mtl? Can we make patch release of it that ships with 2.3?
  • Can we make a version of 9.6 that ships with 2.2?

One should be able to upgrade compiler without breaking changes to mtl or any other such library. The whole of the breakage when things must be upgraded in lockstep is worse than the sum of its parts.

@david-christiansen it's a nice opportunity for HF to shine and help with development of migration tools, because sponsors of HF are most certainly to benefit greatly from them.

Absolutely agreed. And I think the lower hanging fruit is this ensuring one can use either compiler with either library.

@Bodigrim
Copy link
Collaborator

Bodigrim commented Feb 23, 2023

And I think the lower hanging fruit is this ensuring one can use either compiler with either library.

It's already the case unless you depend on ghc-the-library. Or is it reinstallable in GHC 9.6?

@Kleidukos
Copy link
Member

Does 9.4 ship with mtl? Can we make patch release of it that ships with 2.3?

Personal opinion, but I'd advise against shipping a new major version of a library with a minor release of the compiler ;-)

@emilypi
Copy link
Member

emilypi commented Feb 23, 2023

I'm confused as to what the issue is here @mpickering , since mtl-2.3 is not a new release. But I'm noticing that many of the packages that are broken have a common theme:

  • relies on reexports
  • has no version bound

We released a fixed version (mtl-2.3.1), deprecated mtl-2.3, and provided a migration guide 5 months ago. If packages are not being maintained and got bitten by, well, not being maintained, then I don't see what there is to do here.

@gbaz
Copy link

gbaz commented Feb 24, 2023

I want to highlight one odd (to me) thing from the initial post to this thread:

The migration is quite simple but I believe the breakage to be significant because many of these packages

  • Have not had to be updated in a long time
  • Are not regularly updated

I mean yes, of course, the packages that will be affected most by a breaking change are definitionally those which have not been tracking any changes or getting any updates or attention from their maintainers!

So I think that these qualities of the enumerated packages do not make the breakage more or less significant. Rather, they are just the qualities which, almost by the laws of nature, will necessarily be possessed by those packages which have not been updated to be compatible with a relatively long-released (but not shipped with ghc) update to a library near the root of the dependency tree.

I draw no conclusions from this about any choice of what library to ship or anything else. I just want to note this observation.

@mpickering
Copy link
Author

The critical question is which version of mtl we ship with GHC. It seems that the CLC does not want to take responsibility for this decision so that choice is then left to the GHC maintainers about which version we want to ship with.

Recently we have been under a lot of pressure to reduce breaking changes with releases.

The key point is that the choice that the choice of mtl we choose to ship determines which version is used by the stackage snapshot.

Therefore, we have to carefully consider whether the benefit of upgrading to mtl-2.3 is worth the breakage incurred by the release.


@Bodigrim The scale of the impact of this change has been shielded until now because stackage snapshots fix the mtl version to the version shipped by GHC. I suppose I can only speak for myself but I wasn't aware of the impact this would have until a few months ago.


@emilypi I don't feel like it's a very pragmatic viewpoint to take, if we are changing fundamental things in the ecosystem then we have to be proactive about understanding and mitigating the impact.


@Ericson2314 We can't bump to a major version of a library in a point release for precisely the reason due to the amount of breakage it causes.


@gbaz I think my point is Gershom is that if there are long-standing stable parts of the ecosystem (such as mtl) then changing those has to be taken with utmost care as otherwise the impact can be much more significant than modifying something which frequently changes.

@treeowl
Copy link

treeowl commented Feb 24, 2023

People are getting way too conservative. Anyone who wants to keep using unmaintained packages is welcome to keep using an old GHC version as well.

That said, I'm a bit curious why mtl leaks through the GHC API. Is there a good reason for it?

@tomjaguarpaw
Copy link
Collaborator

I welcome that team GHC is being proactive about issues related to breaking changes.

What would happen if we shipped mtl-2.2 with GHC 9.6? Anyone who wants to use mtl-2.3 would still be free to do so, in principle[*], except if they also want to depend on the ghc package, and perhaps some other unusual packages.

[*] Perhaps the problem is related to Stackage specifically: it doesn't allow choice of versions, which superficially sounds like a good idea but in practice causes problems like this.

@treeowl
Copy link

treeowl commented Feb 24, 2023

Yes, Stackage is the problem. I don't think waiting another five years to upgrade mtl will make the transition any easier.

@mpickering
Copy link
Author

That said, I'm a bit curious why mtl leaks through the GHC API. Is there a good reason for it?

ghc depends on the exceptions library which depends on mtl.

@mpickering
Copy link
Author

I welcome that team GHC is being proactive about issues related to breaking changes.

What would happen if we shipped mtl-2.2 with GHC 9.6? Anyone who wants to use mtl-2.3 would still be free to do so, in principle[*], except if they also want to depend on the ghc package, and perhaps some other unusual packages.

[*] Perhaps the problem is related to Stackage specifically: it doesn't allow choice of versions, which superficially sounds like a good idea but in practice causes problems like this.

Yes, this is exactly the point @tomjaguarpaw, we have to engage with this issue now so that when the release happens there's a record about this choice being carefully considered.

and yes, that's also exactly right, you are only forced into mtl-2.3 if you also depend on ghc library or your package is in stackage.

@tomjaguarpaw
Copy link
Collaborator

Yes, Stackage is the problem

I may still be missing something. It seems like it should be possible to patch all packages currently in Stackage so that they compile with both mtl-2.2 and mtl-2.3. Has that process hit a snag somewhere? The patches haven't been produced? Maintainers haven't applied them and made new releases?

@hasufell
Copy link
Member

hasufell commented Feb 24, 2023

The critical question is which version of mtl we ship with GHC. It seems that the CLC does not want to take responsibility for this decision so that choice is then left to the GHC maintainers about which version we want to ship with.

I think this is a great point.

We could have pre-release meetings with CLC and some of the relevant library maintainers to decide on which boot libraries to bump and document that decision. I think this is a good idea in general, since I also remember some hiccups wrt the last unix pin in GHC.

Formally, I think CLC and both core lib maintainers can only give suggestions, since it's ultimately GHC that bundles those libraries.

Since none of those breaking changes to core libs require a proposal, CLC also can't demand the maintainers to perform any specific work wrt the breaking changes.

From what I understand, you're asking for two things:

  1. who will take the heat once the community realizes the breaking change?
  2. are there any volunteers for patches?

Wrt 1. I think you're clear if the mtl maintainers recommend to bump it for the next GHC release.

Wrt 2. I think we could coordinate this on the stackage issue tracker maybe. That has worked well for the aeson migration, afair. @juhp?

@mpickering
Copy link
Author

I don't think anyone has set out to systematically patch affected packages, since this is not an issue with base but with mtl which doesn't have the same process for these kinds of changes.

@tomjaguarpaw
Copy link
Collaborator

I don't think anyone has set out to systematically patch affected packages

OK, I think that's something that should be done. Perhaps no individual or body has formal responsibility for it, in which case we should try to find someone or some body who is willing. "We" here is "individuals who care" (including myself) since neither has anyone responsibility for appointing a responsible person.

If others agree with me then perhaps we can generate enough momentum to gather volunteers, appoint leadership, etc..

@dcoutts
Copy link

dcoutts commented Feb 24, 2023

Could this problem be solved by:

  1. shipping the old mtl (2.2?) in ghc 9.6
  2. introducing (in ghc 9.8) the ability to have a deprecation warning on a re-export (e.g. pragma in the export list)
  3. release of mtl-2.3.x using the deprecation pragmas
  4. bundle said mtl-2.3.x with ghc-9.8
  5. library and application maintainers get the re-export warnings and fix their packages over a cycle or two
  6. mtl eventually drops the re-exports after long enough for most downstream packages to have been updated

@phadej
Copy link

phadej commented Feb 24, 2023

library and application maintainers get the re-export warnings and fix their packages over a cycle or two

They won't. The problem is packages which are not actively maintained. Remember how many pings is sometimes required to make some (trivial) changes in a dependency.

@dcoutts
Copy link

dcoutts commented Feb 24, 2023

Ok, but it gives them a lot longer to be updated. So that will fix a portion of them.

And the change in mtl is not exactly urgent. One might even argue that it can comply with the PVP (as was the original request) just using deprecation warnings and never removing the re-exports :-)

@phadej
Copy link

phadej commented Feb 24, 2023

And the change in mtl is not exactly urgent.

The transformers-0.6 was released in July 2021 (GHC-9.2.1 was released in October 2021), mtl-2.3 adopts to breaking changes there, and bundles own pending breaking changes (that bundling has been discussed to death, it's less worst option - avoiding many successive major releases).

I say if GHC won't bundle transformers-0.6 in GHC-9.6 it will be fair to say that evolution of bundled libraries is completely stale.

@TeofilC
Copy link

TeofilC commented Feb 24, 2023

FWIW I think the key thing to ease something like this is a quick-fix type thing rather than a warning.
I think it would be much more fruitful to put our limited energy into a feature for hlint, retrie, or HLS that can automatically fix this rather than a warning.

Another thing to keep in mind is that external tooling becomes available to people a lot sooner than GHC versions. LTS is still on 9.2 and some people still use 8.10.


My personal view on all this as someone with no authority is that we should keep mtl-2.3 for 9.6 and drum up some volunteers to submit patches to libraries before Stackage upgrades nightly. I'd be happy to help with this. I've already submitted patches for most of the libraries in my work apps footprint.

@tomjaguarpaw
Copy link
Collaborator

I think it would be much more fruitful to put our limited energy into a feature for hlint, retrie, or HLS that can automatically fix this rather than a warning.

I think this is a great idea, but unfortunately I must point out it's been a great idea that people have had over at least the decade that I have been using Haskell, and it has never happened. My guess is it's not likely to happen, and certainly not soon enough to fix any particular example of breakage.

@TeofilC
Copy link

TeofilC commented Feb 24, 2023

My guess is it's not likely to happen, and certainly not soon enough to fix any particular example of breakage.

Indeed, often in discussions like this hypothetical solutions are offered without anyone following through.
I definitely think we shouldn't kick a change like this into the long grass in the hope that someone develops a quickfix at some point.

I feel as well that often the effort to develop a quickfix can far outweigh the effort to go without it and write patches by hand. Though as someone who isn't familiar with the internals of HLS/hlint/retrie I can't really judge.

Though in this instance I feel like it shouldn't take too much effort. HLS already has refine imports, which is a superset of this and HLint already has warning on badidents.

@treeowl
Copy link

treeowl commented Feb 24, 2023

@dcoutts Many people seem content to ignore warnings altogether until they turn into errors. A library that's not actively maintained won't produce any of those until someone not responsible for maintaining it runs into a problem.

@hsyl20
Copy link

hsyl20 commented Feb 24, 2023

Suppose that someone else (i.e. not the maintainer) adapts the library for changes and submits a PR. All the maintainer has to do is accept the PR and make a release to Hackage.

As the maintainer by default of HPDF, that's probably what will happen for this package. I don't even use it so I won't see any potential warning.

@hasufell
Copy link
Member

@chshersh I understand your points, but hackage is not everyone's private repository. It's a shared community space. Sure, it doesn't have strong policies or guarantees, but the existence of hackage trustees and their power to apply GHC compat patches in maintainers absence is a very clear signal that this is true: hackage is a shared space.

I don't know if that allows us to draw any conclusions or make any actual changes, but my opinion is that users who don't intend to maintain their packages anymore should either:

  • deprecate their package properly on hackage
  • find successors/new maintainers
  • don't complain if it's taken over or eventually patched without their consent

The main problem is that hackage trustees can't really work in batch-mode. It would be cool to have a proper notification system and be able to just apply the patches after a notice period runs out. Then we could get all those in before the deprecation period is over and schedule things accordingly.

But I'm expecting this to be rather controversial.

@tomjaguarpaw
Copy link
Collaborator

The main problem is that hackage trustees can't really work in batch-mode. It would be cool to have a proper notification system and be able to just apply the patches after a notice period runs out. Then we could get all those in before the deprecation period is over and schedule things accordingly.

I wish more maintainers would follow my lead and define specific transition policies in advance of them actually being needed: https://github.com/tomjaguarpaw/haskell-opaleye/#backup-maintainers

@Ericson2314
Copy link
Contributor

Ericson2314 commented Feb 24, 2023

@mpickering

@Ericson2314 We can't bump to a major version of a library in a point release for precisely the reason due to the amount of breakage it causes.

This is flawed reasoning. GHC itself is a package that has version bounds like any other package. There can be multiple supported solver plans for any given version of a package. It doesn't even require even different minor versions, so long as both mtl versions are within the bounds.

The "one version of GHC <==> one bindist per platform <==> one build plan" thinking is precisely why we get these thundering herds of simultaneous version bumps. We need to break it.

Ship more GHC bindists with multiple different library build plans, and this problem goes away entirely.

@tomjaguarpaw
Copy link
Collaborator

I'm inclined to think @Ericson2314 is correct here. Forcing things to upgrade in lockstep is a source of huge fragility. I'm beginning to understand that Stackage itself, whilst seeking to avoid fragility due to failing build plans is adding another form of fragility in the form of being unable to upgrade some parts of the ecosystem without upgrading others. If we managed to decouple things more we'd have less of these problems.

@Ericson2314
Copy link
Contributor

Ericson2314 commented Feb 24, 2023

Though in fairness, the fact that there are at least multiple stackages per compiler is still a good first step. We need to start applying that same mentality to the packages which ship in a GHC bindist (which is a mini-stackage of sorts). And then can we get proper tick-tock where either libraries change, or the compiler changes, but never both!

@hasufell
Copy link
Member

Ship more GHC bindists

Hey... wait a moment. It's not like there's no work involved 😅

@bgamari
Copy link

bgamari commented Feb 24, 2023

Forcing things to upgrade in lockstep is a source of huge fragility.

I completely agree here. However, I don't believe that the problem is shipping more binary distributions; to me that seems like an unsustainable path, both for users (which suddenly need to worry about which of the many subtly-different binary distributions they should be using) and GHC maintainers (which need to somehow exhaustively enumerate possible core library build plans).

I rather think that the solution here is to loosen the requirement that packages linking against the ghc library must use the pre-installed boot packages. The easiest way to accomplish this is to make the ghc package reinstallable. Well-Typed currently has an intern who is looking at precisely this problem (starting with ghc#20742)

@tomjaguarpaw
Copy link
Collaborator

Unless I'm misunderstanding something it's not linking to ghc that is the big problem. Hardly anyone does that! It's the anyone who uses GHC must use that GHC's version of base, and moreover anyone who uses Stackage must use Stackage GHC's versions of boot packages.

@Ericson2314
Copy link
Contributor

Oh for sure, users can just build what they need themselves is tantamount to making the cost per bindist quite low :).

which need to somehow exhaustively enumerate possible core library build plans

However, while it is not feasible or desire to CI every possible build plan, the ones that are needed to do the "incremental breakge chain" I think are important. E.g. per this thread, I would definitely want to CI 9.6 with and without MTL 2.3.

@davean
Copy link

davean commented Feb 24, 2023 via email

@gbaz
Copy link

gbaz commented Feb 24, 2023

Just as a datapoint, I checked the list at the top of against reverse-deps, and discovered that out of the 32 packages listed, roughly 19 had any current rev-deps (i.e. rev-deps bounded against at least the current version of the package). Of those, only 5-8 seemed to have a significant quantity of rev-deps, and so I think patches against solely those would resolve most of the potential issues.

hedis 53
sydtest 39
persistent-postgresql 33
haxr 11 (already restricted by base bound)
highlighting-kate 16
scalpel-core 8
mixed-types-num 6
cron 6
transient 4
logstash 2
HPDF 1
eventstore 1
mstate 1
validationt 1
aeson-typscript 1
fortran-src 1
libgit 1
vivid 1
happy-meta 1

(note these are revdeps from the haskellers site, not hackage, which also has revdeps. calculation differences mean the two won't tie out exactly -- eg hackage calculates hedis at 56 and sydtest at 24 -- in the latter case this is because hackage doesn't include testsuite-deps as revdeps, i believe)

@TeofilC
Copy link

TeofilC commented Feb 24, 2023

FWIW hedis, sydtest, and postgresql-persistent already have patches waiting to be merged.
EDIT: also for haxr, scalpel-core, HPDF

@tomjaguarpaw
Copy link
Collaborator

I'm basically being driven out of the community by us not updating things - very specifically mtl

Thanks for sharing your perspective Davean. Could you elaborate a bit? Are you using Stackage or the ghc package? If not, can't you use whatever version of mtl you want, regardless of what GHC ships with?

@Ericson2314
Copy link
Contributor

@tomjaguarpaw I think @davean was replying by email to an older message in this thread (by email).

I hope it is clear that the more reinstallability / interpolated bindists as needed thing I am thinking is supposed to allow us to have our cake and eat it too: lot's of being able to make breaking improvements, few individually painful migrations.

@davean
Copy link

davean commented Feb 24, 2023 via email

@bgamari
Copy link

bgamari commented Feb 24, 2023

Unless I'm misunderstanding something it's not linking to ghc that is the big problem. Hardly anyone does that!

It's more common than one might think. They primarily fall into two categories: tools and plugins.

In the former category we have things like haskell-language-server, brittany, haddock, ihaskell, and inspection-testing.

In the latter we have things like large-records, effectful-plugin, and ghc-typelits-natnormalise.

It's the anyone who uses GHC must use that GHC's version of base, and moreover anyone who uses Stackage must use Stackage GHC's versions of boot packages.

I agree that base is a concern but we should be careful not to conflate issues here. The problem being discussed in this ticket is about mtl, which is a dependency of ghc. Supporting multiple versions of base with a particular version of ghc is a useful goal, but it is orthogonal to the present issue.

moreover anyone who uses Stackage must use Stackage GHC's versions of boot packages.

As far as I can tell this isn't a GHC issue but rather a Stackage one. By its nature, Stackage currently requires a completely consistent package set. As long as this is the case, user packages link against ghc (e.g. consider haskell-language-server, ghc-typelits-natnormalise) and GHC itself is not reinstallable, bumping versions in the GHC distribution will

Yes, although it seems to me that this it should be possible (not having discussed this idea with Stackage maintainers yet) for Stackage to slightly weaken their consistency requirement. That is, instead of having precisely one version per package, there could be a small set (e.g. mtl-2.2.2 and mtl-2.3.1). If this set could be kept small enough (e.g. including only critical packages like aeson and mtl), it could continue to be possible to exhaustively test the space of build plans, preserving Stackage's central value proposition.

@Ericson2314
Copy link
Contributor

but it is orthogonal to the present issue.

Though it is occurring to me that getting CI going with e.g. multiple versions of mlt is great practice for doing the same with base. mtl is "already decoupled" so it is just a matter of getting the ops ducks in a row (more gitlab jobs, multiple submodules (?) or another solution, etc.) base, once it is ready, then takes advantage of the trail mtl blazed.

Yes, although it seems to me that this it should be possible (not having discussed this idea with Stackage maintainers yet) for Stackage to slightly weaken their consistency requirement.

That sounds possible, I would think sticking to the more bindists / more reinstallability vision is simpler. Make it really easy for stackage to create their own bindists (or ghc-up to do so on their behalf) and the problem is also solved without slightly weakening anything.

@bgamari
Copy link

bgamari commented Feb 24, 2023

Though it is occurring to me that getting CI going with e.g. multiple versions of mlt is great practice for doing the same with base. mtl is "already decoupled" so it is just a matter of getting the ops ducks in a row (more gitlab jobs, multiple submodules (?) or another solution, etc.) base, once it is ready, then takes advantage of the trail mtl blazed.

I'm not sure there's much we can do here. Afterall, mtl is entirely decoupled from ghc itself. The only reason why we ship it at all is due to haddock, Cabal, and exceptions. As such, maintaining and testing compatibility with multiple mtl versions is more a task for those upstreams than it is for GHC itself.

That sounds possible, I would think sticking to the more bindists / more reinstallability vision is simpler.

Perhaps. I don't have a strong opinion on this.

@Ericson2314
Copy link
Contributor

Yeah that's the beauty of it, there is nothing but the "last mile" to do with MTL: CI wrangling to split out more build artifact variations. Maybe we can get it easy enough for users to build their own copies of GHC soon, but not in time for GHC 9.6. And this capability for GHC's own CI is something we'd want anyways for e.g. a post split-base world.

@tomjaguarpaw
Copy link
Collaborator

As far as I can tell this isn't a GHC issue but rather a Stackage one.

Yes, I agree. Sorry if my comment came across as implying something else.

@Bodigrim
Copy link
Collaborator

Dear all. I believe the questions directed to CLC have been sufficiently answered in #136 (comment) and #136 (comment). Please move to more appropriate venues to explore further opportunities and solutions.

If you want to discuss the evolution of mtl and/or suggest changes, raise an issue at https://github.com/haskell/mtl/issues.

If you want to discuss migration efforts and strategy, please collaborate with HF Stability Working Group at https://github.com/haskellfoundation/stability.

If you want to discuss which version of mtl GHC 9.6 should be shipped with, please go to https://gitlab.haskell.org/ghc/ghc/-/issues/23037.

@Bodigrim Bodigrim added the meta General questions on CLC rules and policies label Feb 24, 2023
@emilypi
Copy link
Member

emilypi commented Feb 24, 2023

@emilypi I don't feel like it's a very pragmatic viewpoint to take, if we are changing fundamental things in the ecosystem then we have to be proactive about understanding and mitigating the impact.

To what degree do we need to be proactive, @mpickering? This is currently an undefined process. If an upstream maintainer announces that breaking changes are coming down the pipeline a year+ in advance, has an open issues policy in which to discuss the changes and impact, has a release candidate policy, a migration guide, and a meaningfully distant stretch of time for people to migrate within, then they have done all they can do to mitigate impact.

What you seem to be implying with this thread, and the way in which you guys are discussing solutions, is that no breaking changes can be made if they're sufficiently deep enough without doing the legwork to move the entire impacted package set along with it. This is unscalable, and untenable. You cannot maintain people's packages for them, or submit patches to all your downstream dependencies without incurring an insane burden. That attitude is what contributes to people burning out every other year - you're doing an insane amount of work for other people to make up for the fact that they're not maintaining their packages! Tell me this: what is lost by letting the Hackage Trustees revise the affected packages by putting a correct upper bound on them? If Stackage is the issue, then Stackage has curators that can do roughly the same thing and coordinate changes to their stable set, as they did for aeson.

This is not to belittle or get in your way here. I sympathize, but to be quite honest, we're not placing enough trust in the maintainers of these packages or existing processes that take care of these kinds of issues.

@hasufell
Copy link
Member

You cannot maintain people's packages for them, or submit patches to all your downstream dependencies without incurring an insane burden. That attitude is what contributes to people burning out every other year

I'm worried it might be GHC devs burning out, because they:

  1. get the blame for shipping those libraries
  2. maintain those patches on head.hackage

@emilypi
Copy link
Member

emilypi commented Feb 24, 2023

I'm talking about them specifically here.

@bgamari
Copy link

bgamari commented Feb 27, 2023

In light of:

  • the feedback on this and the GHC ticket,
  • the fact that reverting a submodule bump this late in the release cycle would be quite unusual, and
  • the fact that the migration is fairly straightforward

we have concluded that this issue does not rise to the level where a reversion is necessary. We will move forward as originally planned, with 9.6.1 shipping mtl-2.3.1 and transformers-0.6.1.0. Thanks to everyone who commented!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
meta General questions on CLC rules and policies
Projects
None yet
Development

No branches or pull requests