Hi, I've always like the Gentoo approach most. Have a qualified package name like
dev-java/ant and if you try to install "ant" and it's unique: good. If you try to install "ant" and there are multiple ones: you get a disambiguation error. If you try to install "dev-java/ant" there's no ambiguity. I'm aware that it's not implemented that way in "guix package" right now, however it would be easy to use the Guile module system for that end. Things like this are always easy to add later as long nobody make the package name "java-ant" which would make the qualified name dev-java/java-ant which isn't so nice. That said, Guix is not Gentoo. Directory hierarchies have never had a problem doing such categorization. Special-casing "xx-xxx" to be a poor man's directory feels... wrong. That said, many package managers do it the "xx-xxx" way (and many don't). Compare the input dependencies of a package (define java-maven (package (inputs '(("java-jvm" ,java-jvm) ("java-xyz" ,java-xzy) ("java-abc" ,java-abc))))) Very redundant, no? This kind of disambiguation is exactly what the module system can do best - and Guile's module system even allows you to add a prefix to all names when importing a module, so you can have the best of both choices.