I have already had to deal with python code that do little to no dependency documentation, that just carpet bomb my system with stuff pulled from the net at the install stage.
I have already had to deal with python code that do little to no dependency documentation, that just carpet bomb my system with stuff pulled from the net at the install stage.
I wonder where have you lived? I rarely found (if ever) an undocumented dependency list for any serious Python project in the last couple of years.
Really, significantly easier to not screw up in a large org than bundler, because dependencies don't leak by default.
What you mean by no reproducible builds?
there's the Pipfile initiative which gives me much hope, though :)
What is the alternative? Every major Linux distro has its own repository, as do all the BSDs. The picture on Windows and macOS is even more convoluted. Are developers in all these languages supposed to support the packaging of their software in half a dozen different repositories?
Maybe all programmers should get together and build "one repository to rule them all"? I have no idea how we herd that many cats!
At a minimum, Linux should have a common packaging system; though there may never be agreement. It's hard to see macOS and windows endingnup with a common one.
But maybe we could do a third party option that is independent of each OS? Those rarely work out well though.
As an example, IBM just released yesterday a new mainframe model.
z/OS is a totally different animal compared with POSIX based OSes or Windows, starting by the file system, catalog based.
Meanwhile, cargo works flawlessly on every system I've tried (Linux, Mac and Windows). Sure, it only compiles Rust programs, but there's no way that I'd advocate moving those programs to a package manager with as little regard for such a large part of its potential userbase.
Or that they just don't have enough manpower to actually support all the platforms.
For a system utility, you can still use virtualenvs. The launcher script just needs to use a shebang like:
#!/usr/share/spiffyapp/venv/bin/pythonPart of me feels like a better solution is to maintain older branches to give distributions opportunity to catch up.
This single sentences hints at least major two reasons for language-specific package managers:
- non-Linux platforms
- there's many different Linux package managers (apt, rpm, pacman, nix, portage, ...)
A language-specific package manager means developers (i.e. the ones writing the packages) only have do to packaging work once, instead of for every platform they might want to support, including ones that they have no way to test on (and a lot of code, especially in the modern wave of languages like Rust, often works on all platforms with no particular effort from the developer).
From an asymptotic perspective, using the platform package managers results in something like O(# libraries * # platforms) work and likely a lot of code not being packaged for some platforms, whereas language-specific package managers is something closer to O(# languages + # libraries) work (or maybe O(# languages * # platforms + # libraries). Looking at this decision purely in terms of developer effort, the latter seems like the better choice.
(There's also things like fpm that are designed to be more like O(# platforms + # libraries) work, which is nicer than either of the above!)
Far too many times have I had to explain to newcomers to Common Lisp that they can't install stuff from the repositories, and instead have to download their CL implementation separately and then use Quicklisp.