Skip to content

haskell.compiler.ghc963: drop#440410

Merged
wolfgangwalther merged 1 commit intoNixOS:stagingfrom
wolfgangwalther:haskell-updates-drop-ghc963
Sep 18, 2025
Merged

haskell.compiler.ghc963: drop#440410
wolfgangwalther merged 1 commit intoNixOS:stagingfrom
wolfgangwalther:haskell-updates-drop-ghc963

Conversation

@wolfgangwalther
Copy link
Contributor

@wolfgangwalther wolfgangwalther commented Sep 5, 2025

Latest 9.6.x minor release is 9.6.7, which is also in Stackage 22.44.

Thus, dropping according to the GHC Deprecation Policy.

This requires to change the bootstrap for GHC 9.8.x and GHC 9.10.x on some platforms.

Things done


Add a 👍 reaction to pull requests you find important.

@nixpkgs-ci nixpkgs-ci bot added 10.rebuild-darwin: 501+ This PR causes many rebuilds on Darwin and should normally target the staging branches. 10.rebuild-linux: 0 This PR does not cause any packages to rebuild on Linux. 11.by: package-maintainer This PR was created by a maintainer of all the package it changes. 10.rebuild-darwin: 5001+ This PR causes many rebuilds on Darwin and must target the staging branches. 6.topic: haskell General-purpose, statically typed, purely functional programming language labels Sep 5, 2025
@sternenseemann
Copy link
Member

I'm always a little bit scared that using different versions of source built fallback and bindist GHC can obscure problems in the source built bootstrapping since that path is taken less. OTOH upgrading bindists is much riskier since they are more susceptible to weird issues as shown by 9.6.3…

@wolfgangwalther
Copy link
Contributor Author

wolfgangwalther commented Sep 6, 2025

I'm always a little bit scared that using different versions of source built fallback and bindist GHC can obscure problems in the source built bootstrapping since that path is taken less. OTOH upgrading bindists is much riskier since they are more susceptible to weird issues as shown by 9.6.3…

I'd say we update ghc963Binary to ghc967Binary and then use 9.6.7 consistently. Even though that involves an upgrade to a bindist, reducing the overall dependency on source fallbacks should be a net-positive. WDYT?

@wolfgangwalther
Copy link
Contributor Author

I'd say we update ghc963Binary to ghc967Binary and then use 9.6.7 consistently.

I pushed a commit to do that, but am still building on various systems now.

@nixpkgs-ci nixpkgs-ci bot added 10.rebuild-linux: 501+ This PR causes many rebuilds on Linux and should normally target the staging branches. 10.rebuild-linux: 5001+ This PR causes many rebuilds on Linux and must target the staging branches. and removed 10.rebuild-linux: 0 This PR does not cause any packages to rebuild on Linux. labels Sep 6, 2025
@wolfgangwalther
Copy link
Contributor Author

I'd say we update ghc963Binary to ghc967Binary and then use 9.6.7 consistently.

I pushed a commit to do that, but am still building on various systems now.

Unfortunately, this fails for GHC 9.8.4 on both linux archs. It works for GHC 9.8.4 on aarch64-darwin and for GHC 9.10.2 on aarch64-darwin, aarch64-linux and x86_64-linux.

The errors I am getting on Linux are like this:

| Configure package 'ghc-bin'
| Copy file: mk/system-cxx-std-lib-1.0.conf => _build/stage0/inplace/package.conf.d/system-cxx-std-lib-1.0.conf
| Run GhcPkg Update (Stage0 InTreeLibs): _build/stage0/compiler/inplace-pkg-config => none
# cabal-configure (for _build/stage0/ghc/setup-config)
0;Running for 9m36s [13791/14053], predicted 39s (93%)# cabal-autogen (for _build/stage0/ghc/build/ghc/autogen/cabal_macros.h)
| Run Ghc FindHsDependencies (Stage0 InTreeLibs): ghc/Main.hs => _build/stage0/ghc/.dependencies.mk
| Remove file _build/stage0/ghc/.dependencies.mk.bak
| Run Ghc CompileHs (Stage0 InTreeLibs): ghc/Main.hs => _build/stage0/ghc/build/Main.o
| Run Ghc LinkHs (Stage0 InTreeLibs): _build/stage0/ghc/build/Main.o => _build/stage0/bin/ghc
0;Running for 9m41s [13808/14068], predicted 38s (93%)Command line: /nix/store/zn49dy0gv3i5nwmisx3jy80pyhfqjnza-ghc-binary-9.6.7/bin/ghc -Wall -Wcompat -hisuf hi -osuf o -hcsuf hc -static -hide-all-packages -no-user-package-db '-package-env -' '-package-db _build/stage0/lib/package.conf.d' '-this-unit-id ghc-bin-9.8.4-f316' '-package-id array-0.5.8.0' '-package-id base-4.18.3.0' '-package-id bytestring-0.12.1.0-a6b2' '-package-id containers-0.6.8-cafd' '-package-id directory-1.3.8.5-2d51' '-package-id filepath-1.4.301.0-74bc' '-package-id ghc-9.8.4-8670' '-package-id ghc-boot-9.8.4-4bf8' '-package-id process-1.6.25.0-7cbc' '-package-id transformers-0.6.1.0-1e91' '-package-id unix-2.8.6.0-4c57' -i -i/build/ghc-9.8.4-source/_build/stage0/ghc/build -i/build/ghc-9.8.4-source/_build/stage0/ghc/build/ghc/autogen -i/build/ghc-9.8.4-source/ghc -I_build/stage0/ghc/build -I/build/ghc-9.8.4-source/compiler -I/build/ghc-9.8.4-source/_build/stage0/compiler/build -I/build/ghc-9.8.4-source/libraries/process/include -I/build/ghc-9.8.4-source/_build/stage0/libraries/process/build/include -I/nix/store/r1mb8xq7b5pn66ir1rq3v7p675hrdf0n-libffi-3.5.1-dev/include -I/build/ghc-9.8.4-source/libraries/directory -I/build/ghc-9.8.4-source/_build/stage0/libraries/directory/build -I/build/ghc-9.8.4-source/libraries/unix/include -I/build/ghc-9.8.4-source/_build/stage0/libraries/unix/build/include -I/build/ghc-9.8.4-source/libraries/time/lib/include -I/build/ghc-9.8.4-source/_build/stage0/libraries/time/build/lib/include -I/build/ghc-9.8.4-source/libraries/containers/containers/include -I/build/ghc-9.8.4-source/_build/stage0/libraries/containers/containers/build/include -I/build/ghc-9.8.4-source/libraries/bytestring/include -I/build/ghc-9.8.4-source/_build/stage0/libraries/bytestring/build/include -I/nix/store/zn49dy0gv3i5nwmisx3jy80pyhfqjnza-ghc-binary-9.6.7/lib/ghc-9.6.7/lib/x86_64-linux-ghc-9.6.7/base-4.18.3.0/include -I/nix/store/zn49dy0gv3i5nwmisx3jy80pyhfqjnza-ghc-binary-9.6.7/lib/ghc-9.6.7/lib/x86_64-linux-ghc-9.6.7/ghc-bignum-1.3/include -I/nix/store/zn49dy0gv3i5nwmisx3jy80pyhfqjnza-ghc-binary-9.6.7/lib/ghc-9.6.7/lib/x86_64-linux-ghc-9.6.7/rts-1.0.2/include -optP-include -optP_build/stage0/ghc/build/ghc/autogen/cabal_macros.h -outputdir _build/stage0/ghc/build -fdiagnostics-color=always -Wall -Wnoncanonical-monad-instances -Wnoncanonical-monoid-instances -rtsopts=all '-with-rtsopts=-K512M -H -I5 -T' -threaded -XHaskell2010 -XNoImplicitPrelude -XScopedTypeVariables -XBangPatterns -no-auto-link-packages -rtsopts -optc-Wno-error=inline _build/stage0/ghc/build/Main.o -o _build/stage0/bin/ghc -O -H64m -O -I_build/stage0/compiler/build
===> Command failed with error code: 1
/nix/store/xrwdb41dqi2ia6lr2s61w5bzfg2m71pi-binutils-2.44/bin/ld: /nix/store/zn49dy0gv3i5nwmisx3jy80pyhfqjnza-ghc-binary-9.6.7/lib/ghc-9.6.7/lib/../lib/x86_64-linux-ghc-9.6.7/rts-1.0.2/libHSrts-1.0.2_thr.a(Globals.thr_o):(.bss+0x0): multiple definition of `ghc_unique_counter64'; _build/stage0/lib/../lib/x86_64-linux-ghc-9.6.7/ghc-9.8.4-8670/libHSghc-9.8.4-8670.a(genSym.o):(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
`gcc' failed in phase `Linker'. (Exit code: 1)

We have multiple different options here:

  • Keep everything mostly as-is and only change the bootstrap for darwin to source-built 9.6.7 (only the first commit), or
  • Package ghc967Binary for darwin only and use that for bootstrap, but keep ghc963Binary elsewhere, or
  • Try to figure out what went wrong there with the Linux builds and use ghc967Binary consistently.

WDYT?

@emilazy emilazy mentioned this pull request Sep 6, 2025
1 task
@emilazy
Copy link
Member

emilazy commented Sep 6, 2025

Is there a reason not to bootstrap 9.8 from the 9.8.4 binary, as is used on AArch64 + Musl? Presumably that does indeed work for Linux.

@wolfgangwalther
Copy link
Contributor Author

Is there a reason not to bootstrap 9.8 from the 9.8.4 binary, as is used on AArch64 + Musl? Presumably that does indeed work for Linux.

Testing that now.

@wolfgangwalther
Copy link
Contributor Author

Is there a reason not to bootstrap 9.8 from the 9.8.4 binary, as is used on AArch64 + Musl?

So far, I was able to build everything that I threw at ghc984Binary. I still have a few builds going on, but I think it might be best to just remove ghc963Binary entirely and rely on 9.8.4 bindist for bootstrapping both 9.8.4 source and 9.10.2 source.

@emilazy
Copy link
Member

emilazy commented Sep 6, 2025

That makes sense to me.

Now I’m wondering if the thing where 9.4 needs 9.0 to bootstrap got fixed and we don’t need subopt.bash for AArch64 after all…

@wolfgangwalther wolfgangwalther force-pushed the haskell-updates-drop-ghc963 branch from 00b7721 to 83e41be Compare September 6, 2025 18:23
@wolfgangwalther
Copy link
Contributor Author

wolfgangwalther commented Sep 6, 2025

I replaced the "update ghc 9.6.3 bindist to 9.6.7" commit with "drop ghc 9.6.7 bindist" here. Still waiting on some builds to finish. I tested:

  • GHC 9.8.4 on x86_64-linux (glibc) ✔️
  • GHC 9.8.4 on x86_64-linux (musl) ✔️
  • GHC 9.8.4 on aarch64-linux (glibc) ✔️
  • GHC 9.8.4 on aarch64-linux (musl) ✔️
  • GHC 9.8.4 on aarch64-darwin ✔️
  • GHC 9.10.2 on x86_64-linux (glibc) ✔️
  • GHC 9.10.2 on x86_64-linux (musl) ✔️
  • GHC 9.10.2 on aarch64-linux (glibc) ✔️
  • GHC 9.10.2 on aarch64-linux (musl) ✔️
  • GHC 9.10.2 on aarch64-darwin ✔️

I did not test x86_64-darwin, yet.

@wolfgangwalther
Copy link
Contributor Author

Now I’m wondering if the thing where 9.4 needs 9.0 to bootstrap got fixed and we don’t need subopt.bash for AArch64 after all…

I think this was answered by @sternenseemann in #381265 (comment). Being a good citizen I still tried - and failed, ofc. So I do think we still need 9.0 to bootstrap 9.4.

@wolfgangwalther wolfgangwalther force-pushed the haskell-updates-drop-ghc963 branch from 83e41be to 51148ec Compare September 6, 2025 18:46
Copy link
Member

@emilazy emilazy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems fine to me, but should this go to staging instead? It looks like it’d throw away a lot of the binaries on haskell-updates?

@nixpkgs-ci nixpkgs-ci bot added the 12.approvals: 1 This PR was reviewed and approved by one person. label Sep 6, 2025
@wolfgangwalther
Copy link
Contributor Author

wolfgangwalther commented Sep 16, 2025

I would like to restrict the removals to what's necessary to make progress on other fronts for now. We are making a ton of big changes at relatively fast pace. A lot of these changes are stuck in staging or, even worse, haskell-updates, so we don't really have any indication on how it impacts downstream.

So the big thing here is visibility - and I think that plays into #427145. With the current setup of merging into staging, this significantly slows us down. If we were merging haskell-updates into master, we could potentially move much quicker, right?

Edit: Which could potentially be done as early as this iteration. Which would potentially allow us to do this drop in the next iteration, and then hopefully having still enough time for @emilazy's follow up work?

@wolfgangwalther wolfgangwalther force-pushed the haskell-updates-drop-ghc963 branch from bff1b83 to 16db36b Compare September 16, 2025 19:22
@wolfgangwalther
Copy link
Contributor Author

AFAICT, this drop only affects the Darwin bootstrap path, and it’s easy to verify that the final bootstrap results should be identical, as I did in #440271, so I don’t see a reason it should be risky in any way unless there is a mismatch. (I have not done this verification, but I assume @wolfgangwalther could.)

I rebased and will rebuild GHC 9.10.3 now, to then look into that kind of verification.

@nixpkgs-ci nixpkgs-ci bot removed the 2.status: merge conflict This PR has merge conflicts with the target branch label Sep 16, 2025
@wolfgangwalther
Copy link
Contributor Author

I rebased and will rebuild GHC 9.10.3 now, to then look into that kind of verification.

I did the same steps of verification, here's the result:

% diff -r before after
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Dwarf.dyn_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Dwarf.dyn_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Dwarf.hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Dwarf.hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Dwarf.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Dwarf.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Wasm/Asm.dyn_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Wasm/Asm.dyn_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Wasm/Asm.hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Wasm/Asm.hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Wasm/Asm.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm/Wasm/Asm.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm.dyn_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm.dyn_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm.hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm.hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/CmmToAsm.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Driver/Session.dyn_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Driver/Session.dyn_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Driver/Session.hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Driver/Session.hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Driver/Session.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Driver/Session.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Binary.dyn_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Binary.dyn_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Binary.hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Binary.hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Binary.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Binary.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Types.dyn_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Types.dyn_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Types.hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Types.hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Types.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Iface/Ext/Types.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Config.dyn_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Config.dyn_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Config.hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Config.hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Config.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Config.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Constants.dyn_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Constants.dyn_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Constants.hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Constants.hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Constants.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/Constants.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/IO.dyn_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/IO.dyn_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/IO.hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/IO.hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/IO.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Settings/IO.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Unit/Types.dyn_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Unit/Types.dyn_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Unit/Types.hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Unit/Types.hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Unit/Types.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Unit/Types.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Utils/Panic/Plain.dyn_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Utils/Panic/Plain.dyn_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Utils/Panic/Plain.hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Utils/Panic/Plain.hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Utils/Panic/Plain.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/GHC/Utils/Panic/Plain.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/libHSghc-9.10.3-9268.a and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/libHSghc-9.10.3-9268.a differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/libHSghc-9.10.3-9268_p.a and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/ghc-9.10.3-9268/libHSghc-9.10.3-9268_p.a differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/libHSghc-9.10.3-9268-ghc9.10.3.dylib and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/libHSghc-9.10.3-9268-ghc9.10.3.dylib differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/xhtml-3000.2.2.1-6de8/Text/XHtml/Transitional.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/xhtml-3000.2.2.1-6de8/Text/XHtml/Transitional.p_hi differ
Binary files before/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/xhtml-3000.2.2.1-6de8/Text/XHtml.p_hi and after/lib/ghc-9.10.3/lib/aarch64-osx-ghc-9.10.3/xhtml-3000.2.2.1-6de8/Text/XHtml.p_hi differ
diff -r before/lib/ghc-9.10.3/lib/package.conf.d/ghc-9.10.3-9268.conf after/lib/ghc-9.10.3/lib/package.conf.d/ghc-9.10.3-9268.conf
28c28
< abi:                  f5ba5386991c4af6898d550c95dbdb70
---
> abi:                  48b0eff5c38647c160ef0ead79aa5022
diff -r before/lib/ghc-9.10.3/lib/package.conf.d/ghc-9.10.3-9268.conf.copy after/lib/ghc-9.10.3/lib/package.conf.d/ghc-9.10.3-9268.conf.copy
28c28
< abi:                  f5ba5386991c4af6898d550c95dbdb70
---
> abi:                  48b0eff5c38647c160ef0ead79aa5022
Binary files before/lib/ghc-9.10.3/lib/package.conf.d/package.cache and after/lib/ghc-9.10.3/lib/package.conf.d/package.cache differ

@wolfgangwalther
Copy link
Contributor Author

The 25.11 schedule hasn’t posted yet, but I’d expect the freeze to be in around a month’s time.

The schedule is here: #443568

The freeze for release critical packages is the 2025-10-04, so in 2,5 weeks. The freeze for general breaking changes one month later. So I assume we do have ~6 weeks for both this and #440774. I think that means we can either do them in this haskell-updates cycle or the next?

tbh, I think it's more valuable to have this in earlier for any kind of feedback to get back to us before release, rather than have fewer changes in this cycle at once. So I'd vote to get this done ASAP.

@emilazy
Copy link
Member

emilazy commented Sep 17, 2025

The freeze for general breaking changes one month later.

Two weeks, no?

@wolfgangwalther
Copy link
Contributor Author

The freeze for general breaking changes one month later.

Two weeks, no?

My bad, I misread "unrestrict breaking changes".

With only 4 weeks to go I seriously question whether there is a good enough chance to even get this PR in in the next haskell-updates cycle.

That being said, this kind of breaking change (dropping ghc minor version) is probably not too critical if we do it after the freeze date. But still... why delay it, if there is no need.

@emilazy
Copy link
Member

emilazy commented Sep 17, 2025

I also have other things to attend to before the freeze so I would much rather be done with all this stuff sooner rather than later… (though the LLVM unbreak at least should be backportable – but if the drops happen after branch‐off then that’s more fuss…)

@wolfgangwalther
Copy link
Contributor Author

I did the same steps of verification, here's the result:

I looked at the diff of one of the .hi files. When I pretty print that with ghc --show-iface and then take the diff, I get something like this:

--- before.hi
+++ after.hi
│┄ Ordering differences only
@@ -600,15 +600,14 @@
        declaration docs:
          []
        arg docs:
          []
        documentation structure:
          re-exported module(s): [Text.XHtml.Transitional]
            [Text.XHtml.Strict.Attributes.base,
-            Text.XHtml.Transitional.Attributes.text,
             Text.XHtml.Strict.Elements.label,
             Text.XHtml.Extras.HotLink{Text.XHtml.Extras.HotLink,
                                       Text.XHtml.Extras.HotLink,
                                       Text.XHtml.Extras.hotLinkAttributes,
                                       Text.XHtml.Extras.hotLinkContents,
                                       Text.XHtml.Extras.hotLinkURL},
             Text.XHtml.Extras.URL{Text.XHtml.Extras.URL},
@@ -776,14 +775,15 @@
             Text.XHtml.Transitional.Attributes.olive,
             Text.XHtml.Transitional.Attributes.purple,
             Text.XHtml.Transitional.Attributes.red,
             Text.XHtml.Transitional.Attributes.silver,
             Text.XHtml.Transitional.Attributes.start,
             Text.XHtml.Transitional.Attributes.target,
             Text.XHtml.Transitional.Attributes.teal,
+            Text.XHtml.Transitional.Attributes.text,
             Text.XHtml.Transitional.Attributes.version,
             Text.XHtml.Transitional.Attributes.vlink,
             Text.XHtml.Transitional.Attributes.vspace,
             Text.XHtml.Transitional.Attributes.white,
             Text.XHtml.Transitional.Attributes.yellow,
             Text.XHtml.Transitional.Elements.applet,
             Text.XHtml.Transitional.Elements.basefont,

So this is only some ordering thing, and I would assume that the build with GHC 9.6.7 just fixed some ordering / possibly reproducibility issues.

@wolfgangwalther
Copy link
Contributor Author

After reading through it again, it's unclear, @sternenseemann, whether you are still collecting information or whether you are blocking this PR right now.

With https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#review-and-merge-conventions in mind, @sternenseemann please state explicitly whether, with all the information in this thread so far, you are blocking this PR or not. Without a "Requesting Changes" review according to the contribution guidelines I will assume you are not blocking and merge within the next two days.

If you do have blocking concerns, please explicitly state them in a way that makes us be able to understand when they will be resolved. For example "Not in this haskell-updates cycle" would be clear enough to understand, so that we could merge it in the next cycle.

@sternenseemann
Copy link
Member

I haven't had the time to review the relationship of this PR to the other ones by emily again.

Overall, I do dislike this change, but I suppose there is not much risk involved since the source built GHCs tend to be very reliable. (I.e. I'm not concerned whether 9.6.7 and 9.6.3 produce the same result, but rather whether one may regress in the future, but not the other. For example, we may not immediately notice that 9.6.7 can't bootstrap 9.10.4 when 9.6.3 can.) Given that the bootstrap path with 9.6.7 is restricted to Darwin, I suppose it's whatever since we would see the failure eventually.

Don't you think that it's better to merge this into staging? haskell-updates just means the change sits around even longer without doing anything as Darwin isn't even being built.

I think the haskell deps that 9.8 is shipping cause that and this needs a fix.

This is kind of annoying. I was thinking that going to 9.4.8 and 9.8.4 bindists would have been a good option for the future.

@wolfgangwalther
Copy link
Contributor Author

I.e. I'm not concerned whether 9.6.7 and 9.6.3 produce the same result, but rather whether one may regress in the future, but not the other. For example, we may not immediately notice that 9.6.7 can't bootstrap 9.10.4 when 9.6.3 can.

Ah, thanks for that info, that helps shape my understanding of the potential consequences etc.

Don't you think that it's better to merge this into staging? haskell-updates just means the change sits around even longer without doing anything as Darwin isn't even being built.

Merging into staging is fine for me, too. I just looked, I think both @emilazy's PRs are targeting staging right not as well, so that would make sense. I think I only went to haskell-updates when it turned out I would also rebuild Linux packages, while trying the 9.8 bootstrap path. But that part is reverted anyway.

I think the haskell deps that 9.8 is shipping cause that and this needs a fix.

This is kind of annoying. I was thinking that going to 9.4.8 and 9.8.4 bindists would have been a good option for the future.

I can try again with GHC 9.10.3 - maybe that already changed something. But I'd do that in a separate PR, not here.

@sternenseemann
Copy link
Member

I can try again with GHC 9.10.3 - maybe that already changed something. But I'd do that in a separate PR, not here.

Sure. We should probably try and look into this soon since we'd ideally want to avoid haskellPackages requiring a chain of two source built GHCs to start building…

@wolfgangwalther wolfgangwalther changed the base branch from haskell-updates to staging September 18, 2025 18:08
@nixpkgs-ci nixpkgs-ci bot closed this Sep 18, 2025
@nixpkgs-ci nixpkgs-ci bot reopened this Sep 18, 2025
github-actions[bot]

This comment was marked as resolved.

Latest 9.6.x minor release is 9.6.7, which is also in Stackage 22.44.

Thus, dropping according to the GHC Deprecation Policy.

This requires to change the bootstrap for GHC 9.8.x and GHC 9.10.x on
some platforms.
@wolfgangwalther wolfgangwalther force-pushed the haskell-updates-drop-ghc963 branch from 16db36b to a8e20b1 Compare September 18, 2025 18:10
@github-actions github-actions bot dismissed their stale review September 18, 2025 18:11

All good now, thank you!

@wolfgangwalther
Copy link
Contributor Author

For example, we may not immediately notice that 9.6.7 can't bootstrap 9.10.4 when 9.6.3 can.

Should this really happen, and before we can figure out better bootstrap paths via GHC 9.8.4 or so, we can always go back and revert this commit.

Targeted staging now, let's do it!

@wolfgangwalther
Copy link
Contributor Author

We should probably try and look into this soon since we'd ideally want to avoid haskellPackages requiring a chain of two source built GHCs to start building…

Right. Instead of discussing over a darwin bootstrap path through 9.6.3 or 9.6.7 for ages, let's focus on that - that path is indeed too long, especially for the soon-to-be-default-version. Will start building a few things.

@wolfgangwalther wolfgangwalther merged commit 54cb719 into NixOS:staging Sep 18, 2025
25 of 26 checks passed
@wolfgangwalther wolfgangwalther deleted the haskell-updates-drop-ghc963 branch September 18, 2025 18:15
@nixpkgs-ci nixpkgs-ci bot added 10.rebuild-darwin: 11-100 This PR causes between 11 and 100 packages to rebuild on Darwin. and removed 10.rebuild-darwin: 501+ This PR causes many rebuilds on Darwin and should normally target the staging branches. 10.rebuild-darwin: 5001+ This PR causes many rebuilds on Darwin and must target the staging branches. labels Sep 18, 2025
@wolfgangwalther
Copy link
Contributor Author

We should probably try and look into this soon since we'd ideally want to avoid haskellPackages requiring a chain of two source built GHCs to start building…

Did that in #444249. We should probably do that before or together with the haskell-updates merge to avoid that lengthy bootstrap path.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

6.topic: haskell General-purpose, statically typed, purely functional programming language 10.rebuild-darwin: 11-100 This PR causes between 11 and 100 packages to rebuild on Darwin. 10.rebuild-linux: 0 This PR does not cause any packages to rebuild on Linux. 11.by: package-maintainer This PR was created by a maintainer of all the package it changes. 12.approvals: 1 This PR was reviewed and approved by one person.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants