In the JVM world, maven for Java and sbt for Scala have been used to build pretty large projects. Obviously, they run into the multi-version-dependency problem too, and they can handle it without "partial code upgrades" (not the smartest name IMHO). They use shading, which roughly means re-introducing the same dependency under a new name. We can already do something similar with nimble now in a clunky, manual way: clone an old version of a package locally, give it a new name and import using this name where necessary. This is horrible, because the import statements in the source files have to be touched, but it should work.
I don't see dependency hell upon us yet, but the fact that Nim is strong on metaprogramming and tries to keep the language core lean means that a lot of functionality will end up in packages. So nimble maybe should brace itself for trouble, especially if Nims popularity takes off eventually.
