Julia is an open source, high-level, general-purpose, dynamic programming language designed for numerical analysis and computational science, launched in 2012. It solves the “two language” problem: developers can use Julia for both computational and interactive work, instead of needing to work with two different languages which can often slow down development times. Use cases include machine learning and other branches of artificial intelligence. Julia’s Jeff Bezanson was at the 2019 Snapcraft Summit in Montreal and told us about Julia’s involvement with snaps and other package managers.
Packages are an important part of the integrated environment that Julia offers with ease of integration and performance optimisation being key features. An invitation to the Snapcraft Summit was how Jeff discovered snaps which corresponded to a key goal for Julia of using standard distribution channels and multiple Linux distributions. Snaps offered a solution to the problems that arose when using the package managers of different distributions, because of Julia’s numerous dependencies on specific versions of other software. “Snaps seemed like exactly the answer as it lets us use whatever dependencies we need. It’s a perfect distribution mechanism for us,” Jeff states.
Naturally, before meeting snaps, Julia already had packaging solutions in place. Tarballs, git clones, and source tarballs are still packaging options that Julia continues to use. Binary tarballs work well, although it has taken the Julia team several years to make them reliable. As Jeff puts it, “making the snap was incredibly easy since we had already done a lot of work to make our builds relocatable. For any project that does that, adding a snap is no problem.” Integration of snaps into the Julia build process has yet to be done. However, Jeff feels confident that this should be straightforward, thanks to the simple yaml file format of snaps.
Jeff also thinks that snaps can help increase Julia’s reach and discoverability, bringing Julia to people looking for technical or machine learning related software via the Snap Store. Initially, all Julia snaps were built in the edge channel as part of a conservative approach but have since moved to the stable channel.
We asked Jeff what improvements he would make to the snap system, based on his experience at the Summit. His answer was greater facility in snaps for handling multiple versions of applications for simultaneous installation. Julia users will often want multiple versions of the software installed, for example, because they want to test their libraries against each version. However to summarise the ease of starting with snaps, Jeff explains, “the build.snapcraft and Snapcraft website are so easy to use – you just click a button – and snaps are generated for multiple architectures. There’s really no reason not to try it.”
While Jeff already appreciates the advantages of snaps, he pointed out that developers still need to be convinced that a snap is the best way to make their software easy to use and to increase its reach. The Snapcraft developer community has an important role in this, he thinks. This strong community support complements the inherent advantages of snaps of simplicity and flexibility. “Snaps are a simple system, it’s very flexible and understands the needs of different projects which helps accommodate and attract a wide variety of applications,” comments Jeff.
Interacting with the developer community was also a high point of the Summit for Jeff – along with the “impressive supply of food and coffee.” He found friendly and helpful support from other developers to be available “around the clock”, and that they gave their time unstintingly to answer all of Julia’s questions.
Install Julia as a snap here.