Growing a GNU with Guix
A Foundation for the GNU System
Guix is GNU's package manager and distribution. It seeks to empower users in several ways: by being a dependable system foundation, by providing the tools to formally correlate a binary package and the "recipes" and source code that led to it, by allowing users to customize the distribution, and by lowering the barrier to entry in distribution development.
This talk will describe the features and foundations of GNU Guix as a package manager. It will report on the current status of building a stand-alone GNU distribution, and outline design goals that set it apart from existing distros.
Guix is GNU's package manager and distribution. Its goal is to be a foundation for the GNU system that is dependable, hackable, and liberating.
Guix is a dependable package manager in that it supports transactional upgrades and roll-backs---valuable features pioneered by the Nix package manager it is based upon. The underlying functional package management paradigm, where packages are built in isolated containers, maximizes chances that builds are bit-reproducible---allowing users to compare independent builds of a given package, rather than relying on a single distribution point for binaries.
Packages are declared in a high-level fashion, using a domain-specific language embedded in the Scheme programming language. This is the first step in making it hackable to our eyes: packagers do not even need to know Scheme to write a package definition, yet the full power of Scheme, of GNU Guile, and of the Geiser programming environment is available. From a programming viewpoint, Guix and the GNU distribution are just a bunch of "normal" Guile modules, some of which export "package" objects---one can easily write Guile code that builds atop the distribution, customizes it, or otherwise fiddles with packages.
This feature set serves one goal: to put users in control. We are putting together an operating system made of software that respects the user's freedom---GNU's goal as stated 30 years ago. By allowing users to know exactly what dependencies and build scripts led to a given binary, the functional package management paradigm increases the control users have over the software they're running. By offering a consistent view, tool set, and APIs, we hope to make it easier for users to exert their freedom to adapt the software to their needs.
This talk will present these features, the underlying foundations, and our motivations. We'll report on the project's status after more than a year of development, and discuss what's cooking in the GNU system.