This guy doesn't seem to understand the real differences between java/clojure packaging, and scripting language packaging.<p>Ruby's "gems" are <i>source</i> packages. When a gem is installed, arbitrary code is executed, C stubs (or even C <i>libraries</i>!) are compiled, and the resulting artifacts can be very different on different systems. Some Ruby gems even modify the Ruby code at install-time. The same is true for Perl (CPAN) and Python (setuptools, pip, etc)<p>Java and Clojure packages are <i>artifacts.</i> Each jar is a finished, built product. If it has JNI stubs, those stubs were pre-built against a specific version. The artifact is identical on every installed system. No arbitrary code is executed. Reasoning about the contents of a Clojure package does not require me to solve the halting problem.<p>The artifact approach is unambiguously better for any production deployment. The source-based approach found in Ruby, Perl, and Python is a problem for me more often than a solution. It is hypothetically great that I can use the same "gem" on OSX and Linux, but it is more important to me that I get consistent deployments on two different Linux systems.