Currently Fedora ships a Clojure RPM, but does not ship tooling packages (e.g. the Leiningen build tool) or any of the commonly-used libraries (e.g. the Noir web framework, Korma SQL abstraction layer). We aim to rectify this situation and make Fedora a useful developer platform for Clojure out of the box.
- Name: Michel Alexandre Salim
- Email: email@example.com
- Targeted release: Fedora 18
- Last updated: 2012-06-07
- Percentage of completion: 05%
Clojure projects are generally managed and built using a tool called Leiningen, which uses the same repository layout as Maven (and comes with a build target for converting Leiningen project descriptors to Maven POM files).
We would first package Leiningen -- first ensuring its dependencies are packaged, and catch packaging errors in the Clojure package that is exposed by attempting to use it for building Leiningen. Next, we need to make sure that Leiningen is configured out-of-the-box so it can use the system Maven repository. Then it is a matter of packaging as many of the key Clojure libraries and frameworks as we can fit into the schedule, though Korma and Noir are key priorities.
Benefit to Fedora
Clojure is a Lisp programming language for the Java platform, and is one of the most popular alternative languages on the JVM. Its development process is remarkably Unix-friendly - the editor of choice is Emacs, many of the developers use Macs or Linux distributions, and the packaging quality is remarkably high w.r.t. not bundling libraries and using sane build management tools.
We currently only ship the core Clojure language itself, without the build tool (Leiningen) or any of the libraries; as it is, our distribution is not really suitable for Clojure development, beyond serving as a platform on which to bootstrap everything from Maven/Leiningen repositories. The Clojure package is also suffering from neglect - packaging mistakes do not get caught because no other package uses it as a dependency.
Changes are isolated and should not affect other parts of the distribution. Here is our current work plan:
- Fix Clojure packaging to comply with our guidelines
- Package Leiningen dependencies
- Package Leiningen
- Ensure Leiningen is configured to use the system Maven repository
- Ensure that the default Leiningen project templates refer to the packaged versions of Clojure libraries
- Package Clojure frameworks
- Create a packaging guideline for Clojure packages
How To Test
Install Leiningen using yum. Then use it to create a new project, adding dependencies that are already packaged in Fedora at the time, as well as other dependencies. Install the dependencies we already package using yum, and then run ``lein deps``, and check that Leiningen does not re-download the dependencies already installed using RPM.
Using our Leiningen RPM instead of the one from upstream, the only noticeable difference should be that Leiningen would get more of its dependencies from the system Maven repository, resulting in less network access and thus a faster response. If the system is used by multiple developers, there is also a space saving as each developer wouldn't have duplicate copies of the same JAR packages in their personal Maven repositories.
Clojure is not currently being used in any part of the infrastructure, and thus there is no necessary contingency plan - even an incomplete feature would be an improvement over the baseline we currently have.
- Fedora 18 now ships a more complete Clojure programming stack, including the build tool Leiningen and key frameworks necessary for web application development. Developers can now use Clojure out-of-the-box without pulling dependencies from Internet repositories, saving both network bandwith, time and disk space.