GNU Guix 1.3.0 released
We are pleased to announce the release of GNU Guix version 1.3.0!
The release comes with ISO-9660 installation
a virtual machine
and with tarballs to install the package manager on top of your
GNU/Linux distro, either from
Guix users can update by running
It’s been almost 6 months since the last release, during which 212 people contributed code and packages, and a number of people contributed to other important tasks—code review, system administration, translation, web site updates, Outreachy mentoring, and more.
There’s been more than 8,300 commits in that time frame, which we’ll humbly try to summarize in these release notes.
A distinguishing Guix feature is its support for declarative
deployment: instead of running a bunch of
guix install and
guix remove commands, you run
guix package --manifest=manifest.scm, where
manifest.scm lists the software you want to install in a snippet that
looks like this:
;; This is 'manifest.scm'. (specifications->manifest (list "emacs" "guile" "gcc-toolchain"))
Doing that installs exactly the packages listed. You can have that file under version control and share it with others, which is convenient. Until now, one would have to write the manifest by hand—not insurmountable, but still a barrier to someone willing to migrate to the declarative model.
guix package --export-manifest
(and its companion
--export-channels option) produces a manifest based
on the contents of an existing profile. That makes it easy to
transition from the classic “imperative” model, where you run
guix install as needed, to the more formal declarative model. This was long
Users who like to always run the latest and greatest pieces of the free
software commons will love the new
Using the same code as
this option looks for the latest upstream release of a package,
fetches it, authenticates it, and builds it. This is useful in cases
where the new version is not yet packaged in Guix. For example, the
command below, if run today, will (attempt to) install QEMU 6.0.0:
$ guix install qemu --with-latest=qemu The following package will be upgraded: qemu 5.2.0 → 6.0.0 Starting download of /tmp/guix-file.eHO6MU From https://download.qemu.org//qemu-6.0.0.tar.bz2... …0.tar.bz2 123.3MiB 28.2MiB/s 00:04 [##################] 100.0% Starting download of /tmp/guix-file.9NRlvT From https://download.qemu.org//qemu-6.0.0.tar.bz2.sig... …tar.bz2.sig 310B 1.2MiB/s 00:00 [##################] 100.0% gpgv: Signature made Thu 29 Apr 2021 09:28:25 PM CEST gpgv: using RSA key CEACC9E15534EBABB82D3FA03353C9CEF108B584 gpgv: Good signature from "Michael Roth <firstname.lastname@example.org>" gpgv: aka "Michael Roth <email@example.com>" gpgv: aka "Michael Roth <firstname.lastname@example.org>" The following derivation will be built: /gnu/store/ypz433vzsbg3vjp5374fr9lhsm7jjxa4-qemu-6.0.0.drv …
There’s one obvious caveat: this is not guaranteed to work. If the new version has a different build system, or if it requires extra dependencies compared to the version currently packaged, the build process will fail. Yet, it provides users with additional flexibility which can be convenient at times. For developers, it’s also a quick way to check whether a given package successfully builds against the latest version of one of its dependencies.
Several changes were made here and there to improve user experience. As
an example, a new
was added. By default (
--verbosity=1), fewer details about downloads
get printed, which matches the expectation of most users.
Another handy improvement is suggestions when making typos:
$ guix package --export-manifests guix package: error: export-manifests: unrecognized option hint: Did you mean `export-manifest'? $ guix remve vim guix: remve: command not found hint: Did you mean `remove'? Try `guix --help' for more information.
People setting up build offloading over
will enjoy the simplified process, where the
guile executable no
longer needs to be in
PATH, with appropriate
settings, on target machines. Instead, offloading now channels all its
The Guix reference manual is fully translated into French, German, and Spanish, with preliminary translations in Russian, Chinese, and other languages. Guix itself is fully translated in French, German, and Slovak, and partially translated in almost twenty other languages. Translations are now handled on Weblate, and you can help!
We have good news for packagers! First,
comes with a new Go recursive importer, that can create package
definitions or templates thereof for whole sets of Go packages. The
guix import crate command, for Rust packages, now honors “semantic
versioning” when used in recursive mode.
now includes new “updaters”:
sourceforge, for code hosted on
generic-html which, as the name implies, is a generic
update that works by scanning package home pages. This greatly improves
guix refresh coverage.
Packagers and developers may also like the new
which provides a way to build a bunch of packages with a patch applied
to one or several of them.
Building on the Guix System image
in v1.2.0, the
guix system vm-image and
guix system disk-image are
superseded by a unified
guix system image command. For example,
guix system vm-image --save-provenance config.scm
guix system image -t qcow2 --save-provenance config.scm
guix system disk-image -t iso9660 gnu/system/install.scm
guix system image -t iso9660 gnu/system/install.scm
This brings performance benefits; while a virtual machine used to be
involved in the production of the image artifacts, the low-level bits
are now handled by the dedicated
genimage tool. Another benefit is
qcow2 format is now compressed, which removes the need to
manually compress the images by post-processing them with
another compressor. To learn more about the
guix system image
command, you can refer to its
Last but not least, the introduction of the
Guix search path should make it possible for Guix extensions, such as
the Guix Workflow Language, to have their Guile
modules automatically discovered, simplifying their deployments.
One thing you will hopefully notice is that substitute installation
(downloading pre-built binaries) became faster, as we explained
This is in part due to the opportunistic use of zstd compression, which
has a high decompression throughput. The daemon and
support zstd as an additional compression method, next to gzip and lzip.
Another change that can help fetch substitutes more quickly is local
substitute server discovery. The new
--discover option of
instructs it to discover and use substitute servers on the local-area
network (LAN) advertised with the mDNS/DNS-SD protocols, using Avahi.
guix publish has a new
to advertise itself on the LAN.
On Guix System, you can run
herd discover guix-daemon on to turn
discovery on temporarily, or you can enable it in your system
Opportunistic use of neighboring substitute servers is entirely safe,
thanks to reproducible
In other news,
guix system init has been
optimized, which contributes to
making Guix System installation faster.
On some machines with limited resources, building the Guix modules is
an expensive operation. A new procedure,
channel-with-substitutes-available from the
(guix ci) module, can
now be used to pull Guix to the latest commit which has already been
built by the build farm. Refer to the documentation for an
POWER9 support, packages, services, and more!
POWER9 support is now available as a technology preview, thanks to the tireless work of those who helped porting Guix to that platform. There aren't many POWER9 binary substitutes available yet, due to the limited POWER9 capacity of our build farm, but if you are not afraid of building many packages from source, we'd be thrilled to hear back from your experience!
2,000 packages were added, for a total of more than 17K packages; 3,100 were updated. The distribution comes with GNU libc 2.31, GCC 10.3, Xfce 4.16.0, Linux-libre 5.11.15, LibreOffice 220.127.116.11, and Emacs 27.2, to name a few. Among the many packaging changes, one that stands out is the new OCaml bootstrap: the OCaml package is now built entirely from source via camlboot. Package updates also include Cuirass 1.0, the service that powers our build farm.
The services catalog has also seen new additions such as
a simplified and more convenient service for
and more! You can search for services via the
guix system search
lists additional noteworthy changes and bug fixes you may be
The installation script has been improved to allow for more automation. For example, if you are in a hurry, you can run it with:
# yes | ./install.sh
to proceed to install the Guix binary on your system without any prompt!
You may also be interested in trying the Guix System demonstration VM image which now supports clipboard integration with the host and dynamic resizing thanks to the SPICE protocol, which we hope will improve the user experience.
To review all the installation options at your disposal, consult the download page and don't hesitate to get in touch with us.
Luis Felipe (illustration)
About GNU Guix
GNU Guix is a transactional package manager and an advanced distribution of the GNU system that respects user freedom. Guix can be used on top of any system running the Hurd or the Linux kernel, or it can be used as a standalone operating system distribution for i686, x86_64, ARMv7, AArch64 and POWER9 machines.
In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. When used as a standalone GNU/Linux distribution, Guix offers a declarative, stateless approach to operating system configuration management. Guix is highly customizable and hackable through Guile programming interfaces and extensions to the Scheme language.