Brussels / 30 & 31 January 2016


Foreign packages in GNU Guix

Examples from Ruby gems, Python modules and R/CRAN

GNU Guix allows creating higher level abstractions. This means you can have a short and elegant way to describe any source package. We added support for Ruby gems and Python modules to GNU Guix. We think the process of adding them is interesting for others who would like to support their language and or software stack.

The GNU software packaging project is packaging done right. Ruby deployment with rubygems used to be pretty good, years ago, but over time it has turned into a nightmare of dependencies. Tools like RVM, rbenv and bundler try to bring some level of control for running multiple versions of Ruby and gems, but over the last years they are showing their limitations clearly.

So when should you look at GNU Guix? You should look at Guix when you

are serious about software deployment
need to handle multiple versions of Ruby or gems
want clear isolation of dependencies
want clean separation of gems
want a reproducible environment

GNU Guix allows you to define a software package once with all its dependencies. Every time you install the package it gets reproduced exactly with its exact dependency graph, all the way down to glibc. See this figure. Whether you are a sysadmin who needs to deploy an exact Rails stack or you are a developer and need to support user environment, GNU Guix is the solution you require. Use cases are

test gems using multiple versions of Ruby
install concurrent rubies with or without linked openssl support
run minimal ruby to be exposed to the web
update ruby in production and roll-back after a problem
run multiple versions of the same gem against one ruby
run multiple versions of openssl dependencies

Use your imagination. The point is that you control the full dependency graph. Always. You can even give users rights to install and share software because the underlying system is ‘immutable’. Existing graphs can not be overwritten by others.

GNU Guix is a next generation software package installer with a range of features, including sane dependency handling, transactional and reproducible installs which can be rolled back. In short, GNU Guix has resolved the fundamental problems of software deployment and management. GNU Guix also should play well with Docker and VMs.


Photo of Pjotr Prins Pjotr Prins
David Thompson