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
images,
a virtual machine
image,
and with tarballs to install the package manager on top of your
GNU/Linux distro, either from
source or
from
binaries.
Guix users can update by running guix pull
.
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.
User experience
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.
The new guix package --export-manifest
command
(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
awaited!
Users who like to always run the latest and greatest pieces of the free
software commons will love the new --with-latest
package
transformation
option.
Using the same code as guix refresh
,
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 <michael.roth@amd.com>"
gpgv: aka "Michael Roth <mdroth@utexas.edu>"
gpgv: aka "Michael Roth <flukshun@gmail.com>"
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 --verbosity
level
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
SSH
will enjoy the simplified process, where the guile
executable no
longer needs to be in PATH
, with appropriate GUILE_LOAD_PATH
settings, on target machines. Instead, offloading now channels all its
operations through guix repl
.
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!
Developer tools
We have good news for packagers! First, guix import
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.
The guix refresh
command
now includes new “updaters”: sourceforge
, for code hosted on
SourceForge, and 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 --with-patch
package
transformation
option,
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
API introduced
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
becomes
guix system image -t qcow2 --save-provenance config.scm
while
guix system disk-image -t iso9660 gnu/system/install.scm
becomes
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
that the qcow2
format is now compressed, which removes the need to
manually compress the images by post-processing them with xz
or
another compressor. To learn more about the guix system image
command, you can refer to its
documentation.
Last but not least, the introduction of the GUIX_EXTENSIONS_PATH
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.
Performance
One thing you will hopefully notice is that substitute installation
(downloading pre-built binaries) became faster, as we explained
before.
This is in part due to the opportunistic use of zstd compression, which
has a high decompression throughput. The daemon and guix publish
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
guix-daemon
instructs it to discover and use substitute servers on the local-area
network (LAN) advertised with the mDNS/DNS-SD protocols, using Avahi.
Similarly, guix publish
has a new --advertise
option
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
configuration.
Opportunistic use of neighboring substitute servers is entirely safe,
thanks to reproducible
builds.
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
example.
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 6.4.7.2, 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
wireguard,
syncthing,
ipfs,
a simplified and more convenient service for
Cuirass,
and more! You can search for services via the guix system search
facility.
The NEWS
file
lists additional noteworthy changes and bug fixes you may be
interested in.
Try it!
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.
Enjoy!
Credits
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.
Pokud není uvedeno jinak, příspěvky na blogu na těchto stránkách jsou chráněny autorskými právy příslušných autorů a zveřejněny za podmínek licence CC-BY-SA 4.0 a podmínek licence GNU Free Documentation License (verze 1.3 nebo novější, bez invariantních částí, bez textů na přední straně obálky a bez textů na zadní straně obálky).