Rendered at 17:54:35 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
woodruffw 23 hours ago [-]
To copy my response on Lobsters:
(I am one of uv’s maintainers.)
The nice thing about Python packaging is that it’s standardized: if uv’s build backend doesn’t fit into the hole you want, then you can use any number of other backends that do an admirable job of conforming to the packaging standards.
With that said, I don’t understand why Gentoo needs to rebuild every single release of uv-build. It doesn’t change as much as uv itself, and it’s intentionally compatible across uv versions. Why not set a policy of only updating once weekly, or even less frequently, with exceptions for important breaking changes or bug fixes?
(For context: the only reason uv-build releases as often as it does is because it’s easier to keep its internals in lockstep with the rest of uv. But you can do a normal version bound in your Python build backend metadata and uv will happily use whatever version of uv-build is already present.)
pdonis 22 hours ago [-]
> The nice thing about Python packaging is that it’s standardized
But it isn't. Once upon a time, it was: you used distutils. But of course distutils had a lot of problems. Instead of adopting a single standardized solution for those problems, the Python developers punted and let third parties do it. So now we do not have a single standardized solution for building Python packages; we have a bunch of third party solutions, none of which is in the Python standard library.
Yes, all those third party solutions have to be PEP 517 compatible, but that's not standardization on a tool; it's just standardization on an interface between the backend and the frontend. Which is nice, but doesn't solve the problem under discussion here.
> if uv’s build backend doesn’t fit into the hole you want, then you can use any number of other backends that do an admirable job of conforming to the packaging standards.
As the project developer, sure. But as a Linux distro building your python package, Gentoo has to use the build backend you specify. It can't say, well, this particular package is just pure python, so really all we need is a minimal tool to build a pure python none-any wheel. It has to use the backend you specified.
> I don’t understand why Gentoo needs to rebuild every single release of uv-build.
Because if you don't pin a version of uv-build in your project, that means "use the latest version available". Gentoo can't second guess you--even if it were able to verify somehow that the new version of uv-build that just got released will end up producing an identical wheel for your project as the previous version, without actually using the new version of uv-build.
> you can do a normal version bound in your Python build backend metadata
Sure, but how many users of uv-build actually do that? Seems like the answer to that is "not enough to matter".
jitl 22 hours ago [-]
distros patch the build process when they package stuff for the distro all the time. why would they "have to" do anything? i'm not super familiar with gentoo but it seems to me like any other 90s era distro where the distro mediates the relationship between the user and the upstream developer for all packages, by applying patches and potentially doing whatever build they want to.
pdonis 22 hours ago [-]
Gentoo builds every package from source on every user's machine, and when each user does an update, every package that changed gets rebuilt from source again.
So every Gentoo user that has a Python project that uses uv-build ends up having to rebuild uv-build, and then every Python project they have that uses it, every time uv-build pushes an update.
Other distros don't necessarily have quite the same problem because, if they include packages of Python projects, they don't normally track the build backend as a dependency. So if uv-build pushes an update, the distro would push an updated package for uv-build, but they wouldn't look at every Python project they package to see if it used uv-build as a build backend and rebuild it if it did. It's the "rebuild from source every time" aspect of Gentoo that forces that connection.
jitl 22 hours ago [-]
i guess gentoo is rolling-release, vs something like debian where every package is frozen in time (+ backports), and debian does seem to largely solve the coordination problem by making everything on the system use a fixed version of some package; with rare situations allowing >1 version of the package at a time.
my take on linux distros being annoyed by their own policies is that perhaps they should change the policy. in this case, perhaps they should pretend uv-build updates once a month or something.
This is what i mean when it seems typical for a distro to monkey around with packages and/or their build system. These were just the first two packages i clicked on in dev-python. maybe others are "pure upstream", but there's definitely the capability here to just... not have the problem?
simoncion 20 hours ago [-]
> my take on linux distros being annoyed by their own policies is that perhaps they should change the policy. in this case, perhaps they should pretend uv-build updates once a month or something.
Thing is, that apparently won't work. From [0], with some more discussion starting at [1]
> > I don’t understand why Gentoo needs to rebuild every single release of uv-build.
> Because if you don't pin a version of uv-build in your project, that means "use the latest version available". Gentoo can't second guess you--even if it were able to verify somehow that the new version of uv-build that just got released will end up producing an identical wheel for your project as the previous version, without actually using the new version of uv-build.
gentoo also wrap python packages in their own package manager, packages in this tree appear to come from their upstream version control system eg Github, not PyPI.
just because someone on hn said something, doesn't make it true.
woodruffw 19 hours ago [-]
Per my response, that isn’t how Python packaging works. There is no “use the latest version” mechanism in standard Python packaging; leaving a version unconstrained means that the installer, meaning Gentoo in this case, gets to decide how to constrain it.
simoncion 5 hours ago [-]
> ...leaving a version unconstrained means that the installer, meaning Gentoo in this case, gets to decide how to constrain it.
So, would it be correct to decide that package with an unconstrained version gets built with 0.1.0? And when that fails to build, what's the distro packager to do? Bang on the package maintainer until they specify the real constraint? Yeah, good luck with that.
Doesn't it make way more sense to assume that "unconstrained uv-build version" means "they only tested this with the very latest version of uv-build" and proceed accordingly? This will fail sometimes, but I figure it'll fail far less often then assuming that you get to use 0.1.0 if no version is specified.
I'm being a little extreme with my example here, but only to illustrate the larger point I'm making. Breaking changes do happen, and without specified version constraints one has to assume that "very latest available" is the correct one.
woodruffw 4 hours ago [-]
Well, that’s why you should use a semver range, as is the default, instead of leaving it unconstrained. That’s the actual solution that solves the problems for all parties here; I’m just pointing out that “unconstrained = latest” isn’t a correct summary of how Python packaging works.
mook 54 minutes ago [-]
In that case, wouldn't it be better for uv to reject unconstrained? Gentoo (or any packager, such as homebrew / nix) is too far downstream for that. Presumably allowing unconstrained seemed to make sense in some circumstances at some point?
woodruffw 50 minutes ago [-]
No, because it’s a standard part of Python packaging, and it’s not the problem here.
(There are all kinds of legitimate reasons to use an unconstrained dependency, including locking it separately and also trying to help other downstream Linux distros with their own bespoke packaging problems.)
pdonis 21 hours ago [-]
> i guess gentoo is rolling-release
That's my understanding, yes.
swiftcoder 22 hours ago [-]
> they don't normally track the build backend as a dependency... It's the "rebuild from source every time" aspect of Gentoo that forces that connection
I don't follow. This feels like Gentoo is mishandling build-tool dependencies.
Does Gentoo also recompile every C/C++ library in the dependency tree every time GCC pushes a minor version bump?
pdonis 21 hours ago [-]
> This feels like Gentoo is mishandling build-tool dependencies.
I would say it's doing what it believes is necessary for the Python ecosystem. The build backend is an explicit part of the specification of a Python project.
> Does Gentoo also recompile every C/C++ library in the dependency tree every time GCC pushes a minor version bump?
No, because C/C++ libraries don't have an explicit specification of the build tool to be used in their project, the way a Python project does.
swiftcoder 20 hours ago [-]
> The build backend is an explicit part of the specification of a Python project
Nothing in the Python spec forces Gentoo to invalidate the downstream package every time build-system dependencies update - that's a behaviour they've decided is correct on their own.
> C/C++ libraries don't have an explicit specification of the build tool to be used in their project
They don't have a standard way to specify such, but they have an implicit dependency on the installed compiler toolchain, and it would be just as valid to interpret "no way to specify a build-system dependency" as "always rebuild" when the build tool updates
everyflavourvms 21 hours ago [-]
> I don't follow.
I don't either. I used to run Gentoo for quite a few years in the past and build dependency updates would not trigger rebuilds of build-dependent packages.
Rebuilding the entire system with a new GCC was recommended by the documentation, but there was nothing in Portage forcing it. Neither would you rebuild the system if, e.g. make got an update.
fuzzy2 21 hours ago [-]
IIRC, rebuilds to GCC outputs are/were only recommended when the compiler "profile" changes. So basically whenever the ABI could no longer be guaranteed.
edoceo 21 hours ago [-]
No, and not with clang or llvm or rust. When we get a new Golang tho, that does rebuild stuff built with Go. And big perl updates cause a rebuild for perl packages.
ForHackernews 22 hours ago [-]
Strictly speaking, they should, right? Differences in GCC could produce differences in anything it compiles.
BigTTYGothGF 21 hours ago [-]
Seems like a design flaw in gentoo that previously hadn't been an issue because build tools weren't being updated nearly as often as uv-build is.
woodruffw 22 hours ago [-]
I linked to some of the relevant standards below.
At the end of the day, it’s hard for me to even pinpoint what is problematic for Gentoo here: I can understand that they need to support multiple build backends as a reality of Python packaging and that’s frustrating, but per below it seems extremely unlikely that they actually need to build every single patch version of uv. Nothing about uv’s defaults or the packaging template would require that, and users would have to go out of their way to configure their build backend in that way.
(And note: this is not unique to uv! You can grief anybody who does an sdist build by pinning to a random ancient version of setuptools or any other build backend, including other ones that use native code. This is why uv, like everybody else, encourages semver ranges for build backends.)
pdonis 22 hours ago [-]
> it seems extremely unlikely that they actually need to build every single patch version of uv.
If every new patch version is still within the semver range specified in a project that uses uv-build, then yes, every Gentoo user will have to rebuild that new patch version of uv-build in order to rebuild that project. And since the build backend is a dependency of the project, pushing a new patch version will trigger a rebuild of the project.
p_l 23 hours ago [-]
The problem is packages that use the build backends, and Gentoo is generally not in the business of maintaining that kind of patch.
Admittedly rustification like that is a problem not only for gentoo, I have commercially deployed systems where one of the most annoyings elements of updating is presence of rust in python deps...
woodruffw 23 hours ago [-]
I think that’s actually a different problem: packages that use uv-build for their backend should use a semver range, which enables the kind of “pick a version and use it” strategy I mentioned before.
(This is the default when you initialize a project with uv, so I think someone would need to go out of their way to configure their build backend to request a specific patch version of uv-build.)
pdonis 22 hours ago [-]
> packages that use uv-build for their backend should use a semver range
This wouldn't necessarily solve Gentoo's problem. The only way to be sure to solve Gentoo's problem would be for every Python project that uses uv-build to specify one particular version. Then Gentoo could be sure that once that release of that project was built once, it would never change.
In other words, for a distro like Gentoo, the build backend is a dependency, and if it changes, that triggers a change in the build, even if the build backend change would not actually change the final wheel that got built.
woodruffw 22 hours ago [-]
That would appear to be the polar opposite of effective: that turns a global constraint problem (everybody needing to have or install a compatible build backend version) into a global coordination problem (everybody needing to have or install an exact version). I can imagine most of what causes problems for Gentoo is people trying to do the “right” thing of pinning an exact build backend version, which then invalidates whatever compatible build backend version they’ve picked.
It seems much easier to solve the problem of compatibility than the one of getting every open source maintainer to upgrade their build backend version (whether uv-build, or flit, or anything else) every Tuesday.
pdonis 22 hours ago [-]
> I can imagine most of what causes problems for Gentoo is people trying to do the “right” thing of pinning an exact build backend version, which then invalidates whatever compatible build backend version they’ve picked.
This doesn't make sense. Gentoo doesn't "pick" any build backend version. They build each Python project exactly the way the project owner tells them to, using whatever build backend is specified in pyproject.toml for that project. That's why it's such a burden for them (or more precisely their users, since each Gentoo user is having to do this) if build backend versions change so often and projects don't pin a specific version but just say "use the latest"--because then they have to use what the project owner says, and the project owner says, "Update to a new build backend every week because that's how often my chosen backend, uv-build, likes to push updates".
woodruffw 22 hours ago [-]
> if build backend versions change so often and projects don't pin a specific version but just say "use the latest"
This isn’t what’s happening: uv defaults to semver bounds, so a maintainer would have to go out of their way to introduce a troublesome backend constraint.
And note: there is no “use the latest” constraint in Python packaging. If you leave the build backend version unconstrained, the build frontend is allowed to resolve any version it sees fit, including the version it already has.
(I also know from first-hand experience that Gentoo and other distributions do not build Python packages as-is; they patch them in all kinds of ways. But that’s neither here nor there.)
pdonis 22 hours ago [-]
> uv defaults to semver bounds
But a new patch release will be within the same semver bound, so it amounts to the same thing.
> If you leave the build backend version unconstrained, the build frontend is allowed to resolve any version it sees fit, including the version it already has.
What do build frontends actually do, though?
woodruffw 22 hours ago [-]
> But a new patch release will be within the same semver bound, so it amounts to the same thing.
Sorry, can you lay out the actual problem you’re envisioning for me? If uv-build goes from 0.13.1 to 0.13.2, then anybody with a semver bound of `uv-build>=0.12,<0.14` doesn’t need to update anything. They can keep using whatever version of the build backend they already have that satisfies that bound.
The main thing that would be troublesome is if a user pins their build backend to a specific range or version, e.g. `uv-build==0.13.1`. Then, upon bumping it, everyone who has already built 0.13.1 will need to invalidate and rebuild their build backend. But that’s why that isn’t the default.
> What do build frontends actually do, though?
uv will definitely use a compatible version. It won’t even download a copy of that that compatible version by default, since the uv binary itself is typically compatible and can invoke the build backend directly.
I’m not sure what pip and others do, but I would expect they do the same. It’s the obvious way to implement backend resolution.
pdonis 21 hours ago [-]
> It’s the obvious way to implement backend resolution.
If a compatible version is already present, yes, a frontend can just use it if it's within the semver range specified.
But in many cases, builds are done in a fresh virtual environment that has nothing installed. In such a case, the only option is to download the latest version that's in the semver range specified. That's how the "build" frontend works, for example, unless you specify a flag to keep it from creating a fresh virtual environment.
woodruffw 20 hours ago [-]
Is that what Gentoo is doing here? I thought the whole point of the distro doing any sort of Python packaging is that they can pierce abstractions like virtual environments where it suits them.
(But also: if we’re talking virtual environments then we’re firmly in Python land, not distro land, where the correct answer is “use a wheel” instead of building it yourself.)
pdonis 18 hours ago [-]
The whole point of Gentoo is to build everything directly from source. That means doing whatever the build source tells you to do. It also means not using a pre-built wheel, since that's not source code.
From what I can gather, Gentoo's Python build system does use a virtualenv [1]. Maybe that's not your definition of "distro land", but it appears to be Gentoo's.
It's not clear to me exactly what frontend build tool is used, whether it's one of the well known ones or something that the Gentoo developers coded themselves. However, if it's using a virtualenv, it's going to have to re-fetch the build backend and rebuild it.
If it’s using a virtual environment, then they can pierce the abstraction by inheriting system packages, including a compatible uv-build. There’s nothing about Python packaging that requires them to rebuild the backend multiple times.
pdonis 2 hours ago [-]
> If it’s using a virtual environment, then they can pierce the abstraction by inheriting system packages
Which defeats the purpose of doing the build in a virtualenv, which is to avoid any possible collision with or contamination by other stuff that's installed on the system by using a fresh copy of everything.
woodruffw 2 hours ago [-]
They’re already defeating the point of Python packaging in multifarious ways here. The entire reason uv and uv-build exist is because we have mature, smooth mechanisms for not rebuilding the world.
pdonis 22 hours ago [-]
> a global coordination problem (everybody needing to have or install an exact version).
This coordination problem is already solved by PyPI. That's where Gentoo looks to find the build backend--just like everyone else that builds packages. The project owner had to be able to find whatever version they used there or they couldn't even build their project locally. So they should be able to depend on the fact that anyone else trying to build their project can also find that same version at the same place.
> getting every open source maintainer to upgrade their build backend version (whether uv-build, or flit, or anything else) every Tuesday.
You're missing my point. If I know that my project builds properly with build backend X version Y, and I pin that version in my pyproject.toml, I don't care how many newer versions you want to release. Unless I make a change to my project that merits updating my build backend to a newer version, I'm going to simply leave my project alone. I already know it will build fine with the version I have. Why should I push an update every Tuesday just because you decided to release a new version of the build backend, which I don't need anyway?
It looks like it downloads from uv's git repository, which would also solve the coordination problem under discussion, since once a version is posted there it should remain there.
arto 23 hours ago [-]
I hear you, but realistically the rustification of Python package internals is only going to strongly increase over the next year (I'm working on a number of such packages, myself), so systematic solutions to such annoyances are going to become increasingly necessary
p_l 21 hours ago [-]
Well, it did force me to work on better build caching and the like, but at the same time, it accelerated my wish to remove python where possible
hitekker 19 hours ago [-]
This response downplays the portability concern which is the main point of the article. The ask for Gentoo to change its release & update cadence doesn't answer his plea.
As I see it, uv-build is Rust and will stay Rust, so SPARC or address-space-constrained 32-bit targets may never work right. Astral prioritizes its users who run on tier-1 targets, and the cost of their uv-init default lands on the downstream packages that Gentoo has to build. Gentoo wants projects to choose pure python backends to reduce that ecosystem load, Astral would prefer if more projects default to uv-build (IIRC the default went from hatchling to uv-build in mid-2025).
Long-tail & evolution of ecosystem would be a far more interesting discussion, but the broader community has a "we are the future/adapt to us" sentiment that forecloses trade-offs.
woodruffw 18 hours ago [-]
I mean, SPARC and anything else can work right. But what uv can’t do is conjure up support for platforms that the larger ecosystem won’t even claim to support.
To that extent, I think uv (and CPython, and Rust, and so many other projects) are essentially trying to be honest in saying “we have no way to build and test that to our own standards.” I think that kind of honesty in validation is its own kind of load reduction on the ecosystem, because it means less tacit assumption that the maintainers will support anything that happens to build.
amluto 20 hours ago [-]
> The nice thing about Python packaging is that it’s standardized
And a problem with Python packaging is that it's far too flexible.
For a pure Python package, IMO every single file in the wheel should be bit-for-bit identical to a file in the source tree (with the possible exception of a manifest listing the files). If this were actually a guarantee, even just for a category of package that opted in, then:
a) The build "tool" could be replaced with a build file selector, which would often be completely trivial and could have default behavior that worked for almost every pure python package right in pyproject.toml and
b) Instead of the giant mess of sigstore and attestation and weird trusted builds we have today, we would have a straightforward proof that a wheel actually matched a git commit irrespective of who built it. In fact, the proof could be embedded in the wheel! And the proof could be verified without executing any package-controlled code.
zbentley 4 hours ago [-]
Maybe, but I do think “pure Python sdists could just be a file selector” misses lots of common cases of simple code generation. Documentation boilerplate generators, version-at-runtime generators, things that generate e.g. static HTML or protobuf or whatnot results…it’s not most pure-Python packages, sure, but it’s a lot of them.
amluto 3 hours ago [-]
Fair enough.
As far as I know, packages that use or could use uv-build or flit-core are in the just-copy-files category.
woodruffw 15 hours ago [-]
Python is exactly as flexible as the people who use it want it to be. I suspect that most trivial solutions do not generalize to the interests of the broader Python community, which is how we end up with standards that are universally agreed to be not exactly what anybody wants.
BigTTYGothGF 21 hours ago [-]
> The nice thing about Python packaging is that it’s standardized
Has anybody done the analysis to determine if this is something that can, in practice, be relied on?
woodruffw 21 hours ago [-]
You can demonstrate it somewhat empirically: pip, uv, etc. all understand the build backend interface and packaging standards and can install any package that conforms with the standards.
(I think so much of the confusion around Python packaging comes down the layer of abstraction/standardization not being the one that users intuitively expect. This is unfortunate and is made worse by lackluster user-facing documentation. But there are standards that guarantee interoperability, and they’re pretty close to Pareto-optimal in terms of making all involved parties happy.)
BigTTYGothGF 20 hours ago [-]
> any package that conforms with the standards.
Right, but what I'm asking is: by and large, can you expect any random package on pypi to conform to the standard?
woodruffw 19 hours ago [-]
Yeah, I think conformance is pretty good these days. PyPI itself enforces metadata well-formedness, and projects that don’t conform tend to get noticed quickly (because they don’t install correctly).
p_l 21 hours ago [-]
My somewhat ignorant experience is full of dealing with combinatorial expansion of python build backends and needing to husband them in nixos including all sorts of overrides to deal with, iirc, weird circularities in deps.
ForHackernews 23 hours ago [-]
Is Gentoo one of those compile-everything-from-source distros?
BeetleB 22 hours ago [-]
With apologies to Slackware, it is the compile-everything-from-source distro.
Happy user for over 23 years now!
pjmlp 12 hours ago [-]
Well, I got introduced to Linux via Slackware 2.0, and it already had binary tarballs.
BeetleB 32 minutes ago [-]
I think Gentoo had a few (e.g. Open Office which took forever to compile). I don't recall if they did in 2003, when I started using it. But if not then, they had it soon after.
pjmlp 22 hours ago [-]
They basically started it all, that was what made Gentoo different from everyone else.
PuercoPop 21 hours ago [-]
I wasn't there when it started but wasn't the raison d'etre was the GCC fork that eventually became the new upstream for GCC. Because the fork was faster Gentoo got the reputation that compiling from source was to get faster executable. This is a misunderstanding imho, as the greatest strength of Gentoo the level of customization enabled by use flags.
pjmlp 21 hours ago [-]
I would not call egcs that fast, nor do I remember it having any role with Gentoo.
PuercoPop 20 hours ago [-]
Gentoo was the first distro to use egcs as part of their default toolchain. Not sure if it was the only, but it was the only one I heard to had done so.
pjmlp 20 hours ago [-]
I can tell that in 2004, it was a regular GCC, and I got fed up compiling it.
p_l 21 hours ago [-]
It also made it nice base for both ChromeOS and its descendants like COS and Flatpak (continuation of original CoreOS)
tfrancisl 22 hours ago [-]
Yes, and unlike NixOS they dont calculate build hashes for the sake of making binary caches. So truly, you have to build from source, even if your recipe is exactly the same as everyone else's. I've never really understood this zealotry around compiling things myself, and boy are there some big (slow to compile) programs out there these days.
NoidFonsense 22 hours ago [-]
There are binary packages in gentoo, but you can't take advantage of USE flags.
t43562 22 hours ago [-]
For one thing you can, in theory, optimise for the CPU you have instead of some generic target that has to run acceptably everywhere.
tfrancisl 22 hours ago [-]
Sure, but again, you could in theory distribute said builds and stop wasting compute compiling yourself. I know nixpkgs, for example, builds with very generic targets and not super aggressive compiler flags, but at least the machinery exists to do this.
simoncion 20 hours ago [-]
> Sure, but again, you could in theory distribute said builds and stop wasting compute compiling yourself.
Here are three links that you will find informative. [0][1][2]
While I'm not using the official Gentoo binhost, I've had one running on my LAN for my own personal use for roughly a decade now. It has been possible to set up a binhost for quite a bit longer than that... that's just when I got multiple machines with the same CPU in them, so it made sense for me to set one up.
And even before binhosts you could have a shared buildhost with ccache.
simoncion 4 hours ago [-]
Was ccache support much older than binhosts? It has been so very long since the introduction of both that my memory of the history has been thoroughly erased.
account42 4 hours ago [-]
Not sure, perhaps I was only aware of ccache before binhosts.
t43562 21 hours ago [-]
On my 10 computers for example? :-) Gentoo wasn't aimed at people with such luxuries.
I'm not a Gentoo user BTW but I do think building from source is attractive for the same reasons cargo (Isn't that build from source mostly?) and go do it.
yolp5 22 hours ago [-]
[dead]
r_lee 23 hours ago [-]
I'm pretty sure that is the entire purpose of Gentoo
account42 5 hours ago [-]
Specifically, the purpose is a level of system configuration that is only possible by rebuilding stuff.
collinfunk 23 hours ago [-]
Yeah, it has binary packages nowadays as well, though.
22 hours ago [-]
crabbone 22 hours ago [-]
[flagged]
woodruffw 22 hours ago [-]
Python build backends are standardized in PEP 517, and packaging metadata is standardized in PEP 621. You can read the actual metadata PEPs for “computed” metadata i.e. the metadata that appears in distributions as well, if you’d like.
(It’s not kind or charitable to call someone a liar.)
231ag 22 hours ago [-]
And every backend accepts a different syntax in the .toml file. You cannot just swap out poetry for flit.
Especially when C extensions are involved, everything is entirely unportable. Of course, yet again crabbone is downvoted for speaking the truth.
woodruffw 22 hours ago [-]
Each build backend can have its own extensions to the standard packaging metadata. In practice this is common because Python packaging wasn’t designed to solve language ecosystem problems, but to make the union of maintainers, Linux distros, labs, and everybody else who uses Python somewhat happy and able to preserve existing flows.
This is bad for obvious reasons. But it’s not the same thing as Python packaging not being standardized; I would say that Python packaging is as standardized as its user base is willing to stomach. That willingness has grown over the years, to the immense credit of a large group of users who otherwise don’t agree on much.
crabbone 19 hours ago [-]
You pretend not to understand what "packaging" means. No, it's not just the format description, even though the format description incorporates useless fields that are designed specifically to help setuptools to overcome the problems they created for themselves (all the "Dynamic" stuff is worthless otherwise).
Packaging, in this context, means a unified interface that describes to the tool what needs to happen to the source code in order for it to be transformed into a binary package. There are about a dozen tools that can package Python binary modules, setuptools, SWIG, bind11 and so on. Each does it in a completely different way. In practice, if you want to build the packages now available on PyPI, you will not be able to come up with a single tool that can build every one of them, probably, not even half of them.
All this talk about standardized metadata is worthless because of what actually goes into the package. The metadata is the least of your problems when packaging Python code.
woodruffw 19 hours ago [-]
> In practice, if you want to build the packages now available on PyPI, you will not be able to come up with a single tool that can build every one of them, probably, not even half of them.
This is the entire point of build backends, and is no longer true/hasn’t been true for several years. Build backends are not perfect, but they are the reason you can run `uv add` or `pip install` and get a functional wheel from an sdist on PyPI regardless of whether the sdist contains Python, C++, Rust, or anything else.
(This is now the second time you’ve imputed dishonesty in a conversation where I’ve tried to be helpful. So this will be my last response.)
crabbone 10 hours ago [-]
You are absolutely delusional. None of what you write is true.
> This is the entire point of build backends
This is false. Python doesn't have any format, any way of describing how to compile a package. There's a gaping void where such a specification should be. Every tool that does it, has its own bespoke way of configuring it. Most of them don't even care what PyPA has to say about it.
> is no longer true/hasn’t been true for several years.
This has been true as recently as this morning. Nothing has changed in the last twenty years, probably more. No change is planned. The people who put themselves in charge of the process are incompetent to the point that, just like you, they don't understand the assignment and produce piles of worthless garbage instead.
> Build backends are not perfect
Build backends is a nonsense invented by PyPA because they didn't understand what actually needs to be done. The whole concept is worthless. It doesn't address the issue: it doesn't have a generic method describing how to build a Python package. Python doesn't need build backends. This whole circus needs to go.
> you can run `uv add` or `pip install` and get a functional wheel
This has nothing to do with building packages. Ideally, these are supposed to install the already built packages. If, however, you accidentally veered into the "oh, crap, I have to build it now because for my platform there isn't a binary", then pip or uv will poop their pants about 50% of the time because the tool that is needed to build the package is not installed, or the dependencies are missing, or the wrong version of the tool is installed, or it's misconfigured etc.
Worse yet, they shouldn't build anything. This is a batshit idiotic idea that a package installer, by default, tries to build a package if a binary is missing. But, we live in the world populated by people without a drop of critical thinking, governed by worshiping tradition, and that's why these tools do what they do.
BigTTYGothGF 21 hours ago [-]
> Of course, yet again crabbone is downvoted for speaking the truth
It wasn't for what was said, but for how it was said, which is why you can say all sorts of heinous stuff on here as long as you're couth about it.
crabbone 19 hours ago [-]
Nobody cares about PEP-517 or any PEP for that matter since PyPA decided they are above it. PyPA decides how things are done, PEPs are just "historical documents".
Nobody cares if package metadata is standardized. The tools aren't. The tools are the problem, not the package format.
Well, if the poster says something that is blatantly untrue, how would you call them? Liar describes exactly someone who intentionally tells something that isn't true.
231ag 22 hours ago [-]
[flagged]
afdbcreid 22 hours ago [-]
By a search, Gentoo accounts for less than 1% of all developers. If uv-build is more conformant to people, probably volunteers (and if they're using it, it probably is), I don't think the Gentoo people have any right to want them not to use it because it makes their lives harder. They can request, and they do request nicely, but they also present the drawbacks for them as if they are absolute, and even claim that "its benefits don’t outweigh the drawbacks".
t43562 22 hours ago [-]
You think Gentoo isn't important, they think the build backend doesn't matter. They're asking. Nobody's compelled to listen.
afdbcreid 20 hours ago [-]
> they do request nicely, but they also present the drawbacks for them as if they are absolute, and even claim that "its benefits don’t outweigh the drawbacks".
t43562 20 hours ago [-]
for some people the benefits absolutely do outweigh the drawbacks. Maybe not for you....but on the whole I don't know - if the whole issue had been solved without being given attention would you have ended up caring which way it went?
NoidFonsense 22 hours ago [-]
This is their request
globular-toast 22 hours ago [-]
I'm sure it accounts for a much larger proportion of people using exotic or legacy systems. In any case, I think most people are using uv-build either because it's a default for uv now or just because it's hip and new. If a project absolutely needed it then so be it, but if you knew it was going to make life difficult even just for one person and no benefit to you then you'd probably choose something else.
the8472 22 hours ago [-]
> the Gentoo uv ebuild already carries two hacks to make it possible to build uv on 32-bit platforms).
Looks like it's being built with fat LTO by default (and gentoo patched to thin LTO). Which is fine if you want to spend CI cycles once to ship executables to thousands of users.
If you compile from source and run the tool maybe once then they should consider going further and run with maybe opt-level=1, lto=off; halfway between release and debug. This is how rustc itself builds some internal buildtools that get recompiled frequently relative to how often they run.
nimish 22 hours ago [-]
I'm not sure that skipping SPARC is a bad thing. Who even has SPARC machines sitting around to validate builds? Even Fujitsu moved to ARM for their later cores.
doctorpangloss 22 hours ago [-]
people who are specially interested in packaging and therefore do it for free care about SPARC.
pornel 15 hours ago [-]
but who's using it? Where are the hordes of SPARC users craving cutting-edge software?
21 hours ago [-]
jitl 22 hours ago [-]
i got a debian maintainer for old IBM mainframes asking me to fix bugs and run tests for that architecture. ¯\_(ツ)_/¯ these people exist, but i'm not going to support them. feel free to fork me!
eviks 21 hours ago [-]
> for every 100 ms spent running uv-build to install one release of your package, Gentoo users will spend many hours building new uv-build versions over and over again.
If only there were ways to skip this waste...
shadowgovt 22 hours ago [-]
I don't think I agree with the author's assessment here:
> The other reason is performance and that argument makes even less sense. Even if it mattered, we’re realistically talking about a difference in the ballpark of 100 ms, for an action executed rarely; it is equally possible that any gain will be outweighed by the time needed to fetch the 1.5 MiB wheel for uv-build.
Modern CI architectures are building Docker stacks from scratch and using a readthrough cache of wheels. Downloading may still be the dominant factor, but the second-dominant factor does start to add up, especially when the downloading gets cached at various layers.
nwalkr 21 hours ago [-]
maybe it's time to embrace the enemy and go "clanker, this is uv-build source, rewrite it in portable C". rewrite it in C FTW!
btw, I know of a guy who using extensive amounts of tokens to make his fork of mrustc usable via "claude, make this rustc compile 99% of crates.io", I think this also can yield some results.
pjmlp 22 hours ago [-]
Wait until he discovers that CPython is actually taking Rust in, see recent PyCon talks on the matter.
t43562 22 hours ago [-]
Yes, optionally apparently but I think we'll end up with forks of Python if the Rust enthusiasts push it any further. I think the option will be off for me.
pjmlp 21 hours ago [-]
Only at the beginning, as someone points out, it doesn't scale to always write a C and Rust versions of new modules.
t43562 20 hours ago [-]
I presume that those who don't want to have to build rust just to get python will stick the rust code into an LLM and get out an acceptable analog in C.
pjmlp 20 hours ago [-]
At that point LLM will be generating applications directly.
t43562 20 hours ago [-]
The point of converting things is here already - existing code is like a very precise prompt. I've used it for Perl-Python mainly and the results are far better than trying to write new code.
pjmlp 20 hours ago [-]
The point being that is like arguing what is the best way to generate Assembly.
If you use low code platforms like Workato and Boomi, it is already doing coding with prompts, 3GL languages don't play any role in those platforms.
woodruffw 22 hours ago [-]
I think mgorny is aware of that; he’s been active on the relevant DPO threads.
(At the end of the day, this is exactly what support tiers are for. CPython, at least to my eyes, has been very transparent about not guaranteeing support for every platform that has a C compiler.)
t43562 21 hours ago [-]
I found this recently - couldn't compile it on HPUX. Trying to get rust on there would have been an absolute impossibility of course. I can get bash though, and lots of other GNU utilities - all written in C of course. Thank goodness some people care!
People who don't care about HPUX will never care about it but they would if e.g. we decided that only windows and Ubuntu were supported ... except for the windows and ubuntu python users who wouldn't care.
It's I'm-all-right Jack until it's your use case that gets bulleted.
collinfunk 21 hours ago [-]
Hi, one of the co-maintainers of GNU coreutils here. It is nice to hear things worked on HP-UX. I don't have access to it, and I don't think the other maintainers do either. See this commit [1].
[1] https://github.com/coreutils/gnulib/commit/c599eba7bed3baa30...
t43562 21 hours ago [-]
Yes we're using quite an old version 8.13 and yet it does the job for our build which maintains an EXTREMELY important bit of software in public service relating to healthcare.
It's on Itanium so obviously we have to move away from that to Linux but the existence of open source tools like coreutils gives us time.
No such luck with python. We have to postpone some changes as a result.
As I say, there's some kind of effect where changes that are only negative on the margins are cheered until one finds oneself on one of those margins.
collinfunk 11 hours ago [-]
Glad you could get an older version works well for you. We probably would have tried to continue supporting it if we had access to it. I'm a bit sad I never got the chance to use it once.
woodruffw 21 hours ago [-]
I think there’s a categorical difference between HP-UX (which seems to no longer even be maintained by HP) and something like Linux on the top 5-6 most popular architectures.
(But with all that said: there’s no ideological dispute here. If there was a reliable way to build and test for HP-UX, I assume a lot more people would declare support for it. The problem comes down to maintainers being asked to support platforms they ultimately have no ability to support, except in the weakest sense of “it compiles.”)
t43562 21 hours ago [-]
If it compiles then people like me can get it to work. What we cannot do is build an entire rust toolchain to make it compile.
woodruffw 20 hours ago [-]
There’s a very large body of closed issues on most popular open source projects showing that “it compiles” is nowhere close to “it works.”
t43562 20 hours ago [-]
When you think about GNU autotools they're all about being able to compile on platforms that the software has never been compiled on before - that's why there are all those feature tests to see what the OS and compiler support.
I've done this many times on things like AIX 4.3 and HP-UX and so on. Sometimes you can get through the compile without any problems at all and the tool often works enough for your usecase and that's a win.
Sometimes there are particular little problems, sometimes it's something serious like an actual missing C library call or whatever and then you have to do some work. With nicely designed tools that have fairly wide support to begin with this tends to be easier.
the__alchemist 22 hours ago [-]
UV build is distributed as a binary/executable, e.g. manylinux wheels on pypi: https://pypi.org/project/uv-build/#files. If a user or distro's conventions are to build things from source, this is a consequence they have implicitly accepted. For the vast majority of computer users and uses, installing binaries makes more sense.
p_l 21 hours ago [-]
It is still a problem where there are no binaries for platforms otherwise supported by the distro, and in fact supported by the package being built - because uv-build is the only part that does not run on given platform and can't be reliably built for it
the__alchemist 21 hours ago [-]
I agree that they exist. My 2c: the wheels in that link of manylinux, musl linux, Windows, and MacOS will work on 99.9% of users' OSs.
128476 22 hours ago [-]
Why would anyone install an OpenAI binary from an insecure platform?
the__alchemist 21 hours ago [-]
You registered to post this?
BigTTYGothGF 21 hours ago [-]
It's a fair question.
woodruffw 19 hours ago [-]
Is it? Why would you trust uv’s source at all, if you don’t trust its builds?
(I mean: trust or distrust seems potentially reasonable, but I don’t see what the binaries have to do with it.)
21 hours ago [-]
throwawayy6767 23 hours ago [-]
Maybe it's time to grow up and download binary builds like a normal person. I had my 'let's compile the linux kernel from source for 3.5% hypothetical performance gains' phase but you can't expect professional devs to cater to source-obsessed hobbyists
bmenrigh 23 hours ago [-]
I doubt this oft-repeated stereotype was every particularly accurate. I'm not aware of any current Gentoo users on the distro specifically for performance reasons. Gentoo users are in it for control over their system and customization.
> In the early days, there was much promotion of Gentoo as being “faster”, because you could compile everything based on your particular processor, etc. And you could increase the optimization level for a boost. Their web site still touts this as a reason to use Gentoo.
> In reality, the performance is more or less the same as on any other distribution. The folks who stick to Gentoo tend not to care about performance as much. Unfortunately, this perception of Gentoo remains, and I wish they would remove the verbiage from their site.
account42 5 hours ago [-]
> In reality, the performance is more or less the same as on any other distribution.
It is now but in the 32-bit days there was a nontrivial boost form compiling for e.g. a Pentium 4 when most binary distros were still stuck targetting generic i586 or something old like that.
bmenrigh 21 hours ago [-]
A friend of mine got me on Gentoo in 2004. He spent all of his time tweaking compiler flags like -O3 -ffast-math -fomit-frame-pointer -funroll-loops and running into so many issues in the process. I think he only lasted about 9 months on Gentoo. To this day, he's the only person I've ever met that was there for performance.
I'm still on Gentoo 22 years later.
simoncion 21 hours ago [-]
> A friend of mine got me on Gentoo in 2004.
Good timing! If memory serves, you missed the Big Libpng Upgrade that either got the concept of Package Slots into Portage or convinced everyone that they were a _really_ good feature to have and use where appropriate.
simoncion 21 hours ago [-]
> Unfortunately, this perception of Gentoo remains, and I wish they would remove the verbiage from their site.
Based on what I can see after putting a minute or two into searching, that verbiage being referred to only appears on the About page. [0]
The distro's home page says
Welcome to Gentoo, a highly flexible, source-based Linux distribution.
and has used those words since at least January 2023 [1]. Its home page has spoken about flexibility and has not spoken about performance since the big redesign in April 2016... seven years prior to the publication of that guy's blog post. [2][3]
And -speaking as a Gentoo user since 2002- neither the user community nor the maintainer community hold the opinion that Ultimate Maxxximum Performance is the distro's goal. Trouble reports that come from "ricers" pretty much always get told "Set your compiler flags to something sane (try '-O2 -pipe' or '-O2 -pipe -march=native') and rebuild. If you can still repro the problem, file a new report because this one is getting closed INVALID.".
And -while the old Gentoo Wiki burned down so I can't prove it- [4] the advice about GCC optimization in the wiki has always cautioned against using aggressive compiler flags and warned that doing so will -among other things- not substantially improve performance. The advice about reasonable compiler flags has pretty consistently been "Use -O2, -pipe, -march=$THE_CORRECT_SETTING_FOR_YOUR_CPU, and maybe -fomit-frame-pointer"... though the "-fomit-frame-pointer" advice has always come with a warning that doing that may make debugging either extremely difficult or impossible, and the "-march" advice the warning that this may make it impossible to run those binaries on another computer.
Anyway. There's only so much you can do to erase an -allegedly- pervasive myth. The fact that some folks have the belief that Gentoo Linux is all about Maxxximum Performance doesn't change the fact that nearly all of the people who use it and -almost certainly- all of the people who maintain it strongly disagree with that claim. The distro is and always has been about flexibility, user choice, and having fun. And it's a nice bonus if building for -say- -march=athlon-xp instead of -march=i586 happens to get you a bit of extra performance here and there.
[3] That year's April 1 redesign was a bit cool, IMO.
[4] The oldest copy that I can easily find is from mid 2013 [5], so you'll just have to trust me that this has been the long-standing opinion of the overwhelming majority of users and maintainers. While you're there, take a minute or two to skim the prose and notice how it consistently warns against using aggressive compiler flags.
> Extreme configurability, performance, and a top-notch user and developer community are all hallmarks of the Gentoo experience.
It's the performance part I was referring to.
Going back to when I started using it:
> Gentoo Linux is a high-performance ports-based Linux metadistribution
Regarding -O2 vs -O3, in the early days, -O3 was considered quite safe (I don't recall if it was recommended, but it wasn't discouraged). I think only after a certain GCC upgrade did they start discouraging -O3. I vaguely recall them announcing that quite a few of the -O3 benefits were now part of -O2, and that some (new?) -O3 stuff was unstable.
At the time, I knew little about compiler flags. I went with -O3 because of guidance from the Gentoo folks.
account42 5 hours ago [-]
-O3 is still quite safe and the rare cases where it causes issues have always been due to bugs in the source code being compiled from my experience. It isn't guaranteed to produce codue faster than -O2 though.
simoncion 5 hours ago [-]
> Going back to when I started using it:
Yep, when I started using it in _2002_ that was on the home page. Ten years ago, it stopped being on the home page because folks finally got the motivation to do a bunch of work to it. As I said:
Its home page has spoken about flexibility and has not spoken about performance since the big redesign in *April 2016*... seven years prior to the publication of that guy's blog post.
There's only so much you can do to erase an -allegedly- pervasive myth. The fact that some folks have the belief that Gentoo Linux is all about Maxxximum Performance doesn't change the fact that nearly all of the people who use it and -almost certainly- all of the people who maintain it strongly disagree with that claim.
> Regarding -O2 vs -O3, in the early days, -O3 was considered quite safe (I don't recall if it was recommended, but it wasn't discouraged). ... I went with -O3 because of guidance from the Gentoo folks.
It has been too long for me to remember what -O level my first Gentoo box ended up using (and I can't be bothered to pull it out of the closet and power it on to see), but the box I installed in ~2007 is using -O2. A random sampling of the few Gentoo forum posts from the early days that are in the Wayback Machine [0], as well as a handful of Bugzilla reports from the 2002->2005 era _suggests_ that most folks in the early days were using -O2. I'm certain that I played with all of the optimization levels on my first box, didn't notice any performance difference, and then settled on one that I can no longer remember.
And like, you say that -O3 wasn't discouraged. Well, -O3 isn't really discouraged today. The advice about -O3 gives you a summary of the facts and trusts you to make the choice that's right for you [1][2]
WARNING: Using `-O3` may cause some packages to break either during the compilation or misbehave at runtime, although `-O3` retains standard conformance, hence any breakage is either undefined behaviour in the application, or (very rarely) a compiler bug.
<irrelevant stuff elided>
`-O3`: enables `-O2` as well as optimizations that are expensive in terms of compile time and memory usage. Compiling with `-O3` is likely to improve performance (although not guaranteed). While historically `-O3` could expose compiler bugs, nowadays issues with `-O3` are almost always instances of undefined behavior (UB) and the code is at fault and should be fixed. Some packages are still known-broken with `-O3`. Using `-O3` is not recommended unless running test suites for packages.
(I'm pretty sure that "unless running test suites" thing means "you shouldn't use this optimization level unless you're also using FEATURES="test" to run the package's tests".)
FWIW, it's my maybe-incorrect understanding that many (most? all?) packages that are known-broken with specific flags get those flags filtered out and replaced with known-good ones... unless they're nutball "ricer" flags, in which case the user gets told "Don't do that!".
[2] Even the advice from a decade ago [3] is substantially similar: «This makes compilation take longer, and it not only might not make things faster, it may make things slower and is known to break things sometimes.»
There's a long history of people telling Linux users "to grow up" and "do what normal people do."
Linux wouldn't exist if people submitted to that argument.
throwawayy6767 22 hours ago [-]
The vast majority of desktop Linux users run Ubuntu (initial motto: Linux for human beings). So one may argue the literal opposite of what you wrote, in that if Canonical didn't invest into making a Linux distro that's accessible to normal people, it wouldn't have the relevance it now does. On top of that, Linux has (or had) a number of clear advantages over Windows that dwarf the presumed upsides of compiling everything from source vs. downloading builds.
There's not much of an argument for adopting obscure niche practices for their own sake
Brian_K_White 21 hours ago [-]
The rather large giant collosal planet sized argument that you somehow missed despite that, is that every single thing that you consider good and normal today doesn't exist except for the fact that at one point it was the obscure niche thing that annoyed intolerant "normal" people.
throwawayy6767 20 hours ago [-]
You, like the other commenter, disregarded the core argument of the matter in favor of contrarianness for its own sake: are you trying to argue that building literally everything from source is cool and good because it's niche and weird, whereas Linux was niche and weird once but it's cool and good now? As I said, Linux had and still has clear advantages over Windows to the point that Microsoft felt threatened by it fairly soon (cue Ballmer's chair throwing, cancer remark, etc.) and tried to undermine it before giving up with Nadella. What, exactly, are the obvious and objective upsides of compiling everything from source? Many posters in the thread dispelled performance-maxxing as a meme so it can't be that. You are comparing apples to oranges here.
t43562 18 hours ago [-]
I feel like I'm trying to explain a shade of colour to a blind person.
building from source has uses which you believe are worthless and other people don't think are worthless.
Anyone who uses cargo or installs a module for golang is building from source. But that, probably, is considered useful. It's only people who build C code from source who are niche and wierd. ....
t43562 21 hours ago [-]
Linux was obscure and niche for a very long time before Ubuntu existed and Ubuntu only existed because someone bothered to use and develop Linux when it wasn't normal.
The Ubuntu users are only there because after they had told the rest of us how silly we were for using Linux they eventually had to use it themselves for work.
Now we're going to listen to that sort of stuff again without rolling our eyes? ....
BigTTYGothGF 21 hours ago [-]
> The Ubuntu users are only there because
I started using linux in 1994 with slackware. Nowadays I use ubuntu, I've spent too many hours of my life tweaking my linux installs.
t43562 20 hours ago [-]
SLS for me. haha. :-) But now at least you have the choice! It's great really. I can use Artix because I like being nearer the bleeding edge but even that is really a lot easier to use than Linux was in the days when I had to compile my kernel.
Nevertheless I remember lots of my friends who started off saying Linux was hopeless and ended up using it and Ubuntu was their gateway. The Linux world now is full of people who are fairly conformist and don't care about how it all began and who don't value the idea that open source has margins from which who knows what world beating things might eventually come. The fact that margins can exist is what makes open source great.
pjmlp 12 hours ago [-]
And the vast amount corporations that invest into it, and related userspace projects like C and C++ compilers, otherwise it would be another GNU Hurd.
woodruffw 22 hours ago [-]
Gentoo’s decision to support source builds seems eminently reasonable to me, and I don’t think we should reward it with condescension.
The bigger problem, to me, is that it’s not really clear why this is actually a problem for Gentoo. I am glad they perform user-facing source builds, however, because they see things that other distributors don’t.
Cyph0n 22 hours ago [-]
Or adopt the Nix approach of caching common binary artifacts in a content addressable store and rebuild from source only when needed.
alpaca128 18 hours ago [-]
Firefox built from source is sufficiently sped up that I can notice it starting up at least 1-2 seconds faster. Not that I use the distro for speed, but I'm not complaining about a faster browser.
If you insist on acting like a normal person, no one stops you from using something normal.
20 hours ago [-]
lostapathy 23 hours ago [-]
Gentoo made a lot of sense WAY back in a pre-docker world, where you had to run the whole world on the host OS. Being able to compile it all meant you could link it all together with whatever weird combination of optional libraries you wanted. Things like getting sendmail to auth over LDAP, that nobody packaged in the base distro, become possible. And with Gentoo's tooling, you could build a coherent distro to your own unique demands.
Now though? It's way easier to have a herd of unicorn docker containers running that each handle one weird thing in isolation.
weinzierl 22 hours ago [-]
The herd of docker containers would in practice share almost nothing apart from the kernel and waste a lot of RAM. Didn't matter when RAM was cheap, but nowadays...
BeetleB 22 hours ago [-]
Time to grow up and use Windows like a normal person. The bulk of professional work is done on Windows.
anthk 21 hours ago [-]
Less and less with the ongoing ads, taskbar issues, and RAM eaating bloatware.
By just adding
preempt=full
to most GNU/Linux distros to the grub kernel boot options (trivial even for Fedora Silverblue, just run
sudo rpm-ostree kargs --editor
) and append at the end of these boot flags you are seeing the mentioned string. Done, multimedia ready desktop for tons of tasks outperforming Windows 11.
(I am one of uv’s maintainers.)
The nice thing about Python packaging is that it’s standardized: if uv’s build backend doesn’t fit into the hole you want, then you can use any number of other backends that do an admirable job of conforming to the packaging standards.
With that said, I don’t understand why Gentoo needs to rebuild every single release of uv-build. It doesn’t change as much as uv itself, and it’s intentionally compatible across uv versions. Why not set a policy of only updating once weekly, or even less frequently, with exceptions for important breaking changes or bug fixes?
(For context: the only reason uv-build releases as often as it does is because it’s easier to keep its internals in lockstep with the rest of uv. But you can do a normal version bound in your Python build backend metadata and uv will happily use whatever version of uv-build is already present.)
But it isn't. Once upon a time, it was: you used distutils. But of course distutils had a lot of problems. Instead of adopting a single standardized solution for those problems, the Python developers punted and let third parties do it. So now we do not have a single standardized solution for building Python packages; we have a bunch of third party solutions, none of which is in the Python standard library.
Yes, all those third party solutions have to be PEP 517 compatible, but that's not standardization on a tool; it's just standardization on an interface between the backend and the frontend. Which is nice, but doesn't solve the problem under discussion here.
> if uv’s build backend doesn’t fit into the hole you want, then you can use any number of other backends that do an admirable job of conforming to the packaging standards.
As the project developer, sure. But as a Linux distro building your python package, Gentoo has to use the build backend you specify. It can't say, well, this particular package is just pure python, so really all we need is a minimal tool to build a pure python none-any wheel. It has to use the backend you specified.
> I don’t understand why Gentoo needs to rebuild every single release of uv-build.
Because if you don't pin a version of uv-build in your project, that means "use the latest version available". Gentoo can't second guess you--even if it were able to verify somehow that the new version of uv-build that just got released will end up producing an identical wheel for your project as the previous version, without actually using the new version of uv-build.
> you can do a normal version bound in your Python build backend metadata
Sure, but how many users of uv-build actually do that? Seems like the answer to that is "not enough to matter".
So every Gentoo user that has a Python project that uses uv-build ends up having to rebuild uv-build, and then every Python project they have that uses it, every time uv-build pushes an update.
Other distros don't necessarily have quite the same problem because, if they include packages of Python projects, they don't normally track the build backend as a dependency. So if uv-build pushes an update, the distro would push an updated package for uv-build, but they wouldn't look at every Python project they package to see if it used uv-build as a build backend and rebuild it if it did. It's the "rebuild from source every time" aspect of Gentoo that forces that connection.
my take on linux distros being annoyed by their own policies is that perhaps they should change the policy. in this case, perhaps they should pretend uv-build updates once a month or something.
for example, they seem to be fine doing a quick sed on pyproject.toml (https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-python/pa...) or patching stuff for compat (https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-python/as...)
This is what i mean when it seems typical for a distro to monkey around with packages and/or their build system. These were just the first two packages i clicked on in dev-python. maybe others are "pure upstream", but there's definitely the capability here to just... not have the problem?
Thing is, that apparently won't work. From [0], with some more discussion starting at [1]
> > I don’t understand why Gentoo needs to rebuild every single release of uv-build.
> Because if you don't pin a version of uv-build in your project, that means "use the latest version available". Gentoo can't second guess you--even if it were able to verify somehow that the new version of uv-build that just got released will end up producing an identical wheel for your project as the previous version, without actually using the new version of uv-build.
[0] <https://news.ycombinator.com/item?id=50077466>
[1] <https://news.ycombinator.com/item?id=50077553>
gentoo appears to support exactly 7 versions of uv-build, a list they update by hand: https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-python/uv...
git changelog of uv-build in the gentoo package manager: https://gitweb.gentoo.org/repo/gentoo.git/log/dev-python/uv-...
gentoo also wrap python packages in their own package manager, packages in this tree appear to come from their upstream version control system eg Github, not PyPI.
just because someone on hn said something, doesn't make it true.
So, would it be correct to decide that package with an unconstrained version gets built with 0.1.0? And when that fails to build, what's the distro packager to do? Bang on the package maintainer until they specify the real constraint? Yeah, good luck with that.
Doesn't it make way more sense to assume that "unconstrained uv-build version" means "they only tested this with the very latest version of uv-build" and proceed accordingly? This will fail sometimes, but I figure it'll fail far less often then assuming that you get to use 0.1.0 if no version is specified.
I'm being a little extreme with my example here, but only to illustrate the larger point I'm making. Breaking changes do happen, and without specified version constraints one has to assume that "very latest available" is the correct one.
(There are all kinds of legitimate reasons to use an unconstrained dependency, including locking it separately and also trying to help other downstream Linux distros with their own bespoke packaging problems.)
That's my understanding, yes.
I don't follow. This feels like Gentoo is mishandling build-tool dependencies.
Does Gentoo also recompile every C/C++ library in the dependency tree every time GCC pushes a minor version bump?
I would say it's doing what it believes is necessary for the Python ecosystem. The build backend is an explicit part of the specification of a Python project.
> Does Gentoo also recompile every C/C++ library in the dependency tree every time GCC pushes a minor version bump?
No, because C/C++ libraries don't have an explicit specification of the build tool to be used in their project, the way a Python project does.
Nothing in the Python spec forces Gentoo to invalidate the downstream package every time build-system dependencies update - that's a behaviour they've decided is correct on their own.
> C/C++ libraries don't have an explicit specification of the build tool to be used in their project
They don't have a standard way to specify such, but they have an implicit dependency on the installed compiler toolchain, and it would be just as valid to interpret "no way to specify a build-system dependency" as "always rebuild" when the build tool updates
I don't either. I used to run Gentoo for quite a few years in the past and build dependency updates would not trigger rebuilds of build-dependent packages.
Rebuilding the entire system with a new GCC was recommended by the documentation, but there was nothing in Portage forcing it. Neither would you rebuild the system if, e.g. make got an update.
At the end of the day, it’s hard for me to even pinpoint what is problematic for Gentoo here: I can understand that they need to support multiple build backends as a reality of Python packaging and that’s frustrating, but per below it seems extremely unlikely that they actually need to build every single patch version of uv. Nothing about uv’s defaults or the packaging template would require that, and users would have to go out of their way to configure their build backend in that way.
(And note: this is not unique to uv! You can grief anybody who does an sdist build by pinning to a random ancient version of setuptools or any other build backend, including other ones that use native code. This is why uv, like everybody else, encourages semver ranges for build backends.)
If every new patch version is still within the semver range specified in a project that uses uv-build, then yes, every Gentoo user will have to rebuild that new patch version of uv-build in order to rebuild that project. And since the build backend is a dependency of the project, pushing a new patch version will trigger a rebuild of the project.
Admittedly rustification like that is a problem not only for gentoo, I have commercially deployed systems where one of the most annoyings elements of updating is presence of rust in python deps...
(This is the default when you initialize a project with uv, so I think someone would need to go out of their way to configure their build backend to request a specific patch version of uv-build.)
This wouldn't necessarily solve Gentoo's problem. The only way to be sure to solve Gentoo's problem would be for every Python project that uses uv-build to specify one particular version. Then Gentoo could be sure that once that release of that project was built once, it would never change.
In other words, for a distro like Gentoo, the build backend is a dependency, and if it changes, that triggers a change in the build, even if the build backend change would not actually change the final wheel that got built.
It seems much easier to solve the problem of compatibility than the one of getting every open source maintainer to upgrade their build backend version (whether uv-build, or flit, or anything else) every Tuesday.
This doesn't make sense. Gentoo doesn't "pick" any build backend version. They build each Python project exactly the way the project owner tells them to, using whatever build backend is specified in pyproject.toml for that project. That's why it's such a burden for them (or more precisely their users, since each Gentoo user is having to do this) if build backend versions change so often and projects don't pin a specific version but just say "use the latest"--because then they have to use what the project owner says, and the project owner says, "Update to a new build backend every week because that's how often my chosen backend, uv-build, likes to push updates".
This isn’t what’s happening: uv defaults to semver bounds, so a maintainer would have to go out of their way to introduce a troublesome backend constraint.
And note: there is no “use the latest” constraint in Python packaging. If you leave the build backend version unconstrained, the build frontend is allowed to resolve any version it sees fit, including the version it already has.
(I also know from first-hand experience that Gentoo and other distributions do not build Python packages as-is; they patch them in all kinds of ways. But that’s neither here nor there.)
But a new patch release will be within the same semver bound, so it amounts to the same thing.
> If you leave the build backend version unconstrained, the build frontend is allowed to resolve any version it sees fit, including the version it already has.
What do build frontends actually do, though?
Sorry, can you lay out the actual problem you’re envisioning for me? If uv-build goes from 0.13.1 to 0.13.2, then anybody with a semver bound of `uv-build>=0.12,<0.14` doesn’t need to update anything. They can keep using whatever version of the build backend they already have that satisfies that bound.
The main thing that would be troublesome is if a user pins their build backend to a specific range or version, e.g. `uv-build==0.13.1`. Then, upon bumping it, everyone who has already built 0.13.1 will need to invalidate and rebuild their build backend. But that’s why that isn’t the default.
> What do build frontends actually do, though?
uv will definitely use a compatible version. It won’t even download a copy of that that compatible version by default, since the uv binary itself is typically compatible and can invoke the build backend directly.
I’m not sure what pip and others do, but I would expect they do the same. It’s the obvious way to implement backend resolution.
If a compatible version is already present, yes, a frontend can just use it if it's within the semver range specified.
But in many cases, builds are done in a fresh virtual environment that has nothing installed. In such a case, the only option is to download the latest version that's in the semver range specified. That's how the "build" frontend works, for example, unless you specify a flag to keep it from creating a fresh virtual environment.
(But also: if we’re talking virtual environments then we’re firmly in Python land, not distro land, where the correct answer is “use a wheel” instead of building it yourself.)
From what I can gather, Gentoo's Python build system does use a virtualenv [1]. Maybe that's not your definition of "distro land", but it appears to be Gentoo's.
It's not clear to me exactly what frontend build tool is used, whether it's one of the well known ones or something that the Gentoo developers coded themselves. However, if it's using a virtualenv, it's going to have to re-fetch the build backend and rebuild it.
[1] https://projects.gentoo.org/python/guide/basic.html
Which defeats the purpose of doing the build in a virtualenv, which is to avoid any possible collision with or contamination by other stuff that's installed on the system by using a fresh copy of everything.
This coordination problem is already solved by PyPI. That's where Gentoo looks to find the build backend--just like everyone else that builds packages. The project owner had to be able to find whatever version they used there or they couldn't even build their project locally. So they should be able to depend on the fact that anyone else trying to build their project can also find that same version at the same place.
> getting every open source maintainer to upgrade their build backend version (whether uv-build, or flit, or anything else) every Tuesday.
You're missing my point. If I know that my project builds properly with build backend X version Y, and I pin that version in my pyproject.toml, I don't care how many newer versions you want to release. Unless I make a change to my project that merits updating my build backend to a newer version, I'm going to simply leave my project alone. I already know it will build fine with the version I have. Why should I push an update every Tuesday just because you decided to release a new version of the build backend, which I don't need anyway?
As I see it, uv-build is Rust and will stay Rust, so SPARC or address-space-constrained 32-bit targets may never work right. Astral prioritizes its users who run on tier-1 targets, and the cost of their uv-init default lands on the downstream packages that Gentoo has to build. Gentoo wants projects to choose pure python backends to reduce that ecosystem load, Astral would prefer if more projects default to uv-build (IIRC the default went from hatchling to uv-build in mid-2025).
Long-tail & evolution of ecosystem would be a far more interesting discussion, but the broader community has a "we are the future/adapt to us" sentiment that forecloses trade-offs.
To that extent, I think uv (and CPython, and Rust, and so many other projects) are essentially trying to be honest in saying “we have no way to build and test that to our own standards.” I think that kind of honesty in validation is its own kind of load reduction on the ecosystem, because it means less tacit assumption that the maintainers will support anything that happens to build.
And a problem with Python packaging is that it's far too flexible.
For a pure Python package, IMO every single file in the wheel should be bit-for-bit identical to a file in the source tree (with the possible exception of a manifest listing the files). If this were actually a guarantee, even just for a category of package that opted in, then:
a) The build "tool" could be replaced with a build file selector, which would often be completely trivial and could have default behavior that worked for almost every pure python package right in pyproject.toml and
b) Instead of the giant mess of sigstore and attestation and weird trusted builds we have today, we would have a straightforward proof that a wheel actually matched a git commit irrespective of who built it. In fact, the proof could be embedded in the wheel! And the proof could be verified without executing any package-controlled code.
As far as I know, packages that use or could use uv-build or flit-core are in the just-copy-files category.
Has anybody done the analysis to determine if this is something that can, in practice, be relied on?
(I think so much of the confusion around Python packaging comes down the layer of abstraction/standardization not being the one that users intuitively expect. This is unfortunate and is made worse by lackluster user-facing documentation. But there are standards that guarantee interoperability, and they’re pretty close to Pareto-optimal in terms of making all involved parties happy.)
Right, but what I'm asking is: by and large, can you expect any random package on pypi to conform to the standard?
Happy user for over 23 years now!
Here are three links that you will find informative. [0][1][2]
While I'm not using the official Gentoo binhost, I've had one running on my LAN for my own personal use for roughly a decade now. It has been possible to set up a binhost for quite a bit longer than that... that's just when I got multiple machines with the same CPU in them, so it made sense for me to set one up.
[0] <https://wiki.gentoo.org/wiki/Binary_package_guide>
[1] <https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Bas...>
[2] <https://wiki.gentoo.org/wiki/Gentoo_Binary_Host_Quickstart>
I'm not a Gentoo user BTW but I do think building from source is attractive for the same reasons cargo (Isn't that build from source mostly?) and go do it.
(It’s not kind or charitable to call someone a liar.)
Especially when C extensions are involved, everything is entirely unportable. Of course, yet again crabbone is downvoted for speaking the truth.
This is bad for obvious reasons. But it’s not the same thing as Python packaging not being standardized; I would say that Python packaging is as standardized as its user base is willing to stomach. That willingness has grown over the years, to the immense credit of a large group of users who otherwise don’t agree on much.
Packaging, in this context, means a unified interface that describes to the tool what needs to happen to the source code in order for it to be transformed into a binary package. There are about a dozen tools that can package Python binary modules, setuptools, SWIG, bind11 and so on. Each does it in a completely different way. In practice, if you want to build the packages now available on PyPI, you will not be able to come up with a single tool that can build every one of them, probably, not even half of them.
All this talk about standardized metadata is worthless because of what actually goes into the package. The metadata is the least of your problems when packaging Python code.
This is the entire point of build backends, and is no longer true/hasn’t been true for several years. Build backends are not perfect, but they are the reason you can run `uv add` or `pip install` and get a functional wheel from an sdist on PyPI regardless of whether the sdist contains Python, C++, Rust, or anything else.
(This is now the second time you’ve imputed dishonesty in a conversation where I’ve tried to be helpful. So this will be my last response.)
> This is the entire point of build backends
This is false. Python doesn't have any format, any way of describing how to compile a package. There's a gaping void where such a specification should be. Every tool that does it, has its own bespoke way of configuring it. Most of them don't even care what PyPA has to say about it.
> is no longer true/hasn’t been true for several years.
This has been true as recently as this morning. Nothing has changed in the last twenty years, probably more. No change is planned. The people who put themselves in charge of the process are incompetent to the point that, just like you, they don't understand the assignment and produce piles of worthless garbage instead.
> Build backends are not perfect
Build backends is a nonsense invented by PyPA because they didn't understand what actually needs to be done. The whole concept is worthless. It doesn't address the issue: it doesn't have a generic method describing how to build a Python package. Python doesn't need build backends. This whole circus needs to go.
> you can run `uv add` or `pip install` and get a functional wheel
This has nothing to do with building packages. Ideally, these are supposed to install the already built packages. If, however, you accidentally veered into the "oh, crap, I have to build it now because for my platform there isn't a binary", then pip or uv will poop their pants about 50% of the time because the tool that is needed to build the package is not installed, or the dependencies are missing, or the wrong version of the tool is installed, or it's misconfigured etc.
Worse yet, they shouldn't build anything. This is a batshit idiotic idea that a package installer, by default, tries to build a package if a binary is missing. But, we live in the world populated by people without a drop of critical thinking, governed by worshiping tradition, and that's why these tools do what they do.
It wasn't for what was said, but for how it was said, which is why you can say all sorts of heinous stuff on here as long as you're couth about it.
Nobody cares if package metadata is standardized. The tools aren't. The tools are the problem, not the package format.
Well, if the poster says something that is blatantly untrue, how would you call them? Liar describes exactly someone who intentionally tells something that isn't true.
https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-python/uv...
Looks like it's being built with fat LTO by default (and gentoo patched to thin LTO). Which is fine if you want to spend CI cycles once to ship executables to thousands of users. If you compile from source and run the tool maybe once then they should consider going further and run with maybe opt-level=1, lto=off; halfway between release and debug. This is how rustc itself builds some internal buildtools that get recompiled frequently relative to how often they run.
If only there were ways to skip this waste...
> The other reason is performance and that argument makes even less sense. Even if it mattered, we’re realistically talking about a difference in the ballpark of 100 ms, for an action executed rarely; it is equally possible that any gain will be outweighed by the time needed to fetch the 1.5 MiB wheel for uv-build.
Modern CI architectures are building Docker stacks from scratch and using a readthrough cache of wheels. Downloading may still be the dominant factor, but the second-dominant factor does start to add up, especially when the downloading gets cached at various layers.
btw, I know of a guy who using extensive amounts of tokens to make his fork of mrustc usable via "claude, make this rustc compile 99% of crates.io", I think this also can yield some results.
If you use low code platforms like Workato and Boomi, it is already doing coding with prompts, 3GL languages don't play any role in those platforms.
(At the end of the day, this is exactly what support tiers are for. CPython, at least to my eyes, has been very transparent about not guaranteeing support for every platform that has a C compiler.)
People who don't care about HPUX will never care about it but they would if e.g. we decided that only windows and Ubuntu were supported ... except for the windows and ubuntu python users who wouldn't care.
It's I'm-all-right Jack until it's your use case that gets bulleted.
It's on Itanium so obviously we have to move away from that to Linux but the existence of open source tools like coreutils gives us time.
No such luck with python. We have to postpone some changes as a result.
As I say, there's some kind of effect where changes that are only negative on the margins are cheered until one finds oneself on one of those margins.
(But with all that said: there’s no ideological dispute here. If there was a reliable way to build and test for HP-UX, I assume a lot more people would declare support for it. The problem comes down to maintainers being asked to support platforms they ultimately have no ability to support, except in the weakest sense of “it compiles.”)
I've done this many times on things like AIX 4.3 and HP-UX and so on. Sometimes you can get through the compile without any problems at all and the tool often works enough for your usecase and that's a win.
Sometimes there are particular little problems, sometimes it's something serious like an actual missing C library call or whatever and then you have to do some work. With nicely designed tools that have fairly wide support to begin with this tends to be easier.
(I mean: trust or distrust seems potentially reasonable, but I don’t see what the binaries have to do with it.)
> In the early days, there was much promotion of Gentoo as being “faster”, because you could compile everything based on your particular processor, etc. And you could increase the optimization level for a boost. Their web site still touts this as a reason to use Gentoo.
> In reality, the performance is more or less the same as on any other distribution. The folks who stick to Gentoo tend not to care about performance as much. Unfortunately, this perception of Gentoo remains, and I wish they would remove the verbiage from their site.
It is now but in the 32-bit days there was a nontrivial boost form compiling for e.g. a Pentium 4 when most binary distros were still stuck targetting generic i586 or something old like that.
I'm still on Gentoo 22 years later.
Good timing! If memory serves, you missed the Big Libpng Upgrade that either got the concept of Package Slots into Portage or convinced everyone that they were a _really_ good feature to have and use where appropriate.
Based on what I can see after putting a minute or two into searching, that verbiage being referred to only appears on the About page. [0]
The distro's home page says
and has used those words since at least January 2023 [1]. Its home page has spoken about flexibility and has not spoken about performance since the big redesign in April 2016... seven years prior to the publication of that guy's blog post. [2][3]And -speaking as a Gentoo user since 2002- neither the user community nor the maintainer community hold the opinion that Ultimate Maxxximum Performance is the distro's goal. Trouble reports that come from "ricers" pretty much always get told "Set your compiler flags to something sane (try '-O2 -pipe' or '-O2 -pipe -march=native') and rebuild. If you can still repro the problem, file a new report because this one is getting closed INVALID.".
And -while the old Gentoo Wiki burned down so I can't prove it- [4] the advice about GCC optimization in the wiki has always cautioned against using aggressive compiler flags and warned that doing so will -among other things- not substantially improve performance. The advice about reasonable compiler flags has pretty consistently been "Use -O2, -pipe, -march=$THE_CORRECT_SETTING_FOR_YOUR_CPU, and maybe -fomit-frame-pointer"... though the "-fomit-frame-pointer" advice has always come with a warning that doing that may make debugging either extremely difficult or impossible, and the "-march" advice the warning that this may make it impossible to run those binaries on another computer.
Anyway. There's only so much you can do to erase an -allegedly- pervasive myth. The fact that some folks have the belief that Gentoo Linux is all about Maxxximum Performance doesn't change the fact that nearly all of the people who use it and -almost certainly- all of the people who maintain it strongly disagree with that claim. The distro is and always has been about flexibility, user choice, and having fun. And it's a nice bonus if building for -say- -march=athlon-xp instead of -march=i586 happens to get you a bit of extra performance here and there.
[0] <https://www.gentoo.org/get-started/about/>
[1] <https://web.archive.org/web/20230101024843/https://www.gento...>
[2] <https://web.archive.org/web/20150406115846/https://www.gento...>
[3] That year's April 1 redesign was a bit cool, IMO.
[4] The oldest copy that I can easily find is from mid 2013 [5], so you'll just have to trust me that this has been the long-standing opinion of the overwhelming majority of users and maintainers. While you're there, take a minute or two to skim the prose and notice how it consistently warns against using aggressive compiler flags.
[5] <https://web.archive.org/web/20130829083155/https://wiki.gent...>
> Extreme configurability, performance, and a top-notch user and developer community are all hallmarks of the Gentoo experience.
It's the performance part I was referring to.
Going back to when I started using it:
> Gentoo Linux is a high-performance ports-based Linux metadistribution
Regarding -O2 vs -O3, in the early days, -O3 was considered quite safe (I don't recall if it was recommended, but it wasn't discouraged). I think only after a certain GCC upgrade did they start discouraging -O3. I vaguely recall them announcing that quite a few of the -O3 benefits were now part of -O2, and that some (new?) -O3 stuff was unstable.
At the time, I knew little about compiler flags. I went with -O3 because of guidance from the Gentoo folks.
Yep, when I started using it in _2002_ that was on the home page. Ten years ago, it stopped being on the home page because folks finally got the motivation to do a bunch of work to it. As I said:
> Regarding -O2 vs -O3, in the early days, -O3 was considered quite safe (I don't recall if it was recommended, but it wasn't discouraged). ... I went with -O3 because of guidance from the Gentoo folks.It has been too long for me to remember what -O level my first Gentoo box ended up using (and I can't be bothered to pull it out of the closet and power it on to see), but the box I installed in ~2007 is using -O2. A random sampling of the few Gentoo forum posts from the early days that are in the Wayback Machine [0], as well as a handful of Bugzilla reports from the 2002->2005 era _suggests_ that most folks in the early days were using -O2. I'm certain that I played with all of the optimization levels on my first box, didn't notice any performance difference, and then settled on one that I can no longer remember.
And like, you say that -O3 wasn't discouraged. Well, -O3 isn't really discouraged today. The advice about -O3 gives you a summary of the facts and trusts you to make the choice that's right for you [1][2]
(I'm pretty sure that "unless running test suites" thing means "you shouldn't use this optimization level unless you're also using FEATURES="test" to run the package's tests".)FWIW, it's my maybe-incorrect understanding that many (most? all?) packages that are known-broken with specific flags get those flags filtered out and replaced with known-good ones... unless they're nutball "ricer" flags, in which case the user gets told "Don't do that!".
[0] <https://web.archive.org/web/20020922020122/https://forums.ge...>
[1] <https://wiki.gentoo.org/wiki/GCC_optimization#-O>
[2] Even the advice from a decade ago [3] is substantially similar: «This makes compilation take longer, and it not only might not make things faster, it may make things slower and is known to break things sometimes.»
[3] <https://wiki.gentoo.org/index.php?title=GCC_optimization&old...>
Linux wouldn't exist if people submitted to that argument.
There's not much of an argument for adopting obscure niche practices for their own sake
building from source has uses which you believe are worthless and other people don't think are worthless.
Anyone who uses cargo or installs a module for golang is building from source. But that, probably, is considered useful. It's only people who build C code from source who are niche and wierd. ....
The Ubuntu users are only there because after they had told the rest of us how silly we were for using Linux they eventually had to use it themselves for work.
Now we're going to listen to that sort of stuff again without rolling our eyes? ....
I started using linux in 1994 with slackware. Nowadays I use ubuntu, I've spent too many hours of my life tweaking my linux installs.
Nevertheless I remember lots of my friends who started off saying Linux was hopeless and ended up using it and Ubuntu was their gateway. The Linux world now is full of people who are fairly conformist and don't care about how it all began and who don't value the idea that open source has margins from which who knows what world beating things might eventually come. The fact that margins can exist is what makes open source great.
The bigger problem, to me, is that it’s not really clear why this is actually a problem for Gentoo. I am glad they perform user-facing source builds, however, because they see things that other distributors don’t.
If you insist on acting like a normal person, no one stops you from using something normal.
Now though? It's way easier to have a herd of unicorn docker containers running that each handle one weird thing in isolation.
By just adding
to most GNU/Linux distros to the grub kernel boot options (trivial even for Fedora Silverblue, just run ) and append at the end of these boot flags you are seeing the mentioned string. Done, multimedia ready desktop for tons of tasks outperforming Windows 11.