Language-specific package managers are a sign that the cancer that is "webdev" has reached stage 4. (As if Electron was not proof enough).
Imagine the needs of a package manager for Language A and Language B are mutually exclusive. How do you reconcile this?
What language specific needs are there?
Suppose I wanted to install a program that is written in C++, which uses a library written in C (currently being re-written in Rust, naturally), uses Python as a scripting language, and comes with a few scripts which make use of some Python modules which themselves are wrappers around C libraries. How would you propose that this be done? The system package manager does not (and should not) care which language each package uses and if I were forced to use language-specific package managers then this would be rather inconvenient to say the least.
Should the developers of every language write the code to bring pacman, apt, brew, winget, etc. all up to first-class standards for their language?
Just as the package manager should not care about the language, the language should not care about the package manager (or the build system, for that matter). It is the job of the packager (which may, or may not, be the software developer) to package the software, the only thing that the language needs to do is simply not be hostile to external tools.
This is a faulty assumption. Even if we assume that their is one package manager, and different operating systems to not make opinionated judgements with their package managers, there are many subjective judgements made by even a single package manager.
"signed archives": Signed with what? Sha256? Blake? Archived in what way? ZIP? Tar? Why should every package for every language be forced to use the same pipeline?
"standardized locations": Lol. They do not do this.
Why should I care about the opinions of a package manager on a system that I don't use? The software should not be aware of, never mind rely on, package manager specific details either. A general purpose, system level, package manager should be able to deal with these differences and the actual work falls to external libraries anyway, not the package manager itself. There is a reason that environment variables (e.g.
$PATH
/
%PATH%
) are a thing. The software/package manager does not need to know, or care, where things are actually installed, as long as the environment is set up correctly.
Installing multiple versions of the same package at once, as example. Pacman cannot do this.
Then why do I have 4 version of Electron installed? Along with GTK 2, 3, and 4? And Qt 5 and 6?
(well, technically, they are different packages, but the end result is the same)
Consider also versioning: one language may want semantic versioning, another may just want a single number, another may want something else.
The package manager should be able to handle this.
For example, semver, a single number, and something else. (the "-n" is the version of the package itself, not the software):
pacman 7.0.0.r6.gc685ae6-2
pacman-contrib 1.11.0-1
pacman-mirrorlist 20250101-1
The choice of version number "style" is not simply due to language (why should the language even dictate such things?), each serves its own purpose.
It is ridiculous to claim there is a good "one size fits all" solution to managing packages for every single programming language ever.
[...]
If you want to rely on third-party (OS) package managers, you MUST trust that they will all behave the exact same, or write explicit handling for every one.
See above, re: the separation of package manager and software. All the package manager needs is a name/id, a version number/code which can be sorted, and a dependency list. Name a language for which this is not possible or sufficient.
I don't think Windows even has a standard package manager shipped by default. MacOS doesn't either, I think.
Neither does Linux, if you want to be pedantic.
The "culture", and the way things work in general, is just different on each platform. I think something like the Rust system (or Python's pip) may be good for Windows, but it's not how things are done on Linux. You either work with the system package manager (and C), or you go home. (Python understood this; Rust needs to take notes.)
12 women can't create a baby in 1 month.
Twelve?