-
-
Notifications
You must be signed in to change notification settings - Fork 12.4k
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
Remove Linux-only GCC dependencies #110010
Comments
See Homebrew#108008. Also, remove linux only gcc dependency. See Homebrew#110010.
See Homebrew#108008. Also, remove linux only gcc dependency. See Homebrew#110010.
I suggest leaving formulae that need a |
Yeah I was definitely planning on leaving I was hoping to submit the regular PRs that don't need I'm also trying to avoid having too many open altogether even if they are finished because I don't want to accumulate too many failures. At the moment I will push a few more but I want to get the backlog merged before opening others. |
In case anyone is wondering why I've been deleting links to PRs after they've been merged, the comment with the checklist starts to have trouble updating if there are too many links so I have to periodically delete them. |
See Homebrew#110462. Also, drop GCC dependency. See Homebrew#110010.
Given that Ubuntu 22.04 has been using GCC 12 runtime libraries all this time: maybe we don't even need to publish new bottles to remove the Linux-only In particular, bottles built with our GCC 12 should work without |
Will we install GCC 13 when we upgrade to it? If so/not, should we? |
I think we should for systems with GCC runtime libraries that are older than Ubuntu 22.04. Pinning our preferred GCC to GCC 12 obliges us to merge a That's doable, but GCC upgrades are hard enough; let's not make them harder. Upgrading |
I think we should maintain the same versions whether they are from Homebrew or the system rather than having older systems have newer compilers. |
Note that it's important to distinguish between the compiler and the runtime libraries, because they need not be the same version. They are not on Ubuntu 22.04, which is why we needed Homebrew/brew#13882.
Ok, but what about systems whose runtime libraries are newer? Should we use the same versions as well? This means installing runtime libraries that are older than what is provided by the system, and that's something we haven't been doing historically. |
@carlocab Yeh, we need to distinguish between these but I think it'd be much simpler if we didn't and picked the same GCC version for both.
Depends how much we trust the backwards compatibility. If the answer is "a lot/perfectly" we don't need to do this I guess. |
Yes, and this, to me, is one of the reasons why we should just use the
Ok, suppose we trust it a lot/perfectly. Then, I don't see why we shouldn't also use the runtime libraries provided by the unversioned If the concern is that Conversely, if we don't trust backward compatibility enough to be okay with That said, Linuxbrew has worked for a long time on systems whose runtime libraries are newer than the ones our bottles are built against with very few issues, so I suspect we shouldn't be worried about using libraries that are too new, at least as far as GCC is concerned. |
It's simpler but it's less robust or consistent.
Yes, runtime libraries would seem reasonable if we trust it perfectly. I may trust the runtime libraries perfectly if @fxcoudert agrees. I definitely do not trust a GCC 13.0.0 release to happily compile everything in Homebrew or expect upstream projects to jump to fix reported issues there. Backwards compatibility seems reduced in the compiler than in the runtime libraries, for sure.
If we had a separate formula for runtime libraries and the compiler: I'd agree. We don't, though and it seems better to not have to install two different formulae for runtime and build time. |
Yep, neither do I. However, we're already carrying around two This way all users who only use bottles only ever needs to install one |
Yes, the runtime libraries are always backward-compatible (a bug is always possible, but I do not believe I have seen one in many years now, and bugs can be fixed). The compiler is generally stable over time, but its set of default warnings (turned into errors when projects use |
I disagree. People seem to use the gcc@ formulae: https://formulae.brew.sh/analytics-linux/install/90d/
Yeh, this is what I'm concerned about. Given this I'm happy with:
|
These analytics are misleading. What I think is telling are (a) installs-on-request vs installs and (b) the ratio of installs in the past 30 days vs the past 365 days. For What this tells us is that nearly all Linux users who installed
Great; I think we are in agreement. |
The analytics for There should be no reason that I am advocating keeping a number of older compilers around. I've argued in the past for it: compilers play a central role in the development process, and are key to user workflows. I think there is relatively little cost for us (and a lot of benefit for users) in keeping around a few versions of GCC. I think the same is true of other languages (python, ruby, go, openjdk) and databases (mariadb, postgresql). To me, those are really good exceptions to our general "reduce the number of versioned formulas" policy. |
Oh, actually, for a few weeks |
Except if we want to pin a certain version to avoid the e.g. warning-related issues you mentioned above.
Strongly agree. |
This is done. Thank you to everyone who helped with this huge undertaking! |
This should be the last one. Completes Homebrew#110010.
This should be the last one. Completes #110010.
Now that we have migrated to a newer GCC in CI, we should no longer need any Linux-only dependencies on GCC due to needing to support newer C++ standards.
We should discuss the best strategy for doing this that avoids breaking existing or new installations. Simply removing the
depend_on "gcc"
line shouldn't cause any problems for existing installations because we always add the RPATH for brewed GCC when pouring bottles. However, if the bottle has been built with GCC 12, it will be broken on new installations because we only require GCC 11 either from the host or thegcc@11
formula. So anything built with GCC 12 does require a new bottle regardless of how we end up making it.Existing PR
Done
The text was updated successfully, but these errors were encountered: