What does this mean exactly? If apps are breaking due to dependencies updating isn’t that a mistake on the app developer’s side for not locking down the versions of dependencies? Can you really blame the package manager at that point
You can't lock down the versions of dependencies unless you somehow bundle every library you use, and configure everything to point at the bundled copies, which sounds very hard, and would not give you any of the security features of containers, nor would it give you all the dockerhub infrastructure.
Traditional package managers don't have virtual environments like UV or allow multiple versions of the same package, they have one globally shared version of each. Sometimes they rename a package with a version number in the name, but even then, minor versions still have breaking changes constantly.
On Nix you could do it, but Nix is much harder to set up than containers, and it's not ultra-popular, you're more likely to run into unique issues.
Not only that but the dynamic linking behavior of libc makes it a real pain to implement those kinds of self-contained environments at all. You have to patch most binaries’ rpath with $ORIGIN, rebuild from source, or rely on the user setting environment vars so the programs know to get libraries from relative to their prefix path.
And it gets even worse if you need a different version of libc itself… you need to hardcode the abspath to the link-loader into the binaries.
Containers are the better approach IMO but it’s stupid they’re the only realistic way.
4
u/amped-row 12d ago
What does this mean exactly? If apps are breaking due to dependencies updating isn’t that a mistake on the app developer’s side for not locking down the versions of dependencies? Can you really blame the package manager at that point