https://guix.gnu.org/feeds/blog/gnuhurd.atomGNU Guix — Blog — GNU/Hurdfeed author nameGNU Guixhttps://guix.gnu.org/themes/initial/img/icon.png2024-03-20T10:58:00Zhttps://guix.gnu.org/blog/2020/childhurds-and-substitutes//Childhurds and GNU/Hurd substitutesJan (janneke) Nieuwenhuizen, Ludovic Courtès, Mathieu Othacehe2020-10-08T14:15:00Z2020-10-08T14:15:00Z A lot has happened since our Hello Hurd
post
beginning of April.
No, not nearly as much as we joked on April 1st
,
but more than enough to share and be proud of. Building a Hurd virtual machine As some of you noticed, the previous hacks to build a Hurd virtual
machine (VM) were
removed and no longer work; using Guix you can now build a GNU/Hurd VM
just like you would build a GNU/Linux VM: guix system disk-image -t hurd-raw bare-hurd.tmpl This cross-compiles all the relevant packages for GNU/Hurd—specifically the
i586-pc-gnu
triplet —and…<p>A lot has happened since our <a href="https://guix.gnu.org/en/blog/2020/a-hello-world-virtual-machine-running-the-hurd/">Hello Hurd
post</a>
beginning of April.
No, not nearly as much as <a href="https://guix.gnu.org/blog/2020/deprecating-support-for-the-linux-kernel/">we joked on April 1st
</a>,
but more than enough to share and be proud of.</p><h1>Building a Hurd virtual machine</h1><p>As some of you noticed, the previous hacks to build a Hurd virtual
machine (VM) were
removed and no longer work; using Guix you can now build a GNU/Hurd VM
just like you would build a GNU/Linux VM:</p><pre><code>guix system disk-image -t hurd-raw bare-hurd.tmpl</code></pre><p>This cross-compiles all the relevant packages for GNU/Hurd—specifically the
<code>i586-pc-gnu</code>
<a href="https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html">triplet</a>—and produces a VM image:</p><pre><code>/gnu/store/n7jkfajw0fzp975hv0b9v18r9bbr961q-disk-image</code></pre><p>You can build it and start it from your GNU/Linux machine with this
command:</p><pre><code>qemu-system-i386 -enable-kvm -m 512 -snapshot -hda \
$(guix system disk-image -t hurd-raw bare-hurd.tmpl)</code></pre><p>We are using this ready-made, minimal GNU/Hurd operating system
description
<a href="https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/examples/bare-hurd.tmpl">gnu/system/examples/bare-hurd.tmpl</a>
that looks suprisingly familiar:</p><pre><code class="language-scheme">(use-modules (gnu) (gnu system hurd) (guix utils))
(use-service-modules ssh)
(use-package-modules ssh)
(define %hurd-os
(operating-system
(inherit %hurd-default-operating-system)
(bootloader (bootloader-configuration
(bootloader grub-minimal-bootloader)
(target "/dev/sdX")))
(file-systems (cons (file-system
(device (file-system-label "my-root"))
(mount-point "/")
(type "ext2"))
%base-file-systems))
(host-name "guixygnu")
(timezone "Europe/Amsterdam")
(packages (cons openssh-sans-x %base-packages/hurd))
(services (cons (service openssh-service-type
(openssh-configuration
(openssh openssh-sans-x)
(use-pam? #f)
(port-number 2222)
(permit-root-login #t)
(allow-empty-passwords? #t)
(password-authentication? #t)))
%base-services/hurd))))
%hurd-os</code></pre><p>and it can be customized just like a GNU/Linux operating system
description. The end result is a full-blown Guix System with <a href="https://gnu.org/software/shepherd">the
Shepherd</a> managing system services
and all that—finally we can run
<a href="https://www.gnu.org/software/shepherd/manual/html_node/Invoking-herd.html"><code>herd</code></a>
on the Hurd.</p><p>A lot of things had to be in place to support this, we worked on</p><ul><li>Adding <a href="https://en.wikipedia.org/wiki/Multi-booting">multiboot support</a>
to <a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=1244491a0d5334e1589159a2ff67bbc967b9648b"><code>grub-minimal-bootloader</code></a>; a nice standard that Linux sadly does
not support,</li><li>Support for the Hurd and cross-building of the core packages listed in
<a href="https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/hurd.scm#n62"><code>%base-packages/hurd</code></a>,</li><li><p>Support for the Hurd and cross-building of the system services in
<a href="https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/hurd.scm#n67"><code>%base-services/hurd</code></a>,</p><ul><li><p>Add <a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=f9c04580bf5462bb088f47ad8fc6c3136649cbd6"><code>hurd-console-service</code></a>,</p></li><li><p>Add <a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=7ccd471c71d650055e99cd02381bc8dcd86d5313"><code>hurd-getty-service</code></a>,</p></li><li><p>Add <a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=45b2cb439deaa2f438aed3893ee8fc80445d5563"><code>hurd-default-essential-services</code></a>,</p></li><li><p>Add Hurd support to <a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=b37c544196898cc3dfa3da07ed344fbe11abc120"><code>%boot-service</code></a></p></li><li><p>Add a <a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=68d8c094659565fe19abc1c433a17337ce5cacb7"><code>hurd-startup-service</code></a>,</p></li><li><p>Add Hurd support to <a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=c3fd2df705695a0dc9f393545606360be1ea6104"><code>activation-service</code></a>,</p></li><li><p>Add Hurd support for “syscalls”:
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=86f5decd2066889bf2e60df388d6c812aede0917"><code>define-c-struct</code></a>,
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=598be42dfa3aa1f6a92b5562397742b3fa96a3e0"><code>ioctl</code></a>,
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=82d8959e5d137b2061a68878d78a8f74a238ac44"><code>readdir*</code></a>,
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=0d371c633f7308cfde2432d6119d386a5c63198c"><code>sockaddr-in</code></a>,
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=df05842332be80ed7f53022402b95cf711163b41"><code>getxattr</code></a>,
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=d155c9d93496ae620829fbc33b5694e74cda9683"><code>setxattr</code></a>,</p></li></ul></li></ul><p>counting some ~200 patches by ten people over six months; including
generic cross-compilation fixes and support, and Hurd fixes and
support.</p><p>Also, we finished the passive translator settings over extended
attributes (<em>xattrs</em>) <a href="https://git.savannah.gnu.org/cgit/hurd/hurd.git/commit/?id=a04c7bf83172faa7cb080fbe3b6c04a8415ca645">for the
Hurd</a>
and <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=88ee9d571b6d8ed345f877e05f685814412e359b">for
Linux</a>.</p><p>You may notice that we are using the new <code>disk-image</code> command rather
than the old <code>vm-image</code>. One of the big hurdles in producing a VM
image was <a href="https://issues.guix.gnu.org/41350">the way Guix produces VM
images</a>: it would run a target
QEMU, e.g. <code>qemu-arm</code>. That does not work for the Hurd, as there is
no <code>qemu-hurd</code>. Without going into the hairy details, when Ludo and
Janneke were—three patch sets, 50 messages and 13 days later—almost
ready to give up, Mathieu came to the rescue with his <a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=f19cf27c2b9ff92e2c0fd931ef7fde39c376adaa">brand-new
implementation</a>
of the <code>disk-image</code> command. At the time, Hurd work was done on the
<code>wip-hurd</code> branch and the disk-image work on <code>wip-disk-image</code>. Soon
after, Mathieu proposed an <a href="https://lists.gnu.org/archive/html/bug-guix/2020-04/msg00610.html"><em>explosive
mix</em></a>
of the two branches; we managed to create the first Hurd system that
really felt like Guix System.</p><p>The new implementation of the <code>disk-image</code> command was followed by the
introduction of an <code>--image-type</code> or <code>-t</code> option. This option allows to
produce disk images targeting different supports. The <code>hurd-raw</code> and
<code>hurd-qcow2</code> image types, producing respectively a raw Hurd disk-image and a
Hurd QCOW2 disk-image were introduced. They can be used this way:</p><pre><code>guix system disk-image -t hurd-raw bare-hurd.tmpl
guix system disk-image -t hurd-qcow2 bare-hurd.tmpl</code></pre><p>This mechanism providing much more flexibility in the Guix System image
generation will be described in a future blog post.</p><p>We also offer downloads of continuously built (actually cross-built)
<a href="https://ci.guix.gnu.org/search/latest/image?query=spec:guix-master+status:success+system:x86_64-linux+hurd-barebones.qcow2">Guix System on
GNU/Hurd</a>
(~350 MiB).</p><h1>Substitutes</h1><p>While amazing to be able to just run the Hurd in a VM, development without
<a href="https://guix.gnu.org/manual/en/html_node/Substitutes.html">substitutes</a>
is a real pain; a Guix system needs substitutes. How to
go about that? We have a build farm but currently Hurd only runs on
ancient hardware: not an option. We need a machine running Guix/Hurd
to
<a href="https://guix.gnu.org/manual/devel/en/html_node/Daemon-Offload-Setup.html">offload</a>
Hurd build jobs to.</p><p>The proposed solution was to automate the building and running of a
Guix VM into a new Guix service: the so-called <code>hurd-vm</code> or <code>childhurd</code>
service. We would add something like:</p><pre><code class="language-scheme">(service hurd-vm-service-type)</code></pre><p>to a couple of our build nodes to add a hird of virtual Hurd machines
to our build farm.</p><h1>The Childhurd service</h1><p>The Hurd—being based on a microkernel—has some beautiful built-in
"virtualization" possibilites that have their own naming:
<a href="https://www.gnu.org/software/hurd/hurd/neighborhurd.html">neighborhurd</a>s,
<a href="https://www.gnu.org/software/hurd/hurd/subhurd.html">subhurd</a>s.
Similarly, we are adding
<a href="https://guix.gnu.org/manual/devel/en/html_node/Virtualization-Services.html#Childhurd"><em>childhurds</em></a>
to this mix: a childhurd is a GNU/Hurd VM running on GNU/Linux and
managed by Guix.</p><p>When you are running Guix System, building a Hurd VM manually is no
longer necessary. Just add <a href="https://guix.gnu.org/manual/devel/en/html_node/Transparent-Emulation-with-QEMU.html#The-Hurd-in-a-Virtual-Machine">the <code>hurd-vm</code>
service</a>
to your operating
system description:</p><pre><code class="language-scheme">(service hurd-vm-service-type
(hurd-vm-configuration
(disk-size (* 12 (expt 2 30))) ;12GiB
(memory-size 1024))) ; 1GiB</code></pre><p>and this will build a childhurd for you when you reconfigure your
system. This childhurd can be stopped and started just like any other
service:</p><pre><code class="language-bash">herd stop hurd-vm
herd start childhurd</code></pre><p>(<code>childhurd</code> is an alias for <code>hurd-vm</code>).</p><p><em>WARNING</em></p><p><img src="/static/blog/img/hurd-substitutes.gif" alt="This Hurd is fully operational" /></p><p>It is highly addictive.</p><p>Having shaved this yak, let’s not lose sight that our initial goal was to
offload builds to those GNU/Hurd VMs. The childhurd service does all
the heavy lifting. To offload from GNU/Linux to my childhurd, I added
this to my <code>/etc/guix/machines.scm</code>:</p><pre><code class="language-scheme"> (build-machine
(name "localhost")
(systems (list "i586-gnu"))
(host-key "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHZsrZ63zs+AhWbVJgYq6j1h2rgQGrWKCokpR2/Q/Jzy root@guixygnu")
(port 10022) ;the Hurd VM has SSH listening on that port
(user "root")
(private-key "/home/janneke/.ssh/id_rsa_childhurd"))</code></pre><p>That can be used to transparently offload builds from GNU/Linux to the
childhurd:</p><pre><code class="language-bash">$ uname -o
GNU/Linux
$ guix build hello -s i586-gnu
The following derivation will be built:
/gnu/store/jqdvjhcxxnbq370y8i2c973c9zfiqrgl-hello-2.10.drv
[…]
guix offload: sending 1 store item (12 MiB) to 'localhost'...
offloading '/gnu/store/jqdvjhcxxnbq370y8i2c973c9zfiqrgl-hello-2.10.drv' to 'localhost'...
[…]
/gnu/store/803q5wapfnmr91ag8d9dzwabkbdxz3ay-hello-2.10
$ file -L $(guix build hello -s i586-gnu)/bin/hello
/gnu/store/803q5wapfnmr91ag8d9dzwabkbdxz3ay-hello-2.10/bin/hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /gnu/store/9vs3gkp6svam82zw7vjlml7iiarcs11c-glibc-2.31/lib/ld.so.1, for GNU/Hurd 0.0.0, not stripped</code></pre><p>Hurrah!</p><h1>Hurd substitutes</h1><p>Last Friday we produced the very first <a href="https://ci.guix.gnu.org/803q5wapfnmr91ag8d9dzwabkbdxz3ay.narinfo">GNU Hello
substitute</a>
for the Hurd:</p><pre><code>StorePath: /gnu/store/803q5wapfnmr91ag8d9dzwabkbdxz3ay-hello-2.10
URL: nar/gzip/803q5wapfnmr91ag8d9dzwabkbdxz3ay-hello-2.10
Compression: gzip
FileSize: 61822
URL: nar/lzip/803q5wapfnmr91ag8d9dzwabkbdxz3ay-hello-2.10
Compression: lzip
FileSize: 52887
NarHash: sha256:0g4k1kppjs5148ynm4zw4x1kpaby67npc3ws6s7y7hf0il1cgryk
NarSize: 204328
References: 803q5wapfnmr91ag8d9dzwabkbdxz3ay-hello-2.10 9vs3gkp6svam82zw7vjlml7iiarcs11c-glibc-2.31 bwvd5338kfm0vsc4i9xvh48vdxr5ywrz-gcc-7.5.0-lib
System: i586-gnu
Deriver: jqdvjhcxxnbq370y8i2c973c9zfiqrgl-hello-2.10.drv
Signature: 1;berlin.guix.gnu.org;KHNpZ25hdHVyZSAKIChkYXRhIAogIChmbGFncyByZmM2OTc5KQogIChoYXNoIHNoYTI1NiAjMDVGOEY5NjMxRUU5QzcxM0REQUNBRTYwNUNCNjJBNzlDNUY4NEVFQTIwMjc5OERBNTQ3NURCOUU2Q0FBRDMwMSMpCiAgKQogKHNpZy12YWwgCiAgKGVjZHNhIAogICAociAjMDVBMzkzMTgwOUY1RkQyMTdGMDM4MUVDMTJEODYyNzIyOEYyNjJGRDA4MTcxQjREMzZBNEM0RjBBNjZEQkY4NSMpCiAgIChzICMwQTc2RjZGNENCOTMzQTczNzA4QkNGMzRGREExMzkyOTRGQTQxREQzQTUwQkEwOUE0ODRCQUQyOTA4MjQ5ODIxIykKICAgKQogICkKIChwdWJsaWMta2V5IAogIChlY2MgCiAgIChjdXJ2ZSBFZDI1NTE5KQogICAocSAjOEQxNTZGMjk1RDI0QjBEOUE4NkZBNTc0MUE4NDBGRjJEMjRGNjBGN0I2QzQxMzQ4MTRBRDU1NjI1OTcxQjM5NCMpCiAgICkKICApCiApCg==</code></pre><p>For development, porting and fixing of packages, you can use a
Childhurd configuration like this:</p><pre><code class="language-scheme">(use-modules (srfi srfi-1) (guix packages) (guix records))
(use-package-modules base compression file gawk gdb hurd less m4 package-management)
(define guix-packages
(filter-map input->package
(fold alist-delete (package-direct-inputs guix)
'("glibc-utf8-locales" "graphviz" "po4a"))))
(operating-system
(inherit %hurd-vm-operating-system)
(users ...)
(packages
(cons* diffutils file findutils gawk gdb-minimal git-minimal
gnu-make grep gzip less m4 openssh-sans-x tar xz
(append
guix-packages
(delete guile-3.0 %base-packages/hurd)))))</code></pre><p>… which allows working from a Git clone:</p><pre><code class="language-bash">15:51:05 janneke@dundal:~/src/guix/master [env]
$ ssh -A janneke@childhurd
Last login: Sat Oct 3 15:31:55 2020 from 10.0.2.2
This is the GNU Hurd. Welcome.
janneke@childhurd ~$ git config --global url."git+ssh://git.sv.gnu.org/srv/git/".insteadOf gnu:
janneke@childhurd ~$ git clone gnu:guix
Cloning into 'guix'...
remote: Counting objects: 394436, done.
remote: Compressing objects: 100% (85728/85728), done.
remote: Total 394436 (delta 309572), reused 392294 (delta 307893)
Receiving objects: 100% (394436/394436), 137.05 MiB | 1.18 MiB/s, done.
Resolving deltas: 100% (309572/309572), done.
Updating files: 100% (2199/2199), done.</code></pre><p>but before we continue let's first check the
<a href="https://guix.gnu.org/development/manual/en/html_node/Invoking-guix-weather.html#Invoking-guix-weather">weather</a>:</p><pre><code class="language-bash">janneke@childhurd ~$ guix weather
computing 11079 package derivations for i586-gnu...
looking for 11521 store items on https://ci.guix.gnu.org...
updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
https://ci.guix.gnu.org
1.5% substitutes available (169 out of 11521)
at least 443.3 MiB of nars (compressed)
966.7 MiB on disk (uncompressed)
0.012 seconds per request (142.2 seconds in total)
81.0 requests per second
[..]</code></pre><p>this gives an idea of how young this project is. Any day now, more
<a href="https://ci.guix.gnu.org/jobset/hurd-master">Hurd substitutes</a> will
follow. Now let's configure and build Guix:</p><pre><code class="language-bash">janneke@childhurd ~$ cd guix
janneke@childhurd ~/guix$ guix environment --bootstrap \
--ad-hoc gcc-toolchain@7 libgcrypt zlib
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
The following derivations will be built:
/gnu/store/gxq5flc8kwpn999dw9xxvldy9xfd0q2x-profile.drv
/gnu/store/vfkjnwgl4ckyklrl2z4q8x2vnlrwwyfr-gcc-toolchain-7.5.0.drv
/gnu/store/zh6snj49ayrpw24jn7whpzygj1fpy9cm-module-import-compiled.drv
66.3 MB will be downloaded
[..]
building profile with 3 packages...
janneke@childhurd ~/guix [env]$ ./bootstrap
[..]
janneke@childhurd ~/guix [env]$ ./configure --with-courage\
--localstatedir=/var --sysconfdir=/etc
[..]
janneke@childhurd ~/guix [env]$ make
[..]
janneke@childhurd ~/guix [env]$ ./pre-inst-env guix build hello
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
0.1 MB will be downloaded:
/gnu/store/803q5wapfnmr91ag8d9dzwabkbdxz3ay-hello-2.10
substituting /gnu/store/803q5wapfnmr91ag8d9dzwabkbdxz3ay-hello-2.10...
downloading from https://ci.guix.gnu.org/nar/lzip/803q5wapfnmr91ag8d9dzwabkbdxz3ay-hello-2.10 ...
hello-2.10 52KiB 258KiB/s 00:00 [##################] 100.0%
/gnu/store/803q5wapfnmr91ag8d9dzwabkbdxz3ay-hello-2.10</code></pre><p>just like we are used to do…almost. We are using <code>--bootstrap</code> and a
targeted <code>--ad-hoc</code> to avoid dependencies like <code>libx11</code>,
<code>python-minimal</code>, and other packages that do not build yet.</p><h1>Isolated build environments</h1><p>To help achieve <a href="https://reproducible-builds.org/docs/definition/">reproducible
builds</a>, Guix builds
packages in <em>isolated build environments</em>: build environments contain
nothing but the inputs explicitly declared in the package
definition—<a href="https://lists.gnu.org/archive/html/bug-guix/2013-01/msg00041.html">not even
<code>/bin/sh</code></a>.
Build environments also lack network access. On GNU/Linux this is
achieved by running builds in separate <em>namespaces</em>. Besides, the
environment contains device nodes and “special” file systems that are
usually expected to be available: <code>/dev/null</code>, <code>/dev/pts</code>, <code>/dev/shm</code>,
<code>/proc</code>, the loopback networking device, and so on. (The exact contents
<a href="https://guix.gnu.org/manual/en/html_node/Build-Environment-Setup.html">are
documented</a>.)</p><p>On GNU/Linux, these special files and file systems are implemented by
the kernel. Guix only cares about user-land software, meaning that
these devices “leak” from the host kernel instead of being an explicit
“input” of
<a href="https://guix.gnu.org/manual/en/html_node/Derivations.html">derivations</a>,
but that’s OK, that’s the deal: the kernel and hardware are considered
outside of Guix’s control.</p><p>What about GNU/Hurd, though? In GNU/Hurd, <code>/dev/null</code>, a
Linux-compatible <code>/proc</code>, the TCP/IP stack necessary to implement the
loopback device, and even support for pipes are all implemented in
user-land: writing to <code>/dev/null</code> amounts to talking to the <code>/hurd/null</code>
service (or <em>translator</em>), operations on <code>AF_INET</code> sockets translate to
remote procedure calls (RPCs) to <code>/servers/socket/2</code>, which the
<code>/hurd/pfinet</code> program listens to, and so on.</p><p>That raises an interesting question: what should the build environment
contain on GNU/Hurd? So far our GNU/Hurd builds were made in
non-isolated environments; we have just <a href="https://issues.guix.gnu.org/43857">started
implementing</a> support for isolated
builds but we’ll have to answer that question first. If we stick to our
approach—every piece of user-land software must be an explicit input of
the build process—then code that implements TCP/IP, <code>/dev/null</code>, or even
<code>pipe</code> should be an explicit input of any build process that needs those
facilities.</p><p>This principled approach can push the notion of controlled, reproducible
build environments to a whole new level. For example, we’ve
<a href="https://issues.guix.gnu.org/21280#7">had</a>
<a href="https://issues.guix.gnu.org/20877#5">cases</a> where the choice of the
root file system—e.g., ext4 vs. Btrfs—has an observable effect on
software behavior, leading to concrete issues such as test failures in
one case and not in the other. On GNU/Hurd, build processes could run
their own root file system, doing away with this kind of discrepancy.</p><p>On the other hand, there are practical issues that cannot be ignored:
virtually all build processes need these facilities so they’ll need to
be set up one way or another. Also, one could argue that things like
<code>/dev/null</code> have a well-defined interface that’s set in stone and that,
consequently, how they’re implemented does not matter at all. Can we
say the same of the TCP/IP stack though? Maybe not. A line needs to be
drawn somewhere.</p><p>We have yet to decide where to draw the line and to precisely define
what the build environment contains on GNU/Hurd. These questions are
closely related to bootstrapping issues we notably <a href="https://guix.gnu.org/blog/2019/reproducible-builds-summit-5th-edition/">discussed at the
2019 Reproducible Builds
Summit</a>.
Tricky, but exciting.</p><h1>What's next?</h1><p>In <a href="https://guix.gnu.org/en/blog/2020/a-hello-world-virtual-machine-running-the-hurd/">an earlier
post</a>
we tried to answer the question “Why bother with the Hurd anyway?” An
obvious question because it is <a href="https://xkcd.com/1508">all too easy to get
discouraged</a>, to downplay or underestimate the
potential social impact of GNU and the Hurd.</p><p>We tried to make Hurd development as easy and as pleasant as we could.
As you have seen, things start to work pretty nicely and there is
still plenty of work to do in Guix. But in a way this is “merely
packaging” the amazing work of others. Some of the real work that
needs to be done and which is being discussed and is in progress
right now includes:</p><ul><li><a href="https://lists.gnu.org/archive/html/bug-hurd/2020-07/msg00042.html">user-space driver/modern hardware
support</a></li><li><a href="https://nlnet.nl/project/Hurd-Audio/">audio support</a> (this is
sponsored by <a href="https://nlnet.nl">NLnet</a>, thanks!),</li><li><a href="https://lists.gnu.org/archive/html/bug-hurd/2020-07/msg00048.html">SMP
support</a>,</li><li><a href="https://github.com/etienne02/gnumach/tree/master/x86_64">64-bit</a>/
<a href="http://richtlijn.be/~larstiq/hurd/hurd-2020-03-28">x86_64</a> support
(!), as well as porting to non-Intel CPUs.</li></ul><p>All these tasks look daunting, and indeed that’s a lot of work ahead.
But the development environment is certainly an advantage. Take an
example: surely anyone who’s hacked on device drivers or file systems
before would have loved to be able to GDB into the code, restart it, add
breakpoints and so on—that’s exactly the experience that the Hurd
offers. As for Guix, it will make it easy to test changes to the
micro-kernel and to the Hurd servers, and that too has the potential to
speed up development and make it a very nice experience.</p><p>Join <code>#guix</code> and <code>#hurd</code> on irc.freenode.net or the <a href="https://guix.gnu.org/en/contact">mailing
lists</a> and get involved!</p><h4>About GNU Guix</h4><p><a href="https://www.gnu.org/software/guix">GNU Guix</a> is a transactional package
manager and an advanced distribution of the GNU system that <a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html">respects
user
freedom</a>.
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, and AArch64 machines.</p><p>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 <a href="https://www.gnu.org/software/guile">Guile</a>
programming interfaces and extensions to the
<a href="http://schemers.org">Scheme</a> language.</p><h4>About the GNU Hurd</h4><p><a href="https://www.gnu.org/software/hurd">The GNU Hurd</a> is the GNU project's
replacement for the Unix kernel. It is a collection of servers that
run on the Mach microkernel to implement file systems, network
protocols, file access control, and other features that are
implemented by the Unix kernel or similar kernels (such as Linux).
<a href="https://www.gnu.org/software/hurd/hurd/documentation.html">More
info</a>.</p><p>The <a href="https://www.gnu.org/software/hurd/community/weblogs/antrik/hurd-mission-statement.html">mission of the GNU
Hurd</a>
project is to create a general-purpose kernel suitable for the GNU
operating system, which is viable for everyday use, and gives users
and programs as much control over their computing environment as
possible.</p>https://guix.gnu.org/blog/2020/a-hello-world-virtual-machine-running-the-hurd//A “Hello World” virtual machine running the HurdJan Nieuwenhuizen, Ludovic Courtès2020-04-08T17:50:00Z2020-04-08T17:50:00Z Hello GNU World! There’s been a bit of speculation as to whether our April 1st
post
was a joke. Part of it was a joke: we’re not deprecating Linux-libre,
fear not! But when we published it, it was already April 2nd in Eastern
parts of the world and thus, not surprisingly, the remainder of the post
was less of a joke. Getting to a bootable system For all you who tried our April 1st image and ran guix we sure hope
you had a good laugh. We set out to cross-build that…<p>Hello GNU World!</p><p>There’s been a bit of speculation as to whether our <a href="https://guix.gnu.org/blog/2020/deprecating-support-for-the-linux-kernel/">April 1st
post</a>
was a joke. Part of it was a joke: we’re <em>not</em> deprecating Linux-libre,
fear not! But when we published it, it was already April 2nd in Eastern
parts of the world and thus, not surprisingly, the remainder of the post
was less of a joke.</p><h1>Getting to a bootable system</h1><p>For all you who tried our April 1st image and ran <code>guix</code> we sure hope
you had a good laugh. We set out to cross-build that virtual machine
(VM) image using Guix and while we made some good progress on Wednesday,
in the end we decided to cheat to make the release deadline.</p><p>What we got stuck on for a while was to get past the ext2fs
<a href="https://www.gnu.org/software/hurd/doc/hurd_6.html#SEC43"><em>translator</em></a>
(the user-land process that implements the ext2 file system) seemingly
freezing on boot, saying:</p><pre><code>start ext2fs:</code></pre><p>and then nothing... Running <code>ext2fs</code> cross-built with Guix on
Debian GNU/Hurd would hang similarly. The kernel debugger would show an
intriguing backtrace in <code>ext2fs</code> suggesting that <code>ext2fs</code> was not
handling <a href="https://www.gnu.org/software/hurd/gnumach-doc/Memory-Object-Server.html">page fault
messages</a>.
Long story short: we eventually realized that the server interfaces were
compiled with a 64-bit <a href="https://www.gnu.org/software/mig">MiG</a> whereas
we were targeting a 32-bit platform. From there on, we embarked on a
delightful hacking journey ensuring the Hurd boot process would
correctly run in our VM up to a proper login prompt.</p><p>Today we have a humble gift for you: On the <code>wip-hurd-vm</code> branch
(<em>Update: this has now been
<a href="https://git.savannah.gnu.org/cgit/guix.git/log?h=core-updates&id=5084fd38541a5fc233f3299e10a33c3a38a7173f">merged</a>!</em>)
we have an <a href="https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/hurd.scm?h=core-updates&id=5084fd38541a5fc233f3299e10a33c3a38a7173f">initial
hurd.scm</a>
system description that can be used to cross build a VM running the
Hurd.</p><p>Running:</p><pre><code>./pre-inst-env guix build -f gnu/system/hurd.scm</code></pre><p>cross-compiles all the relevant packages for GNU/Hurd—specifically the
<code>i586-pc-gnu</code>
<a href="https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html">triplet</a>—and produces a VM image:</p><pre><code>/gnu/store/yqnabv1zmlkviwzikc23w9qvfnyfwvj7-qemu-image</code></pre><p>You can build it and start it from your GNU/Linux machine with this
command:</p><pre><code>qemu-system-i386 -enable-kvm -m 512 -snapshot -hda \
$(./pre-inst-env guix build -f gnu/system/hurd.scm)</code></pre><p>and voilà:</p><p><img src="https://guix.gnu.org/static/blog/img/hello-hurd.gif" alt="Initial Guix VM running the Hurd" /></p><p>Woohoo! (Actually we already have more stuff not shown here, such as
<code>guix</code> itself running… for a future post! :-))</p><h1>Why bother?</h1><p>Why bother with the Hurd anyway? Isn’t it a pipe dream or “vaporware”,
depending on one’s perspective? There’s some unquestionable truth in
that: we know that Hurd development started in the early 90’s, months
before Linux development started, and yet it still lacks so much in
terms of hardware support, even though significant progress was made in
recent years in particular with the use of <a href="http://rumpkernel.org/">Rump
kernels</a>.</p><p>The more we witness how new features are retrofitted in the kernel
Linux, the more we think the Hurd’s design is better suited to today’s
needs. <a href="http://man7.org/linux/man-pages/man7/namespaces.7.html">Linux
namespaces</a>, the
foundation of “containers”, are such an example of an afterthought;
unprivileged user namespaces, which allow unprivileged users to benefit
from lightweight “container” virtualization, are still often disabled by
distros due to a lack of confidence. This is in sharp contrast with the
Hurd’s inherent unrestricted support for fine-grain virtualization: a
PID namespace is just another <code>proc</code> server, and file system name space
is just another root file system server, and so on. Container-like
lightweight virtualization is <em>native</em> on the Hurd.</p><p>Last but not least, with an eye on the security and transparency of free
software systems, a microkernel-based systems seems to naturally lend
itself well to bootstrapping from a reduced trusted base. This is one
of the topics <a href="https://guix.gnu.org/blog/2019/reproducible-builds-summit-5th-edition/">we discussed on the last Reproducible Builds
Summit</a>.</p><p>The question is not so much whether 2020 or 2021 will be the year of the
Hurd. It’s more about the kind of systems we want to <em>build</em>. A lot of
work remains to be done, but we think, in 2020 more than ever, that this
is a promising approach for the betterment of the security of our
systems and the freedom of users.</p><p>We also have to admit that this is an amazing system to hack on, even
more so when combined with Guix, so… happy hacking! :-)</p><h4>About GNU Guix</h4><p><a href="https://www.gnu.org/software/guix">GNU Guix</a> is a transactional package
manager and an advanced distribution of the GNU system that <a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html">respects
user
freedom</a>.
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, and AArch64 machines.</p><p>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 <a href="https://www.gnu.org/software/guile">Guile</a>
programming interfaces and extensions to the
<a href="http://schemers.org">Scheme</a> language.</p><h4>About the GNU Hurd</h4><p><a href="https://www.gnu.org/software/hurd">The GNU Hurd</a> is the GNU project's
replacement for the Unix kernel. It is a collection of servers that
run on the Mach microkernel to implement file systems, network
protocols, file access control, and other features that are
implemented by the Unix kernel or similar kernels (such as Linux).
<a href="https://www.gnu.org/software/hurd/hurd/documentation.html">More
info</a>.</p><p>The <a href="https://www.gnu.org/software/hurd/community/weblogs/antrik/hurd-mission-statement.html">mission of the GNU
Hurd</a>
project is to create a general-purpose kernel suitable for the GNU
operating system, which is viable for everyday use, and gives users
and programs as much control over their computing environment as
possible.</p>https://guix.gnu.org/blog/2020/deprecating-support-for-the-linux-kernel//Deprecating support for the Linux kernelJan (janneke) Nieuwenhuizen, Ludovic (civodul) Courtès, Marius (mbakke) Bakke, Ricardo (rekado) Wurmus2020-04-01T23:00:00Z2020-04-01T23:00:00Z Hey, this post was published on April 1st, so take it with a grain of
salt! Read the
followup
for some clarifications. After years in the
making ,
Guix recently gained support
for running natively on the GNU/Hurd operating system .
That means you will soon be able to replace... (kernel linux-libre) with (kernel hurd)
(initial-herd hurd) ...in your operating-system
declaration
and reboot into the future! Running on the Hurd was always a goal for Guix, and supporting multiple
kernels is a huge maintenance burden. …<blockquote><p><em>Hey, this post was published on April 1st, so take it with a grain of
salt! <a href="https://guix.gnu.org/blog/2020/a-hello-world-virtual-machine-running-the-hurd/">Read the
followup</a>
for some clarifications.</em></p></blockquote><p>After <a href="https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00379.html">years in the
making</a>,
Guix <a href="https://lists.gnu.org/archive/html/guix-devel/2020-03/msg00081.html">recently gained support</a>
for running natively on the <a href="https://www.gnu.org/software/hurd/">GNU/Hurd operating system</a>.
That means you will soon be able to replace...</p><pre><code>(kernel linux-libre)</code></pre><p>with</p><pre><code>(kernel hurd)
(initial-herd hurd)</code></pre><p>...in your <a href="https://guix.gnu.org/manual/en/guix.html#operating_002dsystem-Reference">operating-system
declaration</a>
and reboot into the future!</p><p>Running on the Hurd was always a goal for Guix, and supporting multiple
kernels is a huge maintenance burden. As such it is expected that the
upcoming Guix 1.1 release will be the last version featuring the
Linux-Libre kernel. Future versions of Guix System will run
exclusively on the Hurd, and we expect to remove Linux-Libre
entirely by Guix 2.0.</p><p>The Linux kernel will still be supported when using Guix on "foreign"
distributions, but it will be on a best-effort basis. We hope that
other distributions will follow suit and adopt the Hurd in order to
increase security and freedom for their users.</p><p>We provide a <a href="https://guix.gnu.org/guix-hurd-20200401.img.tar.xz">pre-built virtual machine image with the Hurd for
download</a> with
SHA256
<code>056e69ae4b5fe7a062b954a5be333332152caa150359c20253ef77152334c662</code>.</p><p>Here is how to get started:</p><pre><code>wget https://guix.gnu.org/guix-hurd-20200401.img.tar.xz
tar xf guix-hurd-20200401.img.tar.xz
guix environment --ad-hoc qemu -- \
qemu-system-i386 -enable-kvm -drive file=guix-hurd-20200401.img,cache=writeback -m 1G</code></pre><p>Log in as <code>root</code> without password. Then try <code>hello</code>, <code>guix describe</code>,
or <code>guix install linux-libre</code> to run Linux in userspace... We are
looking forward to your feedback!</p><h4>About GNU Guix</h4><p><a href="https://www.gnu.org/software/guix">GNU Guix</a> is a transactional package
manager and an advanced distribution of the GNU system that <a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html">respects
user
freedom</a>.
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, and AArch64 machines.</p><p>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 <a href="https://www.gnu.org/software/guile">Guile</a>
programming interfaces and extensions to the
<a href="http://schemers.org">Scheme</a> language.</p>https://guix.gnu.org/blog/2017/back-from-fosdem-2017//Back from FOSDEM 2017sirgazil2017-02-06T00:00:00+02002017-02-06T00:00:00+0200 FOSDEM 2017 concluded. This time, the GNU Guix community participated with 8 talks. An introduction to functional package management with GNU Guix DOWNLOAD VIDEO (WebM, 26 minutes) Speaker: Ricardo Wurmus Slides: guix-fosdem-intro-20170205.pdf Composing system services in GuixSD DOWNLOAD VIDEO (WebM, 43 minutes) Speaker: Ludovic Courtès Slides: guix-fosdem-composing-services-20170205.pdf Reproducible packaging and distribution of software with GNU Guix DOWNLOAD VIDEO (WebM, 29 minutes) …<p><a href="https://fosdem.org/2017/">FOSDEM 2017</a> concluded. This time, the GNU Guix community participated with 8 talks.</p><h3>An introduction to functional package management with GNU Guix</h3><video src="https://video.fosdem.org/2017/K.4.601/guixintroduction.vp8.webm" controls="controls"><div class="action-box centered-text"><a class="button-big" href="https://video.fosdem.org/2017/K.4.601/guixintroduction.vp8.webm">DOWNLOAD VIDEO</a><p>(WebM, 26 minutes)</p></div></video><ul><li>Speaker: Ricardo Wurmus</li><li>Slides: <a href="https://www.gnu.org/software/guix/guix-fosdem-intro-20170205.pdf">guix-fosdem-intro-20170205.pdf</a></li></ul><h3>Composing system services in GuixSD</h3><video src="https://video.fosdem.org/2017/K.4.601/composingsystemservicesinguixsd.vp8.webm" controls="controls"><div class="action-box centered-text"><a class="button-big" href="https://video.fosdem.org/2017/K.4.601/composingsystemservicesinguixsd.vp8.webm">DOWNLOAD VIDEO</a><p>(WebM, 43 minutes)</p></div></video><ul><li>Speaker: Ludovic Courtès</li><li>Slides: <a href="https://www.gnu.org/software/guix/guix-fosdem-composing-services-20170205.pdf">guix-fosdem-composing-services-20170205.pdf</a></li></ul><h3>Reproducible packaging and distribution of software with GNU Guix</h3><video src="https://video.fosdem.org/2017/K.4.601/guixpackages.vp8.webm" controls="controls"><div class="action-box centered-text"><a class="button-big" href="https://video.fosdem.org/2017/K.4.601/guixpackages.vp8.webm">DOWNLOAD VIDEO</a><p>(WebM, 29 minutes)</p></div></video><ul><li>Speaker: Pjotr Prins</li><li>Slides: <a href="https://www.gnu.org/software/guix/guix-fosdem-packaging-20170205.pdf">guix-fosdem-packaging-20170205.pdf</a></li></ul><h3>Mes—Maxwell's Equations of Software</h3><video src="https://mirrors.dotsrc.org/fosdem/2017/K.4.601/guixsdbootstrap.vp8.webm" controls="controls"><div class="action-box centered-text"><a class="button-big" href="https://mirrors.dotsrc.org/fosdem/2017/K.4.601/guixsdbootstrap.vp8.webm">DOWNLOAD VIDEO</a><p>(WebM, 28 minutes)</p></div></video><ul><li>Speaker: Jan Nieuwenhuizen</li><li>Slides: <a href="https://www.gnu.org/software/guix/guix-fosdem-mes-20170205.pdf">guix-fosdem-mes-20170205.pdf</a></li></ul><h3>Adding GNU/Hurd support to GNU Guix and GuixSD</h3><video src="http://mirror.onet.pl/pub/mirrors/video.fosdem.org/2017/K.4.601/guixhurd.vp8.webm" controls="controls"><div class="action-box centered-text"><a class="button-big" href="http://mirror.onet.pl/pub/mirrors/video.fosdem.org/2017/K.4.601/guixhurd.vp8.webm">DOWNLOAD VIDEO</a><p>(WebM, 30 minutes)</p></div></video><ul><li>Speaker: Manolis Ragkousis</li><li>Slides: <a href="https://www.gnu.org/software/guix/guix-fosdem-hurd-20170205.pdf">guix-fosdem-hurd-20170205.pdf</a></li></ul><h3>Workflow management with GNU Guix</h3><video src="https://mirrors.dotsrc.org/fosdem/2017/K.4.601/guixworkflowmanagement.vp8.webm" controls="controls"><div class="action-box centered-text"><a class="button-big" href="https://mirrors.dotsrc.org/fosdem/2017/K.4.601/guixworkflowmanagement.vp8.webm">DOWNLOAD VIDEO</a><p>(WebM, 20 minutes)</p></div></video><ul><li>Speaker: Roel Janssen</li><li>Slides: <a href="https://www.gnu.org/software/guix/guix-fosdem-workflow-management-20170205.pdf">guix-fosdem-workflow-management-20170205.pdf</a></li></ul><h3>Optimized and reproducible HPC Software deployment</h3><video src="https://video.fosdem.org/2017/H.2213/hpc_deployment_guix.vp8.webm" controls="controls"><div class="action-box centered-text"><a class="button-big" href="https://video.fosdem.org/2017/H.2213/hpc_deployment_guix.vp8.webm">DOWNLOAD VIDEO</a><p>(WebM, 26 minutes)</p></div></video><ul><li>Speakers: Pjotr Prins and Ludovic Courtès</li><li>Slides: <a href="https://www.gnu.org/software/guix/guix-fosdem-hpc-part1-20170204.pdf">guix-fosdem-hpc-part1-20170204.pdf</a>, <a href="https://www.gnu.org/software/guix/guix-fosdem-hpc-part2-20170204.pdf">guix-fosdem-hpc-part2-20170204.pdf</a></li></ul><h3>The future of Guix</h3><video src="http://bofh.nikhef.nl/events/FOSDEM/2017/K.4.601/futureofguix.vp8.webm" controls="controls"><div class="action-box centered-text"><a class="button-big" href="http://bofh.nikhef.nl/events/FOSDEM/2017/K.4.601/futureofguix.vp8.webm">DOWNLOAD VIDEO</a><p>(WebM, 48 minutes)</p></div></video><ul><li>Speakers: Christopher Webber, Ludovic Courtès, Pjotr Prins, Ricardo Wurmus</li></ul>https://guix.gnu.org/blog/2016/meet-guix-at-fosdem//Meet Guix at FOSDEM!Ludovic Courtès2016-01-22T00:00:00+01002016-01-22T00:00:00+0100 One week to FOSDEM ! This year, there will be no less than six Guix-related talks. This and the fact that we are addressing different communities is exciting. First, on Saturday morning, in the GNU Guile track (room K.3.201): Adding GNU/Hurd support to GNU Guix (Manolis Ragkousis)
A gentle introduction to functional package management with GNU Guix (Ricardo Wurmus)
Your distro is a Scheme library (Ludovic Courtès)
Foreign packages in GNU Guix (Pjotr Prins)
…<div><p>One week to <a href="https://fosdem.org/2016">FOSDEM</a>! This year, there will be no less than six Guix-related talks. This and the fact that we are addressing different communities is exciting.<br /></p><p>First, on Saturday morning, in the <a href="https://fosdem.org/2016/schedule/track/gnu_guile/">GNU Guile track</a> (room K.3.201):<br /></p><ul><li><a href="https://fosdem.org/2016/schedule/event/guixhurd/">Adding GNU/Hurd support to GNU Guix</a> (Manolis Ragkousis)
</li><li><a href="https://fosdem.org/2016/schedule/event/guix/">A gentle introduction to functional package management with GNU Guix</a> (Ricardo Wurmus)
</li><li><a href="https://fosdem.org/2016/schedule/event/guixdistro/">Your distro is a Scheme library</a> (Ludovic Courtès)
</li><li><a href="https://fosdem.org/2016/schedule/event/guixmodules/">Foreign packages in GNU Guix</a> (Pjotr Prins)
</li></ul><p>On Saturday afternoon:<br /></p><ul><li><a href="https://fosdem.org/2016/schedule/event/deployments_with_gnu_guix/">Reproducible and Customizable Deployments with GNU Guix</a> (Ludovic Courtès, <a href="https://fosdem.org/2016/schedule/track/distributions/">distributions track</a>, room K.4.201)
</li><li><a href="https://fosdem.org/2016/schedule/event/guix_tox/">Guix-tox, a functional version of tox</a> (Cyril Roelandt, <a href="https://fosdem.org/2016/schedule/track/python/">Python track</a>, room UD2.218A)
</li></ul><p>On Sunday noon:<br /></p><ul><li><a href="https://fosdem.org/2016/schedule/event/hpc_bigdata_gnu_guix/">Reproducible and User-Controlled Package Management in HPC with GNU Guix</a> (Ricardo Wurmus, <a href="https://fosdem.org/2016/schedule/track/hpc,_big_data_and_data_science/">HPC track</a>, room AW1.126)
</li></ul><p>See you there!<br /></p><h4>About GNU Guix</h4><p><a href="http://www.gnu.org/software/guix">GNU Guix</a> is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and <a href="http://www.gnu.org/distros/free-system-distribution-guidelines.html">respects the user's freedom</a>.<br /></p><p>In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native <a href="http://www.gnu.org/software/guile">Guile</a> modules, using extensions to the <a href="http://schemers.org">Scheme</a> language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable.<br /></p><p>GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7.<br /></p></div>https://guix.gnu.org/blog/2015/porting-guix-and-guixsd//Porting Guix and GuixSDLudovic Courtès2015-09-07T00:00:00+02002015-09-07T00:00:00+0200 Quite a lot has happened lately when it comes to porting Guix and GuixSD to other systems. A few weeks ago, Manolis Ragkousis announced the completion of the GSoC project whose purpose was to port Guix to the Hurd. The system distribution, GuixSD, cannot run GNU/Hurd yet, but the package manager itself can both cross-compile from GNU/Linux to GNU/Hurd and build natively on GNU/Hurd. The work of Manolis is being gradually merged in the main branch. More recently, Mark H Weaver posted a series of patches…<div><p>Quite a lot has happened lately when it comes to porting Guix and GuixSD to other systems.<br /></p><p>A few weeks ago, Manolis Ragkousis <a href="https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00379.html">announced</a> the completion of the GSoC project whose purpose was to port Guix to the Hurd. The system distribution, GuixSD, cannot run GNU/Hurd yet, but the package manager itself can both cross-compile from GNU/Linux to GNU/Hurd and build natively on GNU/Hurd. The work of Manolis is being gradually merged in the main branch.<br /></p><p>More recently, Mark H Weaver <a href="https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00500.html">posted</a> a series of patches porting GuixSD to MIPS (Lemote Yeeloong), making it the first GuixSD port to non-Intel-compatible hardware (the package manager itself has supported mips64el <a href="/news/distro-of-the-linux-based-gnu-system-ported-to-mips.html">for two years</a> already.) By removing several platform-specific assumptions, this work paves the way for future ports.<br /></p><p>Lastly, we are glad to report the <a href="http://www.gnu.org/software/guix/donate/">donation</a> of <a href="https://lists.gnu.org/archive/html/guix-devel/2015-09/msg00134.html">two ARM machines</a> for our build farm. They will allow us to continuously test the ARM port, which was completed <a href="/news/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.html">earlier this year</a>, and to publish pre-built binaries on our <a href="http://hydra.gnu.org/jobset/gnu/master">build farm</a>. We are grateful to the donors whose contribution makes a big difference for the development of Guix on ARM. If you would like to help out with hardware and/or hosting, <a href="http://www.gnu.org/software/guix/donate/">please get in touch</a>!<br /></p><h4>About GNU Guix</h4><p><a href="http://www.gnu.org/software/guix">GNU Guix</a> is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and <a href="http://www.gnu.org/distros/free-system-distribution-guidelines.html">respects the user's freedom</a>.<br /></p><p>In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native <a href="http://www.gnu.org/software/guile">Guile</a> modules, using extensions to the <a href="http://schemers.org">Scheme</a> language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable.<br /></p><p>GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7.<br /></p></div>https://guix.gnu.org/blog/2015/gsoc-update//GSoC updateLudovic Courtès2015-07-19T00:00:00+02002015-07-19T00:00:00+0200 This year Guix was lucky to have 3 GSoC projects , and they have made rather good progress so far: Manolis successfully completed the recipes to get a cross-compilation toolchain to GNU/Hurd , with part of the work already in the main branch. This allowed him to produce statically-linked bootstrap binaries (stumbling upon nasty ld.so issues on the way.) Manolis is now running Guix and building packages natively on GNU/Hurd, which will constitute a large part of the remainder of his project.
Rémi has written Guile…<div><p>This year Guix was lucky to have <a href="/news/gnu-guix-welcomes-three-students-for-gsoc.html">3 GSoC projects</a>, and they have made rather good progress so far:<br /></p><ul><li>Manolis successfully completed the recipes to get a <a href="http://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-hurd">cross-compilation toolchain to GNU/Hurd</a>, with part of the work already in the main branch. This allowed him to produce statically-linked bootstrap binaries (stumbling upon nasty ld.so issues on the way.) Manolis is now <a href="http://lists.gnu.org/archive/html/guix-devel/2015-07/msg00029.html">running Guix and building packages natively</a> on GNU/Hurd, which will constitute a large part of the remainder of his project.
</li><li>Rémi has written <a href="http://git.savannah.gnu.org/cgit/guix/gnunet.git/tree/">Guile bindings</a> to crucial parts of the <a href="https://gnunet.org">GNUnet</a> API, including the file sharing API. This will allow him to move to the next step: Writing <a href="http://lists.gnu.org/archive/html/guix-devel/2015-07/msg00033.html">tools to publish and retrieve</a> Guix <a href="http://www.gnu.org/software/guix/manual/en/html_node/Substitutes.html">substitutes</a> (pre-built binaries.)
</li><li>Rohan laid the foundations of the <a href="http://git.savannah.gnu.org/cgit/guix/dhcp.git/tree/">DHCP client</a>. The current code can send packets on all the configured network interfaces. Rohan hopes to have working code to establish leases in the following weeks.
</li></ul><p>Happy hacking!<br /></p><h4>About GNU Guix</h4><p><a href="http://www.gnu.org/software/guix">GNU Guix</a> is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and <a href="http://www.gnu.org/distros/free-system-distribution-guidelines.html">respects the user's freedom</a>.<br /></p><p>In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native <a href="http://www.gnu.org/software/guile">Guile</a> modules, using extensions to the <a href="http://schemers.org">Scheme</a> language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable.<br /></p><p>GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7.<br /></p></div>https://guix.gnu.org/blog/2015/gnu-guix-welcomes-three-students-for-gsoc//GNU Guix welcomes three students for GSoCLudovic Courtès2015-05-02T00:00:00+02002015-05-02T00:00:00+0200 GNU Guix got 3 slots for the Google Summer of Code (GSoC), as part of GNU, which participates as an organization. So we are pleased to welcome three students this summer: Rohan will work on a DHCP client written in Guile Scheme, with the goal of making it easy to integrate it with GNU dmd ;
Manolis will be able to keep working on porting Guix to GNU/Hurd , with the eventual goal of being able to run GuixSD on GNU/Hurd ;
Rémi will work…<div><p>GNU Guix got 3 slots for the Google Summer of Code (GSoC), as part of GNU, which participates as an organization. So we are pleased to welcome three students this summer:<br /></p><ul><li>Rohan <a href="http://lists.gnu.org/archive/html/guix-devel/2015-04/msg00559.html">will work on a DHCP client</a> written in Guile Scheme, with the goal of making it easy to integrate it with <a href="http://www.gnu.org/software/dmd/">GNU dmd</a>;
</li><li>Manolis will be able to <a href="http://lists.gnu.org/archive/html/guix-devel/2015-04/msg00560.html">keep working on porting Guix to GNU/Hurd</a>, with the eventual goal of being able to run GuixSD on <a href="http://hurd.gnu.org">GNU/Hurd</a>;
</li><li>Rémi <a href="http://lists.gnu.org/archive/html/guix-devel/2015-04/msg00562.html">will work on peer-to-peer software distribution</a> over <a href="http://gnunet.org/">GNUnet</a>.
</li></ul><p>All three projects have very exciting prospects and we are thrilled to get them started! We are also glad that this allows us to strengthen ties with several other GNU packages.<br /></p><h4>About GNU Guix</h4><p><a href="http://www.gnu.org/software/guix">GNU Guix</a> is a functional package manager for the GNU system. The Guix System Distribution (GuixSD) is an advanced distribution of the GNU system that relies on GNU Guix.<br /></p><p>In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. It also offers a declarative approach to operating system configuration management. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native <a href="http://www.gnu.org/software/guile">Guile</a> modules, using extensions to the <a href="http://schemers.org">Scheme</a> language.<br /></p><p>At this stage the Guix System Distribution can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7.<br /></p></div>https://guix.gnu.org/blog/2014/guix-at-the-2014-gnu-hackers-meeting//Guix at the 2014 GNU Hackers MeetingLudovic Courtès2014-10-11T00:00:00+02002014-10-11T00:00:00+0200 The Guix talk of this summer's GNU Hackers Meeting is now available (get the slides ). DOWNLOAD VIDEO (WebM, 60 minutes) It gives an introduction to Guix from a user's viewpoint, and covers topics such as features for GNU maintainers, programming interfaces, declarative operating system configuration, status of the GNU/Hurd port, and the new Emacs and Web interfaces---with a bunch of demos. Do not miss other fine talks from the GHM . Many thanks to everyone who took care of the video recordings. …<p>The Guix talk of this summer's GNU Hackers Meeting is now available (get the <a href="https://www.gnu.org/software/guix/guix-ghm-20140815.pdf">slides</a>).</p><video src="https://audio-video.gnu.org/video/ghm2014/2014-08--courtes--were-building-the-gnu-system--ghm.webm" controls="controls"><div class="action-box centered-text"><a class="button-big" href="https://audio-video.gnu.org/video/ghm2014/2014-08--courtes--were-building-the-gnu-system--ghm.webm">DOWNLOAD VIDEO</a><p>(WebM, 60 minutes)</p></div></video><p>It gives an introduction to Guix from a user's viewpoint, and covers topics such as features for GNU maintainers, programming interfaces, declarative operating system configuration, status of the GNU/Hurd port, and the new Emacs and Web interfaces---with a bunch of demos.</p><p>Do not miss <a href="http://audio-video.gnu.org/video/ghm2014/">other fine talks from the GHM</a>. Many thanks to everyone who took care of the video recordings.</p>