Sadly I’m not a fan of the cousier proposal… My three things are:
1. In general, it’s better to have fewer versions of things, so we should be aiming as a community to move in that direction, rather than giving up and saying “have as many versions as you like, we’ll make it easy!” - shading should be a last resort, not a default go-to. I really dislike that Rust went in the opposite direction here, but at least in Rust the linker can make most of that go away; in the JVM world, once something’s shaded, it’s there. (Maybe some of the java9 AOT stuff helps here? But the reflection capabilities make it hard)
2. A lot of things in the JVM world don’t play nicely with shading. Static initialisers, singletons, registries, reflection, … - so shading by default is scary.
3. The maven ecosystem has not bought into semver, or version ranges - a lot of version matching that ivy/coursier do is super sketchy, so merging “should be compatible” things is hard to safely do