For example, I don't particularly like Python as a language, but I will use it because it has 677,633 packages in PyPI.
For example, I don't particularly like Python as a language, but I will use it because it has 677,633 packages in PyPI.
I think he would say either copy the code you want into your own project, or clone down the repo and control the code yourself.
He hae interviews on Primeagens channel and Developer Voices where he talks about it.
The short version is: projects should vendor their deps and manually resolve package versions. I don't think he states his argument very clearly. But I do think he's basically correct.
Vendor your damn deps!
I have no idea what using the noun vendor as a verb means. I'm guessing deps is dependencies.
> To bundle third-party dependencies with the source code for one's own program.
I hate to say this, but vendor is an extremely common term for this operation. Rust’s cargo has a “vendor” sub command built in.
You’re far from alone in not being familiar with the term. Which is a great travesty because it really should be considered best practice and default behavior!
And it doesn't in any way describe the activity of bundling open source libraries that are not even supplied from vendors for the most part! So a poor neologism, in my opinion.
Look at Rust and NPM... Insane amounts of dependencies for almost every library.
C and C++ famously don't have package managers, well, at least not blessed ones (although you could argue Linux/Unix is a C package manager).
The idea is to be more informed about the dependencies you're bringing in, to encourage libraries to be more standalone things, and just not to automate dependency hell.
On the plus side, the Odin compiler makes it very, very easy to compile your program with dependencies.
Hell, even in my Ruby journey I've realised that 99% of what's on Rubygems is absolute trash. I basically use Rails, Faraday, RubyLLM, and not much else.
> although you could argue Linux/Unix [package managers] [are] C package manager[s]
Exactly. It's just that they don't have the bug, that they only work with programs written in a single language.
Is this really the case? I just came back to Ruby and Rails recently. Haven’t explored that much yet beyond established major gems
Btw, still worth it because Ruby is an amazing language and Rails is great. Just can't blindly trust other people's code.
Chances are 677,634 of those will be broken next week though :-P
The problem with package managers is that they encourage piling on dependencies and creating deep (and thus fragile and often hard to reason about) dependency trees.
I loathe having to install anything more complicated than simple scripts[0] based on Python because unless the developer constantly chases after all their dependencies to keep them in working order, i'll be the one who will have to do that when something inevitably breaks (assuming it wasn't already broken the time i decided to try it - which is sadly something i encountered more than a few times). And once the developer moves on, the bitrot spreads alarmingly fast.
[0] and even that isn't reliable if the scripts rely on more than whatever comes preinstalled with Python
Sure, you can choose to write everything yourself, but you are limiting the size, scope, and complexity of the problems that you can solve. We have to stand upon the shoulders of others to get stuff done.
instead of the user having to resolve conflicts or manage the dependencies
Yet any language has to reinvent the wheel and write yet another archive downloader.
No, I don't think they need to do that. They want to do that instead of using the already existing OS packager, breaking and messing up things left and right.
Take for example the ridiculous state in the python ecosystem. It would be entirely eliminated by using the existing tools of make altinstall, the system-package manager and properly using Site files. I don't know when altinstall was introduced, but in this issue from 2013 it is already mentioned: https://bugs.python.org/issue19553 .
The OS package managers already go out of their way (e.g. Debian) and renamed site-packages to dist-packages, so that OS installed and other vendored python packages don't conflict. The Python maintainers provide make altinstall and the python program provides site files. Linux distros have /usr/ vs. /usr/local to avoid programs conflicting with the OS versions. So many problems could never occur by people using their tools correctly instead of adding layers on top, which causes other breakage and is "fixed" by even more layers on top.
Quality over quantity, please