Design Philosophies of Developer Tools
stuartsierra.com
stuartsierra.com
I suspect the fact that git exhibits a deep comprehension of that history is one reason git pretty much took over the mindshare for DVCS in record time. Where it took years for Subversion to oust CVS, and numerous DVCS systems had been plodding along for years, git was the obvious leader seemingly overnight.
So many projects have vastly over-engineered interfaces and component architecture and such, with a huge variety of interdependencies, often proudly, as though it is a benefit.
Comparing that against the general madness of the Ruby ecosystem seems unfair. Why not compare the state of unix utilities as a whole, which also have their incompatibilities? Granted, Unix and POSIX in particular are far and away beyond the kind of standardization that exists in the Ruby world, and of course that leads to stable (yet powerful) interfaces that strongly benefit the ecosystem as a whole, but look at the time and resources it took to get to that point. Expecting that somehow the developers on a new programming language could wade through the lessons in Unix history and somehow spring forth a perfect Ruby dependency solution that was nothing but an improvement over the past is a bit unrealistic.
It's super nice having the dependencies specified by semvers in a package.json and installed locally in a project node_modules directory so that libraries can't step on each others toes.
The "Don’t use Bundler version X with RVM version Y" can be specified directly in the package.json and concurrent versions of module dependencies even work without incident in the same project.
[1] http://anonscm.debian.org/gitweb/?p=bash-completion/bash-com...
[2] http://david.rothlis.net/tools/case_studies/#bash_completion
NPM is basically encapsulated into one command (npm), and there are no ways for modules to modify the way Node itself works, without the permission of other modules, plus NPM automatically resolves dependencies and ensures that things Just Work.