Daniel Compton hosted me on his Clojure podcast, The REPL, where I talked about Debian, packaging Leiningen, and the Clojure ecosystem in Debian. It's got everything: spooky abandoned packages, anarchist collectives, software security policies, and Debian release cycles. Absolutely no shade was thrown at other distros.
Give it a listen:
Download: MP3
More Q&A
After the podcast was published, Ivan Sagalaev wrote me with a great question about how the different versions of Clojure in Ubuntu 18.04 work:
First of all, THANK YOU for making
sudo apt install leiningen
work! It's so much better and more consistent than sourcing bash scripts :-)I have a quick question for you. After installing
leiningen
andclojure
on Ubuntu 18.04 I see thatlein repl
starts with clojure 1.8.0, while the clojure package itself seems to be independent and is version 1.9.0. How is it possible? I frankly haven't even seenlein
downloading its own clojure.jar...
I replied:
Leiningen is "ahead-of-time (AOT) compiled", which is a fancy way of saying that the Leiningen you download from Ubuntu is pre-built. This means it is already compiled to Java bytecode, which can be run directly by Java. I ship the binary Leiningen package as an "uberjar", which means all its dependencies are also included inside the Leiningen jar.
Leiningen depends on and is built with Clojure 1.8, so the Leiningen uberjar in Debian also depends on Clojure 1.8. The "clojure" package in 18.04 defaults to installing Clojure 1.9, but that can be installed simultaneously with the "clojure1.8" package that Leiningen depends on in order to build. You can change your default Clojure to 1.8 using alternatives.
When you launch
lein repl
, by default the Clojure 1.8 runtime that's compiled in is used. If you runlein repl
in the root of a Clojure 1.9 project, Leiningen will download Clojure 1.9 from Clojars and launch a 1.9 repl. If you want to use the Clojure 1.9 shipped with Debian, you can change:local-repo
to point at/usr/share/maven-repo
, but be careful to also set:offline?
totrue
so you don't try to install things into the system maven repo by accident.