So you want to write a package manager
So many useful tools are packaged in language-specific package management schemes, and they are a pain to deal with in conjunction with a system package manager. I&#x27;m speaking of nice command-line applications that work like Unix utilities, that simply parse STDIN and write to STDOUT, but for some reason I have to install PyPI&#x2F;NPM&#x2F;gem&#x2F;whatever to install them, and figure out what language-specific idiosyncrasies I have to massage to get them to work (venv, rvm, and whatnot).<p>Like the author, I want language implementers to split the packaging realm: anything that&#x27;s a pure source dependency can and should be packaged with language-specific tools, but anything that runs on the system <i>should</i> be distributed in some sort of universally executable format, such as a launcher shell script with an application directory in &#x2F;usr&#x2F;bin.<p>Otherwise you&#x27;re in this current mess where anyone writing a system package manager has to deal with language runtimes and fight with the language-specific package manager to handle distribution&#x2F;installation&#x2F;removal&#x2F;rollback&#x2F;versioning in a coherent way with the rest of their platform. Moreover, the user has to make the decision between installing a package from their system vendor or from the language-specific repository.<p>So I guess what I&#x27;m advocating for is for the &quot;language package manager (LPM)&quot; concept to go away. If you need to distribute source dependencies, that should be handled on a per-project and not per-language-environment or per-system basis. If you need runtime dependencies, distribute them as a tarball in a standard directory format and let system vendors package them like the rest of the software they manage.<p>The JVM world has good things going with Maven and Gradle. I never have to use some Java command-line package manager to install a global dependency; rather, I&#x27;m declaring what my project needs and letting the build tools handle the rest. I never have to deal with conflicting dependency versions between projects or language versions. And binary Java applications are easily available via my system&#x27;s package manager. There is just no need for the middle layer.