I am happy to see people work on fixing these issues! But I would kindly but firmly request this happen in the opposite order. Pinning an old compiler version should never happen unless absolutely necessary (and requires care to handle nonāGCC platforms), and we should always prefer updating or fixing to silencing errors when possible ā especially as those flags are likely to persist even if the issues are fixed upstream. These errors to catch invalid code were added for a reason!
Thereās also another intermediate step after updating but before writing patches ourselves ā getting patches from other distros, multiple of which have already moved to GCC 14 and handled a substantial amount of the fallout. Fetching those patches is often an easy and quick way to handle these failures.
This could work for, say, packages that have 50 others depending on them. For compiler upgrades, the affected packages are literally every package in Nixpkgs. If you demanded that bumping the default GCC version never broke a package, we would be on a version of GCC from 2006.
The work that the people involved in the staging cycle do to handle changes to core packages like GCC, glibc, curl, OpenSSL, etc. necessarily affects more packages than any one person can possibly take responsibility for. Yet itās also work that is absolutely critical to the health of NixOS and our ability to support new versions of leaf packages, keep on top of the most critical security fixes, and so on. It also disproportionately falls on a small number of people to do: Iād say a dozen would be an overly optimistic estimate for the number of people active in staging work.
As the person who made the PRs to bump to GCC 14 and LLVM 19, and helped shepherd the immediate work to fix the problems that resulted, I can say that we did a lot of work to test and fix builds before Hydra even started building packages. You can see some of that work in the LLVM 19 PR, though there were lots of followāups from the same few people as well. GCC 14 had been partially prepared for before the last release before we had to roll it back, and then had followāup work in separate PRs this time, so itās harder to pull up exhaustive links, but it was still a handful of people fixing a large number of packages before anyone even knew anything was broken. We had people building their entire system configurations with the new compilers before that point. But we have tens of thousands of packages, and at some point you have no choice but to distribute the effort for the long tail.
Are there process improvements we could make? Sure ā e.g. if we could ping maintainers when their package breaks during staging-next
then more things would probably get fixed before hitting the channels. OTOH, we have no expected SLA for maintainers and often the listed maintainers are not who actually takes care of a package, which is its own problem. You would be surprised how many packages are effectively unmaintained but continue to stay just above water because of the work of a very small number of people who handle issues in packages they donāt use or care about when they come up during staging-next
. In some cases I suspect those packages may have no users at allā¦
I find this work fun, but it can be very burnoutāinducing. I know we have had a Rust maintainer put huge amounts of individual effort into mitigating the fallout of two Rust changes that caused mass problems with packages across the tree and still mostly get a negative response for the things that were left over both times. People donāt understand just how much bigger the task is than something one person can achieve, donāt understand how unsuitable much of our tooling is for these kinds of changes, donāt understand how much work gets done by individuals all the same, and then usually the only reaction from users and downstream package maintainers is annoyance that their builds broke and asking why it was allowed to happen. Hereās a loooong comment I wrote a while back about the amount of work that goes into these migrations and the degree to which taking the easy way out as a downstream package maintainer amplifies the already large burden of working on these mass upgrades further.
Anyway, I appreciate the effort people put in to fix these things, and if you would like to help out with the early stages of the next compiler bump, please join the staging room on Matrix!