<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>joyofsource.com</title><id>https://joyofsource.com/feed.xml</id><subtitle>Recent Posts</subtitle><updated>2026-03-12T05:44:11Z</updated><link href="https://joyofsource.com/feed.xml" rel="self" /><link href="https://joyofsource.com" /><entry><title>The 64-bit Hurd is Here!</title><id>https://joyofsource.com/the-64-bit-hurd.html</id><author><name>Janneke Nieuwenhuizen, Yelninei</name><email>janneke@gnu.org</email></author><updated>2026-03-01T10:00:00Z</updated><link href="https://joyofsource.com/the-64-bit-hurd.html" rel="alternate" /><content type="html">&lt;p&gt;Fifteen months have passed since our last &lt;a href=&quot;https://guix.gnu.org/en/blog/2024/hurd-on-thinkpad/&quot;&gt;Guix/Hurd on a Thinkpad X60
&lt;/a&gt; post and a lot
has happened with respect to &lt;a href=&quot;https://hurd.gnu.org&quot;&gt;the Hurd&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;And most of you will have guessed, unless you skipped the title of
this post, the &lt;a href=&quot;https://logs.guix.gnu.org/guix/2023-09-16.log#163627&quot;&gt;rumored x86_64
support&lt;/a&gt; has
landed in Guix!&lt;/p&gt;&lt;p&gt;Here is a not-so-short overview of our Hurd work over the past 1.5 years:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://issues.guix.gnu.org/73181&quot;&gt;build daemon fails when invoking &lt;code&gt;guix authenticate&lt;/code&gt; on the
Hurd&lt;/a&gt; bug was fixed.  This was our
most pressing problem as it meant that we could not keep our
substitutes up to date.  It took 15 comments and 13 weeks to get it
resolved.  Phew!&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Installer support for &lt;a href=&quot;https://issues.guix.gnu.org/73927&quot;&gt;(cross)-installing the
Hurd&lt;/a&gt;.  Also adding developer
support for running the installer directly from the source tree;
Guix 1.5.0 lets you &lt;a href=&quot;https://guix.gnu.org/en/blog/2024/hurd-on-thinkpad/&quot;&gt;install the Hurd on bare
metal&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Fix &lt;a href=&quot;https://issues.guix.gnu.org/77634&quot;&gt;tests in the Shepherd&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Update &lt;a href=&quot;https://issues.guix.gnu.org/78241&quot;&gt;hurd to 0.9.git20250420, gnumach to
1.8+git20250304&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Add &lt;a href=&quot;https://issues.guix.gnu.org/78349&quot;&gt;support for a cross-built
gnumach&lt;/a&gt;, allowing the removal
of an ugly workaround when cross-building for the Hurd.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Update &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/340&quot;&gt;rumpkernel to
0-20250111&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Support for &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/2329&quot;&gt;different childhurd
types&lt;/a&gt;, a.k.a. &lt;a href=&quot;https://toot.aquilenet.fr/@civodul/115122971554942237&quot;&gt;64-bit
childhurds in da
house&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The syslogd used by default is now from the Shepherd &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/2659&quot;&gt;streamio,
gnumach&lt;/a&gt;, and &lt;a href=&quot;https://codeberg.org/shepherd/shepherd/pulls/67&quot;&gt;the
Shepherd&lt;/a&gt;, to make
the kernel log work.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Update &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/3605&quot;&gt;hurd to 0.9.git20251029, gnumach: to
1.8+git20250731&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Now that the &lt;code&gt;go-team&lt;/code&gt; branch has been merged, &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/4477&quot;&gt;gccgo now
works&lt;/a&gt; (native only).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Fix &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/4822&quot;&gt;proc server for zombie
processes&lt;/a&gt; which caused a
shepherd test to fail.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Fix all the dependencies of the &lt;code&gt;guix&lt;/code&gt; package, again:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://codeberg.org/guix/guix/pulls/4860&quot;&gt;libgit2 tests&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://codeberg.org/guix/guix/pulls/5308&quot;&gt;dbus, opensp, po4a&lt;/a&gt;,&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Resurrect &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/5543&quot;&gt;password hashing&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Installer: &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/5537&quot;&gt;Fixes for the
Hurd&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Installer: &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/5555&quot;&gt;More clearly mark the Hurd as
experimental&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Installer: &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/5515&quot;&gt;Add Hurd x86_64 as an
option&lt;/a&gt;.  This took 15
comments, uncovering and fixing several bugs.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Add &lt;a href=&quot;https://issues.guix.gnu.org/74290&quot;&gt;support for &lt;code&gt;x86_64-gnu&lt;/code&gt;, aka the 64-bit
Hurd&lt;/a&gt;.  The initial patch
set consisted of 31 patches.  This patch
&lt;a href=&quot;https://issues.guix.gnu.org/74290#37&quot;&gt;set&lt;/a&gt;
&lt;a href=&quot;https://issues.guix.gnu.org/74290#92&quot;&gt;took&lt;/a&gt;
&lt;a href=&quot;https://issues.guix.gnu.org/74290#147&quot;&gt;four&lt;/a&gt; iterations and &lt;a href=&quot;https://issues.guix.gnu.org/74290#208&quot;&gt;208
messages&lt;/a&gt; before its &lt;a href=&quot;https://issues.guix.gnu.org/74290#147&quot;&gt;final
58 patches&lt;/a&gt; were merged to
`core-packages-team'.  Janneke writes: &amp;quot;Lo and behold, the 64-bit
Hurd boots!  Again, thanks to the help from the kind folks over at
libera #hurd and their excellent work.  Do something like:&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;code&gt;./pre-inst-env guix system image --image-type=hurd64-qcow2 \
  gnu/system/examples/bare-hurd64.tmpl

Pushed a `core-packages-team' with (this one) GCC 14 commit.  Let the
fun begin :)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We had a lot of fun...&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Request for &lt;a href=&quot;https://issues.guix.gnu.org/75518&quot;&gt;merging &amp;quot;core-packages-team&amp;quot;
branch&lt;/a&gt;: 247 commits, took &lt;a href=&quot;https://issues.guix.gnu.org/75518#114&quot;&gt;114
comments&lt;/a&gt; &lt;a href=&quot;https://gitlab.com/janneke/guix/-/commits/core-packages-team1&quot;&gt;8
weeks&lt;/a&gt;
and 24 iterations with &lt;a href=&quot;https://gitlab.com/janneke/guix/-/commits/core-packages-team24&quot;&gt;247 commits from 9
people&lt;/a&gt;
before presenting the initial merge.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The actual &lt;a href=&quot;https://gitlab.com/janneke/guix/-/commits/core-packages-team36&quot;&gt;merge
&amp;quot;core-packages-team&amp;quot;&lt;/a&gt;:
85 more commits to a total of 332, by 17 people and 27 weeks
before actual merge.  173 packages with build fixes to relax
GCC 14's strictness, 109 package updates to fix build with GCC 14.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;With this all in place we can &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/6176&quot;&gt;have ci build a 64-bit hurd
image&lt;/a&gt;, and&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Report &lt;a href=&quot;https://ci.guix.gnu.org/eval/2139185/dashboard?system=x86_64-gnu&quot;&gt;what packages still need to be
fixed&lt;/a&gt;
for that image to build.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;For convenience we &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/4791&quot;&gt;added &lt;code&gt;i586-pc-gnu&lt;/code&gt; and &lt;code&gt;x86_64-pc-gnu&lt;/code&gt; cross
toolchains&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Summarizing, building the Guix manifest for the 32-bit Hurd
(&lt;code&gt;i586-gnu&lt;/code&gt;) should work really well.  Sadly, for the 64-bit Hurd
(&lt;code&gt;x86_64-gnu&lt;/code&gt;) is still a bit problematic as some tests in e.g.,
&lt;code&gt;openssl&lt;/code&gt;, &lt;code&gt;python&lt;/code&gt;, &lt;code&gt;cmake&lt;/code&gt;, .... hang.  This is still under
investigation.&lt;/p&gt;&lt;h1&gt;What Took You So Long?&lt;/h1&gt;&lt;p&gt;We're so glad you asked!  Usually, adding a new architecture should
just take &lt;a href=&quot;/static/blog/64-bit-hurd.text&quot;&gt;a couple of commits&lt;/a&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Add &lt;a href=&quot;https://codeberg.org/guix/guix/commit/94dfb68d4378377dfe49d6653e4ed668cecd2783&quot;&gt;cross-compilation support for the &lt;code&gt;x86_64-pc-gnu&lt;/code&gt; target, aka
64-bit
Hurd&lt;/a&gt;,
and then&lt;/li&gt;&lt;li&gt;Add &lt;a href=&quot;https://codeberg.org/guix/guix/commit/4d9c5984fee481d74c2f504094b4797bbb4104d4&quot;&gt;support for &lt;code&gt;x86_64-gnu&lt;/code&gt;, aka the 64-bit
Hurd&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;pretty neat, right?  So, what's the story with the 64-bit Hurd?  There
are two problems: 64-bit Hurd support was &lt;a href=&quot;https://gcc.gnu.org/gcc-14/changes.html&quot;&gt;added in GCC
14&lt;/a&gt;, while Guix was still at
GCC 11.  This means we &amp;quot;only&amp;quot; had to&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Update &lt;a href=&quot;https://codeberg.org/guix/guix/commit/d6780d79d936832e1b2ea9103eefecd0a838fb16&quot;&gt;the gcc cross compiler to
GCC 14&lt;/a&gt;
(one, simple commit), and&lt;/li&gt;&lt;li&gt;Fix all cross builds (initially &lt;a href=&quot;https://codeberg.org/guix/guix/commits/commit/ec8a5ec15f898e864705e5a5c834532e3fa8d0a4&quot;&gt;&amp;quot;just&amp;quot; 23
commits&lt;/a&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The second step involves building for all architectures and fixing all
breakage.  Sometimes, fixing one architecture breaks another.&lt;/p&gt;&lt;p&gt;When Guix supported cross-building with &lt;code&gt;GCC 14&lt;/code&gt;, and supported the
64-bit Hurd, we could create and boot a 64-bit childhurd.  After that,
we could start building 64-bit Hurd packages...but only after also&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Use &lt;a href=&quot;https://codeberg.org/guix/guix/commit/a82e75d807f500560e5104cd9b3f3263515750bd&quot;&gt;gcc-14, gcc-toolchain-14 on the 64-bit
Hurd&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This, however does not support offloading.  For that, &lt;a href=&quot;/static/blog/gcc-14-initial.text&quot;&gt;we would need
to&lt;/a&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Update &lt;a href=&quot;https://codeberg.org/guix/guix/commit/84f665f8d1cad5d8bc6013f5cc8ba8f12578c494&quot;&gt;gcc, gcc-toolchain, libgccjit to 14&lt;/a&gt;, and&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Make sure that all &lt;a href=&quot;https://codeberg.org/guix/guix/src/branch/master/gnu/packages/commencement.scm&quot;&gt;packages in
&lt;code&gt;commencement.scm&lt;/code&gt;&lt;/a&gt;
successfully build natively on &lt;code&gt;x86_64-hurd&lt;/code&gt;, which took &lt;a href=&quot;https://codeberg.org/guix/guix/commits/commit/d9bb372453cc74f8da7a475d688aabce47e6a14d&quot;&gt;only
some 35
commits&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This can simply be verified by building the &lt;code&gt;hello&lt;/code&gt; package:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix build --system=x86_64-gnu hello&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;However, GCC 14 is not a regular update: it is &lt;a href=&quot;https://gcc.gnu.org/gcc-14/porting_to.html&quot;&gt;waaay more
strict&lt;/a&gt; with respect to C
code compilation.  This means that, before actually switching, we had
to fix 173 package builds and update another 109 packages to not break
all of Guix.  This took a &lt;a href=&quot;/static/blog/gcc-14-final.text&quot;&gt;total of 17 people and 35
weeks&lt;/a&gt; to complete.&lt;/p&gt;&lt;p&gt;You can understand that we are excited that the &lt;a href=&quot;https://nlnet.nl&quot;&gt;NLnet
Foundation&lt;/a&gt; has been &lt;a href=&quot;https://nlnet.nl/project/Guix-Hurd/&quot;&gt;sponsoring this
work&lt;/a&gt;!&lt;/p&gt;&lt;h1&gt;Installing and Using the 64-bit Hurd&lt;/h1&gt;&lt;p&gt;Easiest is to change your 32-bit childhurd definition into 64-bit, by
adding&lt;/p&gt;&lt;pre&gt;&lt;code&gt;(type 'hurd64-qcow2)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;to your &lt;code&gt;hurd-vm-configuration&lt;/code&gt;.  And if you don't have a
&lt;code&gt;hurd-vm-configuration&lt;/code&gt; yet?.  Easy, in that case just add&lt;/p&gt;&lt;pre&gt;&lt;code&gt;(use-service-modules virtualization)
[..]
(hurd-vm-configuration
  (type 'hurd64-qcow2))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;into your your &lt;code&gt;hurd-vm-service-type&lt;/code&gt; definition&lt;a href=&quot;#0&quot;&gt;[^0]&lt;/a&gt;.  And if you
don't have a &lt;code&gt;hurd-vm-service-type&lt;/code&gt; yet?  Easy, in that case just add&lt;/p&gt;&lt;pre&gt;&lt;code&gt;(use-service-modules virtualization)
[..]
(service hurd-vm-service-type
         (hurd-vm-configuration
           (type 'hurd64-qcow2)))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;to your operating system definition.  Reconfigure your system and
you'd be able to:&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/static/blog/img/the-64-bit-hurd.gif&quot; alt=&quot;This 64-bit Hurd is fully operational&quot; /&gt;&lt;/p&gt;&lt;p&gt;(if you don't have a &lt;a href=&quot;/static/blog/ssh-childhurd-config.text&quot;&gt;&lt;code&gt;childhurd&lt;/code&gt;
definition&lt;/a&gt; in your
&lt;code&gt;~/.ssh/config&lt;/code&gt; you will have to use something like: &lt;code&gt;ssh -p 10022 root@localhost&lt;/code&gt;&lt;a href=&quot;#1&quot;&gt;[^1]&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;And if you don't have a Guix operating system definition...The 64-bit
Hurd is now an option in the installer:&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/static/blog/img/installer-kernel-page-hurd64.png&quot; alt=&quot;Installer kernel page&quot; /&gt;&lt;/p&gt;&lt;p&gt;and can be installed in a VM.  Make &lt;a href=&quot;https://lists.nongnu.org/archive/html/bug-hurd/2025-11/msg00017.html&quot;&gt;sure to use &lt;code&gt;--machine q35&lt;/code&gt;&lt;/a&gt;
with qemu.&lt;/p&gt;&lt;p&gt;To build a disk image for a virtual machine, do:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;./pre-inst-env guix system image --image-type=hurd64-qcow2 \
    gnu/system/examples/bare-hurd64.tmpl&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You may run it like so:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix shell qemu -- qemu-system-x86_64 -m 2048 -M q35       \
  --enable-kvm                                             \
  --device e1000,netdev=net0                               \
  --netdev user,id=net0,hostfwd=tcp:127.0.0.1:10022-:2222  \
  --snapshot                                               \
  --hda /gnu/store/...-disk-image&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(note that the 64-bit Hurd does not seem to show a login prompt)&lt;/p&gt;&lt;p&gt;and use it like:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ssh -p 10022 root@localhost
guix build -e '(@@ (gnu packages commencement) gnu-make-boot0)'&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;or even, if you build the image with at least --image-size=3G:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix build hello&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;RumpNET Support&lt;/h1&gt;&lt;p&gt;Upstream has &lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/hurd/hurd.git/commit/?id=1d5c92654b2ebd95bee4f2bc4690b883c468b1a4&quot;&gt;added support for Intel i8254x Gigabit
Ethernet&lt;/a&gt; using RumpNET.&lt;/p&gt;&lt;p&gt;Damien Zammit wrote:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;This adds a working rump driver for /dev/wmX cards, which are Intel
i8254x Gigabit Ethernet devices.  (See man.netbsd.org for &amp;quot;wm(4)&amp;quot;)
This should be easily extended to support other NICs by contributing
some makefile foo to netbsd/rump.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Example usage&lt;a href=&quot;#2&quot;&gt;[^2]&lt;/a&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;settrans -fgap /dev/rumpnet /hurd/rumpnet
settrans -fgap /dev/wm0 /hurd/devnode -M /dev/rumpnet wm0
settrans -fgap /servers/socket/2 /hurd/pfinet -i /dev/wm0
ifup /dev/wm0&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;With our updated hurd and rumpkernel packages, this should be
available in Guix now too.  Please let us know if you got it to work!
(If you tried and didn't get it to work, we'd also like to know!)&lt;/p&gt;&lt;h1&gt;Status&lt;/h1&gt;&lt;p&gt;One of the &lt;a href=&quot;https://cosocial.ca/@mpjgregoire/116023456946594444&quot;&gt;most frequently asked questions
&lt;/a&gt; is probably:
Does X work on the Hurd yet?  The canonical answer to that question
is: Please read the &lt;a href=&quot;https://darnassus.sceen.net/~hurd-web/faq/&quot;&gt;GNU/Hurd
FAQ&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;A good summary of the current status was presented by Samuel Thibault
in his &lt;a href=&quot;https://fosdem.org/2026/schedule/event/7FZXHF-updates_on_gnuhurd_progress_rump_drivers_64bit_smp_software_bootstrapping/&quot;&gt;GNU/Hurd
progress&lt;/a&gt;
at &lt;a href=&quot;https://fosdem.org/2026&quot;&gt;FOSDEM'26&lt;/a&gt;, in which he also makes
compelling arguments for the Hurd, such as: Freedom from the system
administrator and sharing the GNU heritage and values it's no
coincidence that Guix also solves a part of that problem, allowing any
user to install packages.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://wiki.debian.org/Debian_GNU/Hurd&quot;&gt;Debian GNU/Hurd&lt;/a&gt; has been a
reality for some years now, reaching 75% of Debian packages being
available for the Hurd.&lt;/p&gt;&lt;p&gt;As a comparison, in Guix only about &lt;a href=&quot;/static/blog/guix-1.5-weather-i586-gnu.text&quot;&gt;1.7%
(32-bit)&lt;/a&gt; and &lt;a href=&quot;/static/blog/guix-1.5-weather-x86_64-gnu.text&quot;&gt;0.9%
(64-bit)&lt;/a&gt; of packages
are available for the Hurd.  These percentages fluctuate a bit but
continue to grow (both grew with a couple tenth percent point during
the preparation of this blog post), and as always, might grow faster
with your help.&lt;/p&gt;&lt;p&gt;So while Guix GNU/Hurd has an exciting future, please be aware that it
lacks many packages and services, including Xorg.&lt;/p&gt;&lt;p&gt;If you would simply like to install the Hurd on bare metal running
your favorite window manager (e.g.: i3, icewm, etc.)  or lightweight
desktop environment (Xfce) right now, then &lt;a href=&quot;https://cdimage.debian.org/cdimage/ports/latest/hurd-i386/20220824/&quot;&gt;installing Debian
GNU/Hurd&lt;/a&gt;
is a good choice.  Though we hope to catch up to them soon!&lt;/p&gt;&lt;p&gt;Last October, the 64-bit Hurd &lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2025-10/msg00001.html&quot;&gt;was reported to
run&lt;/a&gt;
on bare metal.  Now that Guix 1.5.0's installer also lets you &lt;a href=&quot;https://guix.gnu.org/en/blog/2024/hurd-on-thinkpad/&quot;&gt;install
the Hurd on bare
metal&lt;/a&gt;, we'd be
thrilled to year from you if you manage to replicate this!&lt;/p&gt;&lt;h1&gt;What's Next?&lt;/h1&gt;&lt;p&gt;In &lt;a href=&quot;https://guix.gnu.org/en/blog/2020/a-hello-world-virtual-machine-running-the-hurd/&quot;&gt;an earlier
post&lt;/a&gt;
we tried to answer the question “Why bother with the Hurd anyway?”  An
obvious question because it is &lt;a href=&quot;https://xkcd.com/1508&quot;&gt;all too easy to get
discouraged&lt;/a&gt;, to downplay or underestimate the
potential social impact of GNU and the Hurd.&lt;/p&gt;&lt;p&gt;Echoing Samuel Thibault's talk we would like to add: because it offers
a better:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/philosophy/philosophy.html&quot;&gt;Freedom #0&lt;/a&gt;: the
freedom to run the program as you wish, for any purpose.&lt;/li&gt;&lt;li&gt;Freedom from the System Administrator.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;code&gt;guix pull&lt;/code&gt; is known to work but only by pulling from a local branch
doing something like:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;mkdir -p src/guix
cd src/guix
git clone https://git.guix.gnu.org/guix.git master
cd master
git branch keyring origin/keyring
guix pull --url=$HOME/src/guix/master&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;kinda like we did it in the old days.&lt;/p&gt;&lt;p&gt;Other interesting task for Guix include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Have &lt;code&gt;guix pull&lt;/code&gt; from a non-local URL work on the Hurd,&lt;/li&gt;&lt;li&gt;Have &lt;code&gt;guix system reconfigure&lt;/code&gt; work on the Hurd,&lt;/li&gt;&lt;li&gt;Figure out WiFi support with NetDDE (and add it to installer!),&lt;/li&gt;&lt;li&gt;Figure out WiFi support with RumpNET (and add it to installer!),&lt;/li&gt;&lt;li&gt;An &lt;a href=&quot;https://issues.guix.gnu.org/43857&quot;&gt;isolated build environment&lt;/a&gt;
(or better wait for, err, contribute to the &lt;a href=&quot;https://guix.gnu.org/en/blog/2023/a-build-daemon-in-guile/&quot;&gt;Guile build
daemon&lt;/a&gt;?),&lt;/li&gt;&lt;li&gt;An installer running the Hurd, and,&lt;/li&gt;&lt;li&gt;Packages, packages, packages!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;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.  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:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://nlnet.nl/project/Hurd-Audio/&quot;&gt;Audio support&lt;/a&gt; (this was
sponsored by &lt;a href=&quot;https://nlnet.nl&quot;&gt;NLnet&lt;/a&gt;, thanks!),&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2025-08/msg00048.html&quot;&gt;RumpNET&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2026-01/msg00199.html&quot;&gt;SMP&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2026-02/msg00010.html&quot;&gt;Journaling for &lt;code&gt;ext2&lt;/code&gt;&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2024-03/msg00114.html&quot;&gt;AArch64&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2025-04/msg00005.html&quot;&gt;RISC-V&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;With the exception maybe of adding RumpNET NICs, 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.&lt;/p&gt;&lt;h4&gt;SMP support for the 64-bit Hurd&lt;/h4&gt;&lt;p&gt;During the preparation of this blog post &lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2026-02/msg00101.html&quot;&gt;a patch set fixing SMP for
the 64-bit
Hurd&lt;/a&gt;,
(well, gnumach actually) was presented by Damien Zammit.  So most
probably we'll have 64-bit multiprocessing real soon now!  It seems
however, that we &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/6487&quot;&gt;will need new bootstrap
binaries&lt;/a&gt; for that.&lt;/p&gt;&lt;p&gt;Join &lt;code&gt;#guix&lt;/code&gt; and &lt;code&gt;#hurd&lt;/code&gt; on
&lt;a href=&quot;https://guix.gnu.org/en/contact/irc/&quot;&gt;&lt;code&gt;libera.chat&lt;/code&gt;&lt;/a&gt; or the &lt;a href=&quot;https://guix.gnu.org/en/contact&quot;&gt;mailing
lists&lt;/a&gt; and get involved!&lt;/p&gt;&lt;h5&gt;Footnotes&lt;/h5&gt;&lt;p&gt;&lt;a href=&quot;#0&quot;&gt;[0]&lt;/a&gt;: &lt;em&gt;Note: with an up-to-date &lt;code&gt;guix&lt;/code&gt; this is no longer necessary!&lt;/em&gt;&lt;br /&gt;Actually, as the 64-bit Hurd uses &lt;code&gt;rumpdisk&lt;/code&gt; exclusively, and
&lt;code&gt;gnumach&lt;/code&gt; by default uses still it builtin IDE drivers, we also
need to tell &lt;code&gt;gnumach&lt;/code&gt; about that by adding the &lt;code&gt;(kernel-arguments '(&amp;quot;noide&amp;quot;))&lt;/code&gt;.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;(use-service-modules virtualization)
[..]
(hurd-vm-configuration
  (type 'hurd64-qcow2)
  (os (operating-system
        (inherit %hurd-vm-operating-system)
        (kernel-arguments '(&amp;quot;noide&amp;quot;)))))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We expect this to be the the default in the future.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;[1]&lt;/a&gt;: You may have to override your childhurd's &lt;code&gt;openssh-service&lt;/code&gt;
definition, something like&lt;/p&gt;&lt;pre&gt;&lt;code&gt;(services
 (modify-services (operating-system-user-services %hurd-vm-operating-system)
   (openssh-service-type
    config =&amp;gt;
    (openssh-configuration
     (inherit config)
     (authorized-keys `((&amp;quot;root&amp;quot;
                         ,(local-file &amp;quot;/home/janneke/.ssh/janneke.pub&amp;quot;))))))))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;but you can also take inspiration from the &lt;a href=&quot;https://codeberg.org/guix/guix/src/commit/75db21a939f8e25c7df1be889c64d7d4c50fe847/gnu/system/examples/bare-hurd64.tmpl#L54&quot;&gt;&lt;code&gt;bare-hurd64.tmpl&lt;/code&gt;
template&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;[2]&lt;/a&gt;: Note that while is comes straight from a commit to the Hurd git
repository, this is a Debian-specific recipe, Guix does not have
&lt;code&gt;ifup&lt;/code&gt;, and per &lt;a href=&quot;https://darnassus.sceen.net/~hurd-web/hurd/rump/rumpnet&quot;&gt;this updated wiki
page&lt;/a&gt;
there's probably extra networking interface configuration needed
too (in Debian you're intstructed to -- imperatively -- edit
&lt;code&gt;/etc/network/interfaces&lt;/code&gt;).&lt;/p&gt;</content></entry><entry><title>We're finally incooperated!</title><id>https://joyofsource.com/we-are-incooperated.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2025-08-28T12:00:00Z</updated><link href="https://joyofsource.com/we-are-incooperated.html" rel="alternate" /><content type="html">&lt;p&gt;Our &lt;a href=&quot;https://reasonable-sourcery.coop&quot;&gt;reasonable-sourcery&lt;/a&gt;
cooperative's website is live!&lt;/p&gt;</content></entry><entry><title>GNU Mes 0.27.1 released</title><id>https://joyofsource.com/gnu-mes-0271-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2025-08-19T10:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-0271-released.html" rel="alternate" /><content type="html">&lt;p&gt;Mes 0.27.1 is a bug-fix release.  It represents 53 commits by four
people over one year.  This release resurrects supports development
builds with gcc-14 and adds support for using NYACC versions 0.99.0
through 2.02.2.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;h1&gt;ABOUT&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter and C compiler for bootstrapping the GNU
System.  It has helped to decimate the number and size of binary seeds
that were used in the bootstrap of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt; 1.0.  Recently, version
0.24.2 has realized the first &lt;a href=&quot;https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/&quot;&gt;Full Source Bootstrap&lt;/a&gt; for Guix.  The final
goal is to help create a full source bootstrap as part of the
&lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable builds&lt;/a&gt; effort for any UNIX-like operating system.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  Mes can
now be bootstrapped from &lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt; and &lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;Mescc-Tools&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable TinyCC&lt;/a&gt; that is
self-hosting.  Using this bootstrappable-tcc and the Mes C library we
can build an ancient version of the GNU tools triplet: glibc-2.2.5,
binutils-2.20.1, gcc-2.95.3.  This is enough to bootstrap Guix for
i686-linux, x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes was inspired by The Maxwell Equations of Software: &lt;a href=&quot;https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt; -- John
McCarthy page 13, Guix's source/binary packaging transparency and
Jeremiah Orians's &lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt;, a ~500-byte self-hosting hex assembler.&lt;/p&gt;&lt;h1&gt;DOWNLOAD&lt;/h1&gt;&lt;p&gt;git clone git://git.savannah.gnu.org/mes.git&lt;/p&gt;&lt;p&gt;Here is the GNU Mes home page:&lt;br /&gt;&lt;a href=&quot;https://gnu.org/s/mes/&quot;&gt;gnu.org/s/mes/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;For a summary of changes and contributors, see:&lt;br /&gt;&lt;a href=&quot;https://git.sv.gnu.org/gitweb/?p=mes.git;a=shortlog;h=v0.27.1&quot;&gt;git.sv.gnu.org/gitweb/?p=mes.git;a=shortlog;h=v0.27.1&lt;/a&gt;
or run this command from a git-cloned mes directory:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git shortlog v0.27..v0.27.1  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.27.1.tar.gz&quot;&gt;mes-0.27.1.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.27.1.tar.gz.sig&quot;&gt;mes-0.27.1.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.27.1.tar.gz&quot;&gt;mes-0.27.1.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.27.1.tar.gz.sig&quot;&gt;mes-0.27.1.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Here are the SHA1 and SHA256 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;d1bb88ae1c83269599ddfc975f5d3268fb7f5596  mes-0.27.1.tar.gz
183a40ea47ea49f8a1e3bd1b9d12e676374d64d63bc79e7bc1ae7d673dfdf25d  mes-0.27.1.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.27.1.tar.gz.sig  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The signature should match the fingerprint of the following key:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;pub   rsa4096 2018-04-08 [SC]  
      1A85 8392 E331 EAFD B8C2  7FFB F3C1 A0D9 C1D6 5273  
uid   Janneke Nieuwenhuizen &amp;lt;janneke@gnu.org&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to retrieve
or refresh it, and then rerun the 'gpg --verify' command.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As a last resort to find the key, you can try the official GNU
keyring:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg  
gpg --keyring gnu-keyring.gpg --verify mes-0.27.1.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alternatively, Mes can be installed using GNU Guix:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix pull  
guix install mes&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;NEWS&lt;/h1&gt;&lt;h2&gt;Changes in 0.27.1 since 0.27&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Core&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The pmatch-car/pmatch-cdr hack was removed.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Build&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Development build with gcc-14 is now supported.&lt;/li&gt;&lt;li&gt;Using M2-Planet 1.12.0 is now supported.&lt;/li&gt;&lt;li&gt;On x86-linux, using M2-Planet 1.13.0 is now supported.&lt;/li&gt;&lt;li&gt;A benchmark suite was added.&lt;/li&gt;&lt;li&gt;The &amp;quot;simple.make&amp;quot; build was resurrected.&lt;/li&gt;&lt;li&gt;Scripts with bashisms now use bash in shebang.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Mes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;1 New module stub:
(system foreign).&lt;/li&gt;&lt;li&gt;1 New function:
string-every.&lt;/li&gt;&lt;li&gt;3 New symbols:
W_OK, X_OK, F_OK.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Using the &amp;quot;-Dinline=&amp;quot; kludge is no longer necessary.&lt;/li&gt;&lt;li&gt;Building bootstrappable-tcc using 1.00.02 &amp;lt;= NYACC &amp;lt;= 2.02.2 now works.&lt;/li&gt;&lt;li&gt;kernel-stat was fixed for x86_64-linux.&lt;/li&gt;&lt;li&gt;Four new prototypes:
strcspn, strncat, strpbrk, strspn.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Noteworthy bug fixes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;A bug was fixed in &amp;quot;match&amp;quot; to support NYACC 2.01.0.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;See also &lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable.org&lt;/a&gt;.&lt;br /&gt;Join bug-mes@gnu.org and #bootstrappable on &lt;a href=&quot;https://irc.libera.chat&quot;&gt;irc.libera.chat&lt;/a&gt; for
discussions.&lt;/p&gt;&lt;p&gt;Thanks to everyone who contributed to this release:&lt;/p&gt;&lt;pre&gt;&lt;code&gt; 2	Andrius Štikonas  
15	Ekaitz Zarraga  
35	Janneke Nieuwenhuizen  
 1	Samuel Lidén Borell&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Janneke  -- on behalf of the Mes developers&lt;/p&gt;</content></entry><entry><title>Guix/Hurd on a Thinkpad X60</title><id>https://joyofsource.com/hurd-on-thinkpad.html</id><author><name>Janneke Nieuwenhuizen</name><email>janneke@gnu.org</email></author><updated>2024-11-24T18:00:00Z</updated><link href="https://joyofsource.com/hurd-on-thinkpad.html" rel="alternate" /><content type="html">&lt;p&gt;A lot has happened with respect to &lt;a href=&quot;https://hurd.gnu.org&quot;&gt;the Hurd&lt;/a&gt;
since our &lt;a href=&quot;https://guix.gnu.org/en/blog/2020/childhurds-and-substitutes/&quot;&gt;&lt;em&gt;Childhurds and GNU/Hurd
Substitutes&lt;/em&gt;&lt;/a&gt;
post.  As long as two years ago some of you &lt;a href=&quot;https://logs.guix.gnu.org/hurd/2022-05-15.log#070056&quot;&gt;have been
asking&lt;/a&gt; for a
progress update and although there &lt;a href=&quot;https://dezyne.org/janneke/logs/%23guix/2023-05-28.log.html#113945&quot;&gt;have been
rumours&lt;/a&gt;
on a new blog post for over a year, &lt;a href=&quot;https://logs.guix.gnu.org/guix/2023-03-11.log#221532&quot;&gt;we
were&lt;/a&gt; kind of
&lt;a href=&quot;https://logs.guix.gnu.org/guix/2023-05-13.log#165020&quot;&gt;waiting for&lt;/a&gt;
the &lt;a href=&quot;https://logs.guix.gnu.org/guix/2023-09-16.log#163627&quot;&gt;rumoured x86_64
support&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;With all the exciting progress on the Hurd coming available after the
recent (last?) &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-devel/2024-08/msg00195.html&quot;&gt;merger of
&lt;code&gt;core-updates&lt;/code&gt;&lt;/a&gt;
we thought it better &lt;a href=&quot;https://logs.guix.gnu.org/guix/2023-09-16.log#163627&quot;&gt;not to
wait&lt;/a&gt; any
longer.  So here is a short overview of our Hurd work over the past
years:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Update &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-03/msg02186.html&quot;&gt;Hurd to 3ff7053, gnumach 1.8+git20220827, and fix build
failures&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;A &lt;a href=&quot;https://lists.gnu.org/archive/html/bug-guix/2023-05/msg00526.html&quot;&gt;native compilation fix for
gcc-boot0&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Initial &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-05/msg00633.html&quot;&gt;rumpdisk
support&lt;/a&gt;,
more on this below, which &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-07/msg00427.html&quot;&gt;needed to
wait&lt;/a&gt;
for:&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;A libc &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-05/msg00973.html&quot;&gt;specific to
Hurd&lt;/a&gt;,
updating gnumach to 1.8+git20221224 and hurd to 0.9.git20230216,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Some 40 native &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-07/msg00643.html&quot;&gt;package build fixes for the
Hurd&lt;/a&gt;
so that all development dependencies of the guix package are now
available,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;A hack to use Git source in commencement to &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-07/msg00630.html&quot;&gt;update and fix cross
build and native build for the
Hurd&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Support for buiding &lt;code&gt;guix&lt;/code&gt; natively on the Hurd by splitting the
&lt;a href=&quot;https://lists.gnu.org/archive/html/bug-guix/2023-08/msg00190.html&quot;&gt;build into more steps for 32-bit
hosts&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Even nicer offloading support for Childhurds by &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-09/msg01505.html&quot;&gt;introducing Smart
Hurdloading&lt;/a&gt;
so that now both the Bordeaux and Berlin build farms build
packages for i586-gnu,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Locale fixes for &lt;a href=&quot;https://lists.gnu.org/archive/html/bug-guix/2023-10/msg00223.html&quot;&gt;wrong &lt;code&gt;glibc-utf8-locales&lt;/code&gt; package used on
GNU/Hurd&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;More locale fixes to &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-11/msg01749.html&quot;&gt;use &lt;code&gt;glibc-utf8-locales/hurd&lt;/code&gt; in
%standard-patch-inputs&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;And even more locale fixes for &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-11/msg01932.html&quot;&gt;using the right locales on
GNU/Hurd&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;A &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-12/msg00343.html&quot;&gt;new glibc
2.38&lt;/a&gt;
allowing us to do &lt;code&gt;(define-public glibc/hurd glibc)&lt;/code&gt;—i.e., once
again use the same glibc for Linux and Hurd alike, and: Better
Hurd support!,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Creation of &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-commits/2024-01/msg01382.html&quot;&gt;&lt;code&gt;hurd-team&lt;/code&gt;
branch&lt;/a&gt;
with build fixes, updating gnumach to 1.8+git20230410 and hurd to
0.9.git20231217,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;A constructive meeting with sixteen people during the &lt;a href=&quot;https://guix.gnu.org/en/blog/2024/guix-days-2024-recap/&quot;&gt;Guix
Days&lt;/a&gt;
just before &lt;a href=&quot;https://archive.fosdem.org/2024/&quot;&gt;FOSDEM '24&lt;/a&gt; &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2024-02/msg00035.html&quot;&gt;with
notes&lt;/a&gt;
that contain some nice ideas,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Another &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-commits/2024-02/msg00941.html&quot;&gt;new glibc
2.39&lt;/a&gt;;
even better Hurd support, opening the door to &lt;code&gt;x86_64&lt;/code&gt; support,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Yet another &lt;a href=&quot;https://mail.gnu.org/archive/html/guix-patches/2024-08/msg00627.html&quot;&gt;restoring of i586-gnu (32-bit GNU/Hurd)
support&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The installer just &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2024-10/msg01132.html&quot;&gt;learnt about the
Hurd&lt;/a&gt;!
More on this below, and finally,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Another set of updates: gnumach (1.8+git20240714), mig
(1.8+git20231217), hurd (0.9.git20240714), netdde (c0ef248d),
rumpkernel (f1ffd640), and &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2024-11/msg00708.html&quot;&gt;initial support for x86_64-gnu, aka
the 64bit
Hurd&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;NetDDE and Rumpdisk support&lt;/h1&gt;&lt;p&gt;Back in 2020, Ricardo Wurmus &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=d30d3e3f60df511e484adb3e459625b3251b0917&quot;&gt;added the NetDDE
package&lt;/a&gt;
that provides Linux 2.6 network drivers.  At the time we didn't get to
integrate and use it though and meanwhile it bitrotted.&lt;/p&gt;&lt;p&gt;After we &lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2023-05//msg00449.html&quot;&gt;resurrected the NetDDE
build&lt;/a&gt;,
and with &lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2023-05//msg00455.html&quot;&gt;kind help of the Hurd
developers&lt;/a&gt;
we finally managed to &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=9c1957921a1f53973c9b4b895f6d6d5fa63fe2dd&quot;&gt;support NetDDE for the
Hurd.&lt;/a&gt;.
This allows the usage of the Intel 82573L Gigabit Ethernet Controller
of the Thinkpad X60 (and many other network cards, possibly even
WIFI).  Instead of using the builtin kernel driver in GNU Mach, it
would be running &lt;em&gt;as a userland driver&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;What sparked this development was upstream's NetBSD rumpdisk support
that would allow using modern hard disks such as SSDs, again running
as a userland driver.  Hard disk support builtin in GNU Mach was
once considered to be a nice hack but it only supported disks up to
128 GiB…&lt;/p&gt;&lt;p&gt;First, we needed to &lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2023-05//msg00400.html&quot;&gt;fix the cross build on
Guix&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;After the &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-05/msg00633.html&quot;&gt;initial attempt at rumpdisk support for the
Hurd&lt;/a&gt;
it &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-05/msg00659.html&quot;&gt;took
(v2)&lt;/a&gt;
&lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-05/msg00746.html&quot;&gt;some
(v3)&lt;/a&gt;
&lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-05/msg00755.html&quot;&gt;work
(v4)&lt;/a&gt;
to finally arrive at &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2023-05/msg01049.html&quot;&gt;rumpdisk support for the Hurd, really, &lt;code&gt;*&lt;/code&gt;really&lt;code&gt;*&lt;/code&gt;
(v5)&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Sadly when actually using them, booting hangs:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;start: pci.arbiter:&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;What did not really help is that upstream's rumpkernel archive &lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2023-06/msg00099.html&quot;&gt;was
ridiculously
large&lt;/a&gt;.
We managed to work with upstream to remove unused bits from the
archive.  Upstream created a new archive that instead of 1.8 GiB (!) now
“only” weighs 670 MiB.&lt;/p&gt;&lt;p&gt;Anyway, after a lot of building, rebuilding, and debugging and some
more with &lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2023-05//msg00271.html&quot;&gt;kind help from
upstream&lt;/a&gt;
we finally got Rumpdisk and NetDDE &lt;a href=&quot;https://toot.aquilenet.fr/@civodul/110848429561223704&quot;&gt;to run in a
Childhurd&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/images/netdde-and-rumpdisk-processes.png&quot; alt=&quot;NetDDE and Rumpdisk userland processes in a Childhurd&quot; /&gt;&lt;/p&gt;&lt;h1&gt;Initial Guix/Hurd on the Thinkpad X60&lt;/h1&gt;&lt;p&gt;Now that the last (!) &lt;code&gt;core-updates&lt;/code&gt; merge has finally happened (thanks
everyone!), the recipe of installing Guix/Hurd has been much
simpfilied.  It goes something along these lines.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Install Guix/Linux on your X60,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Reserve a partition and format it for the Hurd:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;mke2fs -o hurd -L hurd /dev/sdaX&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;In your &lt;code&gt;config.scm&lt;/code&gt;, add some code to add GRUB menuentries for
booting the Hurd, and mount the Hurd partition under &lt;code&gt;/hurd&lt;/code&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-modules&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;srfi&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;srfi-26&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;ice-9&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;ice-9&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;rdelim&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;ice-9&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;regex&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;gnu&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;build&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;file-systems&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%hurd-menuentry-regex&lt;/span&gt;
&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;menuentry \&amp;quot;(GNU with the Hurd[^{\&amp;quot;]*)\&amp;quot;.*multiboot ([^ \n]*) +([^\n]*)&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;text-&amp;gt;hurd-menuentry&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;let*&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;string-match&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%hurd-menuentry-regex&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;label&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;match:substring&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;kernel&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;match:substring&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;arguments&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;match:substring&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;arguments&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;string-split&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;arguments&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;#\space&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;root&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;find&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cute&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;string-prefix?&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;root=&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;device-spec&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;string-split&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;root&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;#\=&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                     &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;root&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;device&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;device&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;device&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;hurd-device-name-&amp;gt;device-name&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;device-spec&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;modules&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;list-matches&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;module ([^\n]*)&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;modules&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cute&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;match:substring&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;modules&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;modules&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cute&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;string-split&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;#\space&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;modules&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;menu-entry&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;label&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;device&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;device&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;multiboot-kernel&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;kernel&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;multiboot-arguments&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;multiboot-modules&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;modules&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%hurd-menuentries-regex&lt;/span&gt;
&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;menuentry \&amp;quot;(GNU with the Hurd[^{\&amp;quot;]*)\&amp;quot; \\{([^}]|[^\n]\\})*\n\\}&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;grub.cfg-&amp;gt;hurd-menuentries&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;grub.cfg&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;let*&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;entries&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;list-matches&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%hurd-menuentries-regex&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;grub.cfg&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;entries&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cute&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;match:substring&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;entries&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;text-&amp;gt;hurd-menuentry&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;entries&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;hurd-menuentries&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;grub.cfg&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;with-input-from-file&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/hurd/boot/grub/grub.cfg&amp;quot;&lt;/span&gt;
                 &lt;span class=&quot;syntax-symbol&quot;&gt;read-string&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;grub.cfg-&amp;gt;hurd-menuentries&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;grub.cfg&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-symbol&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;operating-system&lt;/span&gt;
&lt;span class=&quot;syntax-symbol&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader-configuration&lt;/span&gt;
            &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;grub-bootloader&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;targets&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/dev/sda&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;menu-entries&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;hurd-menuentries&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;file-systems&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cons*&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;file-system&lt;/span&gt;
                      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;device&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;file-system-label&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;guix&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;mount-point&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;ext4&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;file-system&lt;/span&gt;
                      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;device&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;file-system-label&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;hurd&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;mount-point&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/hurd&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;ext2&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                    &lt;span class=&quot;syntax-symbol&quot;&gt;%base-file-systems&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-symbol&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Create a &lt;code&gt;config.scm&lt;/code&gt; for your Hurd system.  You can get
inspiration from &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/examples/bare-hurd.tmpl&quot;&gt;bare-hurd.tmpl&lt;/a&gt;
and inherit from &lt;code&gt;%hurd-default-operating-system&lt;/code&gt;.  Use
&lt;code&gt;grub-minimal-bootloader&lt;/code&gt; and add a &lt;code&gt;static-networking-service-type&lt;/code&gt;.
Something like:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-modules&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;srfi&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;srfi-1&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;ice-9&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-modules&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;gnu&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;gnu&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;hurd&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;operating-system&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;inherit&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%hurd-default-operating-system&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader-configuration&lt;/span&gt;
            &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;grub-minimal-bootloader&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;targets&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/dev/sda&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;kernel-arguments&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;noide&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-symbol&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;services&lt;/span&gt;
 &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cons*&lt;/span&gt;
   &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;service&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;static-networking-service-type&lt;/span&gt;
            &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%loopback-static-networking&lt;/span&gt;
                  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;static-networking&lt;/span&gt;
                   &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;addresses&lt;/span&gt;
                    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;list&lt;/span&gt;
                     &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;network-address&lt;/span&gt;
                      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;device&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;eth0&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                      &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;192.168.178.37/24&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                   &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;routes&lt;/span&gt;
                    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;network-route&lt;/span&gt;
                           &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;destination&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;default&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                           &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;gateway&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;192.168.178.1&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                   &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;requirement&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                   &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;provision&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;networking&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                   &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;name-servers&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;192.168.178.1&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;syntax-symbol&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Install the Hurd.  Assuming you have an &lt;code&gt;ext2&lt;/code&gt; filesystem mounted
on &lt;code&gt;/hurd&lt;/code&gt;, do something like:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix system build --target=i586-pc-gnu vuurvlieg.hurd --verbosity=1
sudo -E guix system init --target=i586-pc-gnu --skip-checks \
 vuurvlieg.hurd /hurd
sudo -E guix system reconfigure vuurvlieg.scm&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Reboot and...&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Hurray!&lt;/p&gt;&lt;p&gt;We now have &lt;a href=&quot;https://todon.nl/@janneke/110451493405777898&quot;&gt;Guix/Hurd running on
Thinkpad&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/images/thinkpad-hurd-bootmenu.jpeg&quot; alt=&quot;Guix/Hurd GRUB menu on ThinkpadX60&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/images/thinkpad-hurd-login.jpeg&quot; alt=&quot;Guix/Hurd running on ThinkpadX60&quot; /&gt;&lt;/p&gt;&lt;h1&gt;Guix/Hurd on Real Iron&lt;/h1&gt;&lt;p&gt;While the initial manual install on the X60 was an inspiring
milestone, we can do better.  As mentioned above, just recently the
&lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2024-10/msg01132.html&quot;&gt;installer learnt about the
Hurd&lt;/a&gt;,
right after some smaller problems were addressed, like &lt;code&gt;guix system init&lt;/code&gt; creating essential devices for the Hurd, not attempting to run a
cross-built &lt;code&gt;grub-install&lt;/code&gt; to install Grub, soft-coding the hard-coded
&lt;code&gt;part:1:device:wd0&lt;/code&gt; root file-system, adding support for booting
Guix/Hurd more than once.&lt;/p&gt;&lt;p&gt;To install Guix/Hurd, first, build a 32bit installation image and copy
it to a USB stick:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix system image --image-type=iso9660 --system=i686-linux gnu/system/install.scm
dd if=/gnu/store/cabba9e-image.iso of=/dev/sdX status=progress
sync&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;then boot it on a not-too-new machine that has wired internet
(although installation over WIFI is possible, there is currently no
WIFI support for the installed Hurd to use it).  On the new &lt;code&gt;Kernel&lt;/code&gt;
page:&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/images/installer-kernel-page.png&quot; alt=&quot;Installer Kernel page&quot; /&gt;&lt;/p&gt;&lt;p&gt;choose &lt;code&gt;Hurd&lt;/code&gt;.  Do not choose a desktop environment, that's not
available yet.  On the &lt;code&gt;Network management&lt;/code&gt; page:&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/images/installer-network-management-page.png&quot; alt=&quot;Installer Network management page&quot; /&gt;&lt;/p&gt;&lt;p&gt;choose the new &lt;code&gt;Static networking service&lt;/code&gt;.  In the final
&lt;code&gt;Configuration file&lt;/code&gt; step, don't forget to edit:&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/images/installer-configuration-file-page.png&quot; alt=&quot;Installer Configuration file page&quot; /&gt;&lt;/p&gt;&lt;p&gt;and fill-in your &lt;code&gt;IP&lt;/code&gt; and &lt;code&gt;GATEWAY&lt;/code&gt;:&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/images/installer-nano-edit-static-networking.png&quot; alt=&quot;Installer Edit static networking&quot; /&gt;&lt;/p&gt;&lt;p&gt;You may want to add some additional packages such as &lt;code&gt;git-minimal&lt;/code&gt;
from &lt;code&gt;(gnu packages version-control)&lt;/code&gt; and &lt;code&gt;sqlite&lt;/code&gt; from &lt;code&gt;(gnu packages sqlite)&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;If you also intend to do Guix development on the Hurd—e.g., debugging
and fixing native package builds—then you might want to include all
dependencies to build the guix package, see the
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/examples/devel-hurd.tmpl&quot;&gt;&lt;code&gt;devel-hurd.tmpl&lt;/code&gt;&lt;/a&gt;
for inspiration on how to do that.  Note that any package you add must
already have support for cross-building.&lt;/p&gt;&lt;p&gt;Good luck, and let us know if it works for you and on what kind of
machine, or why it didn't!&lt;/p&gt;&lt;h1&gt;What's next?&lt;/h1&gt;&lt;p&gt;In &lt;a href=&quot;https://guix.gnu.org/en/blog/2020/a-hello-world-virtual-machine-running-the-hurd/&quot;&gt;an earlier
post&lt;/a&gt;
we tried to answer the question “Why bother with the Hurd anyway?”  An
obvious question because it is &lt;a href=&quot;https://xkcd.com/1508&quot;&gt;all too easy to get
discouraged&lt;/a&gt;, to downplay or underestimate the
potential social impact of GNU and the Hurd.&lt;/p&gt;&lt;p&gt;The most pressing problem currently is that the &lt;a href=&quot;https://issues.guix.gnu.org/73181&quot;&gt;guix-daemon fails
when invoking &lt;code&gt;guix authenticate&lt;/code&gt; on the
Hurd&lt;/a&gt;, which means that we cannot
easily keep our substitutes up to date.  &lt;code&gt;guix pull&lt;/code&gt; is known to work
but only by pulling from a local branch doing something like:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;mkdir -p ~/src/guix
cd src/guix
git clone https://git.savannah.gnu.org/git/guix.git master
guix pull --url=~/src/guix/master&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;kinda like we did it in the old days.  Sometimes it seems that guix
does not grok the sqlite store database.  This is needs to be resolved
but as &lt;code&gt;sqlite&lt;/code&gt; does read it this can be easily worked around by doing
something like:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;mv /var/guix/db/db.sqlite /var/guix/db/db.sqlite.orig
sqlite3 /var/guix/db/db.sqlite.orig .dump &amp;gt; /var/guix/db/db.sqlite.dump
sqlite3 -init /var/guix/db/db.sqlite.dump /var/guix/db/db.sqlite .quit&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, the boot process still fails to handle an unclean root file
system.  Whenever the Hurd has suffered an unclean shutdown, cleaning
it must currently be done manually, e.g., by booting from the
installer USB stick.&lt;/p&gt;&lt;p&gt;Upstream now has decent support for 64bit (x86_64) albeit &lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2024-07/msg00058.html&quot;&gt;with more
bugs and fewer
packages&lt;/a&gt;.
As mentioned in the overview &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2024-11/msg00708.html&quot;&gt;we are now
working&lt;/a&gt;
&lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2024-11/msg00925.html&quot;&gt;to have
that&lt;/a&gt;
&lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2024-11/msg01326.html&quot;&gt;in
Guix&lt;/a&gt;
and &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-patches/2024-11/msg01676.html&quot;&gt;have
made&lt;/a&gt;
&lt;a href=&quot;https://todon.nl/@janneke/113457925305954698&quot;&gt;some progress&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/images/hello-guix-x86_64-gnu.png&quot; alt=&quot;Hello Guix 64bit Hurd&quot; /&gt;&lt;/p&gt;&lt;p&gt;more on that in another post.  Other interesting task for Guix
include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Have &lt;code&gt;guix system reconfigure&lt;/code&gt; work on the Hurd,&lt;/li&gt;&lt;li&gt;Figure out WiFi support with NetDDE (and add it to installer!),&lt;/li&gt;&lt;li&gt;An &lt;a href=&quot;https://issues.guix.gnu.org/43857&quot;&gt;isolated build
environment&lt;/a&gt; (or better
wait for, err, contribute to the &lt;a href=&quot;https://guix.gnu.org/en/blog/2023/a-build-daemon-in-guile/&quot;&gt;Guile
guix-daemon&lt;/a&gt;?),&lt;/li&gt;&lt;li&gt;An installer running the Hurd, and,&lt;/li&gt;&lt;li&gt;Packages, packages, packages!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;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.  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:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://nlnet.nl/project/Hurd-Audio/&quot;&gt;Audio support&lt;/a&gt; (this is
sponsored by &lt;a href=&quot;https://nlnet.nl&quot;&gt;NLnet&lt;/a&gt;, thanks!),&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://lists.gnu.org/archive/html//bug-hurd/2024-05/msg00002.html&quot;&gt;Rumpnet&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2024-09/msg00053.html&quot;&gt;SMP&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2024-03/msg00114.html&quot;&gt;AArch64&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;Join &lt;code&gt;#guix&lt;/code&gt; and &lt;code&gt;#hurd&lt;/code&gt; on
&lt;a href=&quot;https://guix.gnu.org/en/contact/irc/&quot;&gt;&lt;code&gt;libera.chat&lt;/code&gt;&lt;/a&gt; or the &lt;a href=&quot;https://guix.gnu.org/en/contact&quot;&gt;mailing
lists&lt;/a&gt; and get involved!&lt;/p&gt;&lt;h5&gt;Addendum&lt;/h5&gt;&lt;p&gt;It &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-devel/2024-11/msg00276.html&quot;&gt;has been brought to our
attention&lt;/a&gt;
that people haven't heard that &lt;a href=&quot;https://wiki.debian.org/Debian_GNU/Hurd&quot;&gt;Debian
GNU/Hurd&lt;/a&gt; has been a reality
for some years now.  While Guix GNU/Hurd has an exciting future,
please be aware that it lacks many packages and services, including
Xorg.  If you would simply like to install the Hurd on bare metal
running your favorite window manager (eg: i3, icewm, etc.)  or
lightweight desktop environment (Xfce) right now, then &lt;a href=&quot;https://cdimage.debian.org/cdimage/ports/latest/hurd-i386/20220824/&quot;&gt;installing
Debian
GNU/Hurd&lt;/a&gt;
is a good choice.  Though we hope to catch up to them soon!&lt;/p&gt;</content></entry><entry><title>GNU Mes 0.27 released</title><id>https://joyofsource.com/gnu-mes-027-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2024-07-06T12:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-027-released.html" rel="alternate" /><content type="html">&lt;p&gt;We are happy to announce the release of GNU Mes 0.27.&lt;/p&gt;&lt;p&gt;It's been only a month since the previous release mainly because most
this work has been waiting for 0.26 to be released.  This release
represents 55 commits over 17 weeks.  This release resurrects running
Mes on the Hurd and adds support for using NYACC versions 0.99.0 through
1.09.4.&lt;/p&gt;&lt;p&gt;We are excited that the NLnet Foundation is sponsoring this work!&lt;/p&gt;&lt;h3&gt;What's next?&lt;/h3&gt;&lt;p&gt;Bringing the Full Source Bootstrap to NixOS.  Remove indirect Guile
dependencies (via Gash and Gash-Utils) from the Mes bootstrap in Guix.
Support for bootstrapping gcc-4.6.4, and a Full Source Bootstrap for
armhf-linux, and riscv64-linux.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;h1&gt;ABOUT&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter and C compiler for bootstrapping the GNU
System.  It has helped to decimate the number and size of binary seeds
that were used in the bootstrap of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt; 1.0.  Recently, version
0.24.2 has realized the first &lt;a href=&quot;https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/&quot;&gt;Full Source Bootstrap&lt;/a&gt; for Guix.  The final
goal is to help create a full source bootstrap as part of the
&lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable builds&lt;/a&gt; effort for any UNIX-like operating system.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  Mes can
now be bootstrapped from &lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt; and &lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;Mescc-Tools&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable TinyCC&lt;/a&gt; that is
self-hosting.  Using this bootstrappable-tcc and the Mes C library we
can build an ancient version of the GNU tools triplet: glibc-2.2.5,
binutils-2.20.1, gcc-2.95.3.  This is enough to bootstrap Guix for
i686-linux, x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes was inspired by The Maxwell Equations of Software: &lt;a href=&quot;https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt; -- John
McCarthy page 13, Guix's source/binary packaging transparency and
Jeremiah Orians's &lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt;, a ~500-byte self-hosting hex assembler.&lt;/p&gt;&lt;h1&gt;DOWNLOAD&lt;/h1&gt;&lt;pre&gt;&lt;code&gt;git clone git://git.savannah.gnu.org/mes.git  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here is the GNU mes home page:&lt;br /&gt;&lt;a href=&quot;https://gnu.org/s/mes/&quot;&gt;gnu.org/s/mes/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;For a summary of changes and contributors, see:&lt;br /&gt;&lt;a href=&quot;https://git.sv.gnu.org/gitweb/?p=mes.git;a=shortlog;h=v0.27&quot;&gt;git.sv.gnu.org/gitweb/?p=mes.git;a=shortlog;h=v0.27&lt;/a&gt;&lt;/p&gt;&lt;p&gt;or run this command from a git-cloned mes directory:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git shortlog v0.26.2..v0.27&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.27.tar.gz&quot;&gt;mes-0.27.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.27.tar.gz.sig&quot;&gt;mes-0.27.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.27.tar.gz&quot;&gt;mes-0.27.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.27.tar.gz.sig&quot;&gt;mes-0.27.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Here are the SHA1 and SHA256 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;273ad95203efe83d0b0e8bdbce5b41cfebb316e4  mes-0.27.tar.gz  
033ee656d98cfc04a826eab27eed6e6a276d15bbb980a7cd71d00f30227aaaa8  mes-0.27.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.27.tar.gz.sig  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The signature should match the fingerprint of the following key:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;pub   rsa4096 2018-04-08 [SC]  
      1A85 8392 E331 EAFD B8C2  7FFB F3C1 A0D9 C1D6 5273  
uid   Jan (janneke) Nieuwenhuizen &amp;lt;janneke@gnu.org&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to retrieve
or refresh it, and then rerun the 'gpg --verify' command.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As a last resort to find the key, you can try the official GNU
keyring:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg  
gpg --keyring gnu-keyring.gpg --verify mes-0.27.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alternatively, Mes can be installed using GNU Guix:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix pull  
guix install mes&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;NEWS&lt;/h1&gt;&lt;h2&gt;Changes in 0.27 since 0.26.2&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Core&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Support for running Mes on the Hurd has been resurrected.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Mes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;(ice-9 optargs) now supports lambda* #:optional with #:key.&lt;/li&gt;&lt;li&gt;Define-module now handles #:version by ignoring it.&lt;/li&gt;&lt;li&gt;2 new functions:
pair-for-each, with-fluids*.&lt;/li&gt;&lt;li&gt;2 new modules:
(rnrs arithmetic bitwise), (srfi srfi-39).&lt;/li&gt;&lt;li&gt;For Guile compatibility, (srfi srfi-39) is loaded by default.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Build&lt;/p&gt;&lt;ul&gt;&lt;li&gt;When configuring using `--with-courage, mescc-tools are now optional.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;MesCC now works with NYACC versions 0.99.0 to 1.09.4.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Legacy mes-style module support was removed for NYACC.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Legacy mes-style module support was removed for MesCC.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;See also &lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable.org&lt;/a&gt;.&lt;br /&gt;Join bug-mes@gnu.org and #bootstrappable on &lt;a href=&quot;https://irc.libera.chat&quot;&gt;irc.libera.chat&lt;/a&gt; for
discussions.&lt;/p&gt;&lt;p&gt;Janneke&lt;br /&gt;[on behalf of the mes maintainers]&lt;/p&gt;</content></entry><entry><title>GNU Mes 0.26.2 released</title><id>https://joyofsource.com/gnu-mes-0262-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2024-06-30T12:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-0262-released.html" rel="alternate" /><content type="html">&lt;p&gt;Mes 0.26.2 is a bug-fix release.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;h1&gt;ABOUT&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter and C compiler for bootstrapping the GNU
System.  It has helped to decimate the number and size of binary seeds
that were used in the bootstrap of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt; 1.0.  Recently, version
0.24.2 has realized the first &lt;a href=&quot;https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/&quot;&gt;Full Source Bootstrap&lt;/a&gt; for Guix.  The final
goal is to help create a full source bootstrap as part of the
&lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable builds&lt;/a&gt; effort for any UNIX-like operating system.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  Mes can
now be bootstrapped from &lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt; and &lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;Mescc-Tools&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable TinyCC&lt;/a&gt; that is
self-hosting.  Using this bootstrappable-tcc and the Mes C library we
can build an ancient version of the GNU tools triplet: glibc-2.2.5,
binutils-2.20.1, gcc-2.95.3.  This is enough to bootstrap Guix for
i686-linux, x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes was inspired by The Maxwell Equations of Software: &lt;a href=&quot;https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt; -- John
McCarthy page 13, Guix's source/binary packaging transparency and
Jeremiah Orians's &lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt;, a ~500-byte self-hosting hex assembler.&lt;/p&gt;&lt;h1&gt;DOWNLOAD&lt;/h1&gt;&lt;pre&gt;&lt;code&gt;git clone git://git.savannah.gnu.org/mes.git  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here is the GNU Mes home page:&lt;br /&gt;&lt;a href=&quot;https://gnu.org/s/mes/&quot;&gt;gnu.org/s/mes/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;For a summary of changes and contributors, see:&lt;br /&gt;&lt;a href=&quot;https://git.sv.gnu.org/gitweb/?p=mes.git;a=shortlog;h=v0.26.2&quot;&gt;git.sv.gnu.org/gitweb/?p=mes.git;a=shortlog;h=v0.26.2&lt;/a&gt;&lt;/p&gt;&lt;p&gt;or run this command from a git-cloned mes directory:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git shortlog v0.26.1..v0.26.2&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.26.2.tar.gz&quot;&gt;mes-0.26.2.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.26.2.tar.gz.sig&quot;&gt;mes-0.26.2.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.26.2.tar.gz&quot;&gt;mes-0.26.2.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.26.2.tar.gz.sig&quot;&gt;mes-0.26.2.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Here are the SHA1 and SHA256 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;dbc1bdbcc4784555cf8afdcf6d4ab7717f3b5892  mes-0.26.2.tar.gz  
2fb8bf99f13c4b769af2f50d2dceac0c25caccc6342b65e31121456f253d0a88  mes-0.26.2.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.26.2.tar.gz.sig  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The signature should match the fingerprint of the following key:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;pub   rsa4096 2018-04-08 [SC]  
      1A85 8392 E331 EAFD B8C2  7FFB F3C1 A0D9 C1D6 5273  
uid   Jan (janneke) Nieuwenhuizen &amp;lt;janneke@gnu.org&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to retrieve
or refresh it, and then rerun the 'gpg --verify' command.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As a last resort to find the key, you can try the official GNU
keyring:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg  
gpg --keyring gnu-keyring.gpg --verify mes-0.26.2.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alternatively, Mes can be installed using GNU Guix:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix pull  
guix install mes&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;NEWS&lt;/h1&gt;&lt;h2&gt;Changes in 0.26.2 since 0.26.1&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Build&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Make check now succeeds again for x86_64 and ARM.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Noteworthy bug fixes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;A typo was fixed in in the ARM signal.h header.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;See also &lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable.org&lt;/a&gt;.&lt;br /&gt;Join bug-mes@gnu.org and #bootstrappable on &lt;a href=&quot;https://irc.libera.chat&quot;&gt;irc.libera.chat&lt;/a&gt; for
discussions.&lt;/p&gt;&lt;p&gt;Janneke&lt;br /&gt;[on behalf of the mes maintainers]&lt;/p&gt;</content></entry><entry><title>GNU Mes 0.26.1 released</title><id>https://joyofsource.com/gnu-mes-0261-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2024-06-08T09:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-0261-released.html" rel="alternate" /><content type="html">&lt;p&gt;We are happy to announce the release of GNU Mes 0.26.1.&lt;/p&gt;&lt;p&gt;This release represents 57 commits by five people in 26 weeks.  It
brings full Gash support and many fixes for the riscv64-linux bootstrap.
See the NEWS below for a brief summary.&lt;/p&gt;&lt;p&gt;We are excited that the NLnet Foundation is sponsoring this work!&lt;/p&gt;&lt;h3&gt;What's next?&lt;/h3&gt;&lt;p&gt;Support newer versions of Nyacc.  Resurrect support for the Hurd.
Remove indirect Guile dependencies (via Gash and Gash-Utils) from the
Mes bootstrap in Guix.  Support for bootstrapping gcc-4.6.4 without
depending on gcc-2.95.3, and a Full Source Bootstrap for armhf-linux,
and riscv64-linux.  Bringing the Full Source Bootstrap to NixOS.&lt;/p&gt;&lt;h1&gt;ABOUT&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter and C compiler for bootstrapping the GNU
System.  It has helped to decimate the number and size of binary seeds
that were used in the bootstrap of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt; 1.0.  Recently, version
0.24.2 has realized the first &lt;a href=&quot;https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/&quot;&gt;Full Source Bootstrap&lt;/a&gt; for Guix.  The final
goal is to help create a full source bootstrap as part of the
&lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable builds&lt;/a&gt; effort for any UNIX-like operating system.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  Mes can
now be bootstrapped from &lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt; and &lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;Mescc-Tools&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable TinyCC&lt;/a&gt; that is
self-hosting.  Using this bootstrappable-tcc and the Mes C library we
can build an ancient version of the GNU tools triplet: glibc-2.2.5,
binutils-2.20.1, gcc-2.95.3.  This is enough to bootstrap Guix for
i686-linux, x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes was inspired by The Maxwell Equations of Software: &lt;a href=&quot;https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt; -- John
McCarthy page 13, Guix's source/binary packaging transparency and
Jeremiah Orians's &lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt;, a ~500-byte self-hosting hex assembler.&lt;/p&gt;&lt;h1&gt;DOWNLOAD&lt;/h1&gt;&lt;pre&gt;&lt;code&gt;git clone git://git.savannah.gnu.org/mes.git  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here is the GNU mes home page:
&lt;a href=&quot;https://gnu.org/s/mes/&quot;&gt;https://gnu.org/s/mes/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;For a summary of changes and contributors, see:
&lt;a href=&quot;https://git.sv.gnu.org/gitweb/?p=mes.git;a=shortlog;h=v0.26.1&quot;&gt;https://git.sv.gnu.org/gitweb/?p=mes.git;a=shortlog;h=v0.26.1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;or run this command from a git-cloned mes directory:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git shortlog v0.26..v0.26.1&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;https://ftp.gnu.org/gnu/mes/mes-0.26.1.tar.gz  
https://ftp.gnu.org/gnu/mes/mes-0.26.1.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;https://ftpmirror.gnu.org/mes/mes-0.26.1.tar.gz
https://ftpmirror.gnu.org/mes/mes-0.26.1.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are the SHA1 and SHA256 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;f228703f3e6c1104d825ade5183b74ef47d6cde4  mes-0.26.1.tar.gz  
e1370d528cbfcbb477ca35e59ae2f6fb71f611f9c856330e6dcb5f2459c2fcf4  mes-0.26.1.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.26.1.tar.gz.sig  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The signature should match the fingerprint of the following key:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;pub   rsa4096 2018-04-08 [SC]  
      1A85 8392 E331 EAFD B8C2  7FFB F3C1 A0D9 C1D6 5273  
uid   Jan (janneke) Nieuwenhuizen &amp;lt;janneke@gnu.org&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to retrieve
or refresh it, and then rerun the 'gpg --verify' command.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As a last resort to find the key, you can try the official GNU
keyring:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg  
gpg --keyring gnu-keyring.gpg --verify mes-0.26.1.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alternatively, Mes can be installed using GNU Guix:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix pull  
guix install mes&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;NEWS&lt;/h1&gt;&lt;h2&gt;Changes in 0.26.1 since 0.26&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Mes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Running Gash is now fully supported.&lt;/li&gt;&lt;li&gt;The REPL's ,use command now loads Guile-style modures.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The comma operator is now better supported.&lt;/li&gt;&lt;li&gt;&lt;p&gt;New type: ucontext_t.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;1 new function
pathconf.&lt;/li&gt;&lt;li&gt;2 new stubs
putenv, realpath.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Noteworthy bug fixes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;A workaround was added to run Gash-Utils in the kaem bootstrap.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;A Guile-style module bug was fixed where MesCC would run twice.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;./configure.sh can be run without using &lt;code&gt;--host&lt;/code&gt; during bootstrap.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;srfi-43 vector-fold has been resurrected.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The armhf build has been resurrected.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;On x86_64-linux, getdents64 is being used instead of getdents.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC now produces position-independent binaries for x86_64.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Several RISCV-64 MesCC (signed) integer problems were fixed.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Setjmp/longjmp for RISCV-64 on TinyCC has been fixed.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;CHAR_MAX is now depends on the signedness of char.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;intmax_t and uintmax_t were fixed for 64bit archtectures.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;A buffer-overflow for very large integers in ntoab was fixed.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Thanks to everyone who contributed to this release:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Andrius Štikonas (7)  
Ekaitz Zarraga (15)  
Janneke Nieuwenhuizen (29)  
Michael Forney (4)  
Timothy Sample (2)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;See also &lt;a href=&quot;https://bootstrappable.org&quot;&gt;https://bootstrappable.org&lt;/a&gt;.&lt;br /&gt;Join bug-mes@gnu.org and #bootstrappable on irc.libera.chat for
discussions.&lt;/p&gt;&lt;p&gt;Janneke&lt;br /&gt;[on behalf of the mes maintainers]&lt;/p&gt;</content></entry><entry><title>GNU Mes 0.26 released</title><id>https://joyofsource.com/gnu-mes-026-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2023-12-03T14:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-026-released.html" rel="alternate" /><content type="html">&lt;p&gt;We are happy to announce the release of GNU Mes 0.26.&lt;/p&gt;&lt;p&gt;It's been only a month since the previous release mainly because most
this work has been waiting for 0.25 to be released.  This release
represents 194 commits over one year by two people.  This release brings
Guile module support and support for running Gash and Gash-Utils.&lt;/p&gt;&lt;p&gt;We are excited that the NLnet Foundation is sponsoring this work!&lt;/p&gt;&lt;h1&gt;What's next?&lt;/h1&gt;&lt;p&gt;Bringing the Full Source Bootstrap to NixOS.  Remove indirect Guile
dependencies (via Gash and Gash-Utils) from the Mes bootstrap in Guix.
Support for bootstrapping gcc-4.6.4, and a Full Source Bootstrap for
armhf-linux, and riscv64-linux.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;h1&gt;About&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter and C compiler for bootstrapping the GNU
System.  It has helped to decimate the number and size of binary seeds
that were used in the bootstrap of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt; 1.0.  Recently, version
0.24.2 has realized the first &lt;a href=&quot;https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/&quot;&gt;Full Source Bootstrap&lt;/a&gt; for Guix.  The final
goal is to help create a full source bootstrap as part of the
&lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable builds&lt;/a&gt; effort for any UNIX-like operating system.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  Mes can
now be bootstrapped from &lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt; and &lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;Mescc-Tools&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable TinyCC&lt;/a&gt; that is
self-hosting.  Using this bootstrappable-tcc and the Mes C library we
can build an ancient version of the GNU tools triplet: glibc-2.2.5,
binutils-2.20.1, gcc-2.95.3.  This is enough to bootstrap Guix for
i686-linux, x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes was inspired by The Maxwell Equations of Software: &lt;a href=&quot;https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt; -- John
McCarthy page 13, Guix's source/binary packaging transparency and
Jeremiah Orians's &lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt;, a ~500-byte self-hosting hex assembler.&lt;/p&gt;&lt;h1&gt;Download&lt;/h1&gt;&lt;p&gt;git clone git://git.savannah.gnu.org/mes.git&lt;/p&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature[*]:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;https://ftp.gnu.org/gnu/mes/mes-0.26.tar.gz  
https://ftp.gnu.org/gnu/mes/mes-0.26.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;https://ftpmirror.gnu.org/mes/mes-0.26.tar.gz  
https://ftpmirror.gnu.org/mes/mes-0.26.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are the SHA1 and SHA256 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;581d7dba5f9749dd232a203d04175494ded0e77d  mes-0.26.tar.gz  
0f2210ad5896249466a0fc9a509e86c9a16db2b722741c6dfb5e8f7b33e385d4  mes-0.26.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.26.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to update
or refresh it, and then rerun the 'gpg --verify` command.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alternatively, Mes can be installed or updated using Guix:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix pull
guix install mes&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;Changes in 0.26 since 0.25.1&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Core&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Mes now has a Guile-compatible record interface.&lt;/li&gt;&lt;li&gt;Mes now has a Guile-compatible hash-table interface.&lt;/li&gt;&lt;li&gt;Mes now uses exceptions instead of asserts.&lt;/li&gt;&lt;li&gt;Mes now supports Guile-compatible modules and variable lookup.&lt;/li&gt;&lt;li&gt;The reader now supports &lt;code&gt;#\fs',&lt;/code&gt;#\nl', and `#\np'.&lt;/li&gt;&lt;li&gt;Mes now supports vectors in syntax-rules.&lt;/li&gt;&lt;li&gt;Dynamic-wind was fully implemented.&lt;/li&gt;&lt;li&gt;Mes now has regex support.&lt;/li&gt;&lt;li&gt;Mes now supports functional record setters.&lt;/li&gt;&lt;li&gt;simple-format now supports `~%'.&lt;/li&gt;&lt;li&gt;Charsets can now be used in `string-index'.&lt;/li&gt;&lt;li&gt;&lt;p&gt;The (srfi srfi-14) module was completed.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;9 new modules
(ice-9 ftw), (ice-9 i18n), (ice-9 receive), (ice-9 regex), (rnrs io
ports), (rnrs bytevectors), (srfi srfi-2). (srfi srfi-11). (srfi srfi-37).&lt;/li&gt;&lt;li&gt;46 new functions
alist-cons, append-reverse!, call-with-port, call-with-input-file,
call-with-input-string, call-with-output-file, chdir, clone-port,
closedir, concatenate, drop, drop-while. environ, execle,
file-system-fold, fold-matches, getpid, hash-clear!, hash-fold,
hash-map-&amp;gt;list, hash-remove!, hash-table?, link, list-matches,
match-let, mkdir, opendir, partition, pipe, primitive-exit, readdir,
reduce, rename-file, rmdir, seek, set-fields, span, sleep,
string-concatenate-reverse, string-count, string-pad, string-pad-right,
string&amp;gt;, string&amp;lt;, umask, uname, utimes, vector-fold.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Mes now supports running Gash and Gash-Utils.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC&lt;/p&gt;&lt;ul&gt;&lt;li&gt;MesCC now uses Guile-compatible modules.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Noteworthy bug fixes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Many bug-fixes to hygiene, string primitives, optional arguments.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;Get informed, get involved&lt;/h1&gt;&lt;p&gt;See &lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable.org&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Join bug-mes@gnu.org and #bootstrappable on irc.libera.chat for
discussions.&lt;/p&gt;&lt;p&gt;Thanks to everyone who contributed to this release:&lt;/p&gt;&lt;pre&gt;&lt;code&gt; 35	Janneke Nieuwenhuizen
159	Timothy Sample&lt;/code&gt;&lt;/pre&gt;</content></entry><entry><title>GNU Mes 0.25.1 released</title><id>https://joyofsource.com/gnu-mes-0251-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2023-12-02T11:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-0251-released.html" rel="alternate" /><content type="html">&lt;p&gt;Mes 0.25.1 is a bug-fix release.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;h1&gt;About&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter and C compiler for bootstrapping the GNU
System.  It has helped to decimate the number and size of binary seeds
that were used in the bootstrap of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt; 1.0.  Recently, version
0.24.2 has realized the first &lt;a href=&quot;https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/&quot;&gt;Full Source Bootstrap&lt;/a&gt; for Guix.  The final
goal is to help create a full source bootstrap as part of the
&lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable builds&lt;/a&gt; effort for any UNIX-like operating system.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  Mes can
now be bootstrapped from &lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt; and &lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;Mescc-Tools&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable TinyCC&lt;/a&gt; that is
self-hosting.  Using this bootstrappable-tcc and the Mes C library we
can build an ancient version of the GNU tools triplet: glibc-2.2.5,
binutils-2.20.1, gcc-2.95.3.  This is enough to bootstrap Guix for
i686-linux, x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes was inspired by The Maxwell Equations of Software: &lt;a href=&quot;https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt; -- John
McCarthy page 13, Guix's source/binary packaging transparency and
Jeremiah Orians's &lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt;, a ~500-byte self-hosting hex assembler.&lt;/p&gt;&lt;h1&gt;Download&lt;/h1&gt;&lt;p&gt;git clone git://git.savannah.gnu.org/mes.git&lt;/p&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature[*]:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;https://ftp.gnu.org/gnu/mes/mes-0.25.1.tar.gz  
https://ftp.gnu.org/gnu/mes/mes-0.25.1.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;https://ftpmirror.gnu.org/mes/mes-0.25.1.tar.gz  
https://ftpmirror.gnu.org/mes/mes-0.25.1.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are the SHA1 and SHA256 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;62b48a4771d4935840b3603e8b034886e9e5e4fd  mes-0.25.1.tar.gz  
36a2d31990026ff2b602961411922b1e8da536ac59e0dde48e8fa48e0934d70e  mes-0.25.1.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.25.1.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to update
or refresh it, and then rerun the &lt;code&gt;gpg --verify&lt;/code&gt; command.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alternatively, Mes can be installed or updated using Guix:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix pull
guix install mes&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;Changes in 0.25.1 since 0.25&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Build&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;The bootstrap on x86 has been fixed:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The tcc-lib target is only built if &lt;code&gt;lib/&amp;lt;kernel&amp;gt;/&amp;lt;cpu&amp;gt;-mes-tcc&lt;/code&gt; exists,&lt;/li&gt;&lt;li&gt;If __raise is a macro, do not define it as a function.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The clean targets have been fixed.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The out-of-directory --srcdir build has been resurrected.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;Get informed, get involved&lt;/h1&gt;&lt;p&gt;See &lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable.org&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Join bug-mes@gnu.org and #bootstrappable on irc.libera.chat for
discussions.&lt;/p&gt;&lt;p&gt;Thanks to everyone who contributed to this release:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;14	Janneke Nieuwenhuizen
 2	Timothy Sample
 1	Vagrant Cascadian&lt;/code&gt;&lt;/pre&gt;</content></entry><entry><title>GNU Mes 0.25 released</title><id>https://joyofsource.com/gnu-mes-025-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2023-11-11T08:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-025-released.html" rel="alternate" /><content type="html">&lt;p&gt;We are happy to announce the release of GNU Mes 0.25!&lt;/p&gt;&lt;p&gt;Although it's been only nine months since the previous release, this
release represents 116 commits over two years by six people.  This
release brings RISC-V64-linux support.&lt;/p&gt;&lt;p&gt;We are excited that the NLnet Foundation is sponsoring this work!&lt;/p&gt;&lt;h1&gt;What's next?&lt;/h1&gt;&lt;p&gt;Bringing the Full Source Bootstrap to NixOS.  Full Guile compatible
module support, and support for running Gash and Gash-Utils.  Support
for bootstrapping gcc-4.6.4, and a Full Source Bootstrap for
armhf-linux, and riscv64-linux.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;h1&gt;About&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter and C compiler for bootstrapping the GNU
System.  It has helped to decimate the number and size of binary seeds
that were used in the bootstrap of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt; 1.0.  Recently, version
0.24.2 has realized the first &lt;a href=&quot;https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/&quot;&gt;Full Source Bootstrap&lt;/a&gt; for Guix.  The final
goal is to help create a full source bootstrap as part of the
&lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable builds&lt;/a&gt; effort for any UNIX-like operating system.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  Mes can
now be bootstrapped from &lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt; and &lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;Mescc-Tools&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable TinyCC&lt;/a&gt; that is
self-hosting.  Using this bootstrappable-tcc and the Mes C library we
can build an ancient version of the GNU tools triplet: glibc-2.2.5,
binutils-2.20.1, gcc-2.95.3.  This is enough to bootstrap Guix for
i686-linux, x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes was inspired by The Maxwell Equations of Software: &lt;a href=&quot;https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt; -- John
McCarthy page 13, Guix's source/binary packaging transparency and
Jeremiah Orians's &lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt;, a ~500-byte self-hosting hex assembler.&lt;/p&gt;&lt;h1&gt;Download&lt;/h1&gt;&lt;p&gt;git clone git://git.savannah.gnu.org/mes.git&lt;/p&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature[*]:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;https://ftp.gnu.org/gnu/mes/mes-0.25.tar.gz  
https://ftp.gnu.org/gnu/mes/mes-0.25.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;https://ftpmirror.gnu.org/mes/mes-0.25.tar.gz  
https://ftpmirror.gnu.org/mes/mes-0.25.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are the SHA1 and SHA256 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;a0fcd35a32d16580cacb52add632d96eae0548a9  mes-0.25.tar.gz  
325250b3567ed9203ba70161c835af01079e73ebed97b4b5bb77ca500b828940  mes-0.25.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.25.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to update
or refresh it, and then rerun the 'gpg --verify` command.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alternatively, Mes can be installed or updated using Guix:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix pull
guix install mes&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;Changes in 0.25 since 0.24.2&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Core&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Support for riscv64-linux.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Build&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Support M2-Planet build for x86_64-linux.&lt;/li&gt;&lt;li&gt;Building with M2-Planet-1.11.0 is now supported.&lt;/li&gt;&lt;li&gt;The requirement for M2-Planet's --bootstrap-mode was dropped.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Noteworthy bug fixes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;In the REPL, &lt;code&gt;include&lt;/code&gt;, &lt;code&gt;load&lt;/code&gt;, and &lt;code&gt;,use MODULE&lt;/code&gt; now work.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Using mes' &lt;code&gt;access&lt;/code&gt; with R_OK now respects read permissions.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;On 64bit, displayed values are no longer truncated.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;On 64bit, MesCC now correctly supports 8-byte immediate values.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC now initializes struct fields to 0.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The MesCC test suite passes with gcc &amp;gt;= 10
An array overflow bug was fixed in &lt;code&gt;63-struct-cell.c&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Debugging MesCC binaries (function scope) has been resurrected.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;Get informed, get involved&lt;/h1&gt;&lt;p&gt;See &lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable.org&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Join bug-mes@gnu.org and #bootstrappable on irc.libera.chat for
discussions.&lt;/p&gt;&lt;p&gt;Thanks to everyone who contributed to this release:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;12	Andrius Štikonas
 1	Efraim Flashner
24	Ekaitz Zarraga
 1	Emily Trau
69	Janneke Nieuwenhuizen
15	W. J. van der Laan&lt;/code&gt;&lt;/pre&gt;</content></entry><entry><title>The Full-Source Bootstrap: Building from source all the way down</title><id>https://joyofsource.com/the-full-source-bootstrap-building-from-source-all-the-way-down.html</id><author><name>Janneke Nieuwenhuizen, Ludovic Courtès</name><email>janneke@gnu.org</email></author><updated>2023-04-26T16:00:00Z</updated><link href="https://joyofsource.com/the-full-source-bootstrap-building-from-source-all-the-way-down.html" rel="alternate" /><content type="html">&lt;p&gt;We are delighted and somewhat relieved to announce that the third
reduction of the Guix &lt;em&gt;bootstrap binaries&lt;/em&gt; has now been merged in the
main branch of Guix!  If you run &lt;code&gt;guix pull&lt;/code&gt; today, you get a package
graph of more than 22,000 nodes &lt;em&gt;rooted in a 357-byte program&lt;/em&gt;—something
that had never been achieved, to our knowledge, since the birth of Unix.&lt;/p&gt;&lt;p&gt;We refer to this as the &lt;em&gt;Full-Source Bootstrap&lt;/em&gt;.  In this post, we
explain what this means concretely.  This is a major milestone—if not &lt;em&gt;the&lt;/em&gt;
major milestone—in our quest for building &lt;em&gt;everything&lt;/em&gt; from source, all
the way down.&lt;/p&gt;&lt;p&gt;How did we get there, and why?  In &lt;a href=&quot;https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25/&quot;&gt;two previous
&lt;/a&gt;
&lt;a href=&quot;https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/&quot;&gt;blog
posts&lt;/a&gt;,
we elaborated on why this reduction and bootstrappability in general
is so important.&lt;/p&gt;&lt;p&gt;One reason is to properly address supply chain security concerns.  The
Bitcoin community was one of the first to recognize its importance
well enough to put the idea into practice.  At the &lt;a href=&quot;https://breaking-bitcoin.com&quot;&gt;Breaking Bitcoin
conference 2020&lt;/a&gt;, Carl Dong gave a &lt;a href=&quot;https//diyhpl.us/wiki/transcripts/breaking-bitcoin/2019/bitcoin-build-system&quot;&gt;fun
and remarkably gentle
introduction&lt;/a&gt;.
At the end of the talk, Carl states:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;The holy grail for bootstrappability will be connecting &lt;code&gt;hex0&lt;/code&gt; to &lt;code&gt;mes&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Two years ago, at &lt;a href=&quot;https://fosdem.org/2021&quot;&gt;FOSDEM 2021&lt;/a&gt;, I (Janneke)
gave &lt;a href=&quot;https://fosdem.org/2021/schedule/event/gnumes/&quot;&gt;a short talk&lt;/a&gt; about how we
were planning to continue this quest.&lt;/p&gt;&lt;p&gt;If you think one should always be able to build software from source,
then it follows that the &lt;a href=&quot;https://www.archive.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf&quot;&gt;“trusting
trust”&lt;/a&gt;
attack is only a symptom of an incomplete or missing bootstrap story.&lt;/p&gt;&lt;h3&gt;The Road to Full-Source Bootstrap&lt;/h3&gt;&lt;p&gt;Three years ago, the &lt;em&gt;bootstrap binaries&lt;/em&gt; were reduced to just &lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU
Mes&lt;/a&gt; and
&lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;MesCC-Tools&lt;/a&gt; (and
the driver to build Guix packages: a &lt;a href=&quot;https://alpha.gnu.org/pub/gnu/guix/bootstrap/x86_64-linux/20131110/guile-2.0.9.tar.xz&quot;&gt;static
build&lt;/a&gt;
of &lt;a href=&quot;https://www.gnu.org/software/guile&quot;&gt;GNU Guile&lt;/a&gt; 2.0.9).&lt;/p&gt;&lt;p&gt;The new &lt;em&gt;Full-Source Bootstrap&lt;/em&gt;, merged in Guix &lt;code&gt;master&lt;/code&gt; yesterday,
removes the binaries for Mes and MesCC-Tools and replaces them by &lt;a href=&quot;https://github.com/oriansj/bootstrap-seeds&quot;&gt;bootstrap-seeds&lt;/a&gt;.  For x86-linux (which is also used by the x86_64-linux build), this means this program
&lt;a href=&quot;https://github.com/oriansj/bootstrap-seeds/blob/master/POSIX/x86/hex0-seed&quot;&gt;hex0-seed&lt;/a&gt;, with ASCII-equivalent
&lt;a href=&quot;https://github.com/oriansj/bootstrap-seeds/blob/master/POSIX/x86/hex0_x86.hex0&quot;&gt;hex0_x86.hex0&lt;/a&gt;.  Hex0 is self-hosting and its source looks like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;    ; Where the ELF Header is going to hit  
    ; Simply jump to _start  
    ; Our main function  
    # :_start ; (0x8048054)  
    58 # POP_EAX ; Get the number of arguments  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;you can spot two types of line-comment: hex0 (&lt;code&gt;;&lt;/code&gt;) and assembly (&lt;code&gt;#&lt;/code&gt;).
The only program-code in this snippet is &lt;code&gt;58&lt;/code&gt;: two hexidecimal digits
that are taken as two nibbles and compiled into the corresponding byte
with binary value &lt;code&gt;58&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Starting from this 357-byte hex0-seed binary provided by the
&lt;code&gt;bootstrap-seeds&lt;/code&gt;, the &lt;a href=&quot;https://github.com/oriansj/stage0-posix&quot;&gt;stage0-posix
package&lt;/a&gt; created by Jeremiah
Orians first builds hex0 and then all the way up: hex1, catm, hex2,
M0, cc_x86, M1, M2, get_machine (that's all of MesCC-Tools), and
finally &lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The new &lt;a href=&quot;https://gnu.org/s/mes&quot;&gt;GNU Mes&lt;/a&gt; v0.24 release can be built with
M2-Planet.  This time with only a &lt;a href=&quot;https://issues.guix.gnu.org/55227&quot;&gt;remarkably small
change&lt;/a&gt;, the bottom of the package
graph now looks like this (woohoo!):&lt;/p&gt;&lt;pre&gt;&lt;code&gt;                              gcc-mesboot (4.9.4)
                                      ^
                                      |
                                    (...)
                                      ^
                                      |
               binutils-mesboot (2.20.1a), glibc-mesboot (2.2.5),
                          gcc-core-mesboot (2.95.3)
                                      ^
                                      |
                             patch-mesboot (2.5.9)
                                      ^
                                      |
                       bootstrappable-tcc (0.9.26+31 patches)
                                      ^
                                      |
                            gnu-make-mesboot0 (3.80)
                                      ^
                                      |
                              gzip-mesboot (1.2.4)
                                      ^
                                      |
                               tcc-boot (0.9.27)
                                      ^
                                      |
                                 mes-boot (0.24.2)
                                      ^
                                      |
                         stage0-posix (hex0..M2-Planet)
                                      ^
                                      |
                          gash-boot, gash-utils-boot
                                      ^
                                      |
                                      *
                     bootstrap-seeds (357-bytes for x86)
                                     ~~~
                   [bootstrap-guile-2.0.9 driver (~25 MiB)]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&quot;images/gcc-core-mesboot0-full-source-bootstrap-graph.svg&quot;&gt;full graph&lt;/a&gt;&lt;/p&gt;&lt;p&gt;We are excited that the &lt;a href=&quot;https://nlnet.nl&quot;&gt;NLnet Foundation&lt;/a&gt; has &lt;a href=&quot;https://nlnet.nl/project/GNUMes-fullsource&quot;&gt;been
sponsoring this work&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;However, we aren't done yet; far from it.&lt;/p&gt;&lt;h3&gt;Lost Paths&lt;/h3&gt;&lt;p&gt;The idea of reproducible builds and bootstrappable software &lt;a href=&quot;https://lists.reproducible-builds.org/pipermail/rb-general/2017-January/000309.html&quot;&gt;is not
very
new&lt;/a&gt;.
Much of that was implemented for the GNU tools in the early 1990s.
Working to recreate it in present time shows us much of that practice
was forgotten.&lt;/p&gt;&lt;p&gt;Most bootstrap problems or loops are not so easy to solve and
sometimes there are no obvious answers, for example:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;In 2013, the year that &lt;a href=&quot;https://reproducible-builds.org&quot;&gt;Reproducible
Builds&lt;/a&gt; started to gain some
traction, the GNU Compiler Collection &lt;a href=&quot;https//gcc.gnu.org/gcc-4.8/changes.html&quot;&gt;released
version 4.8.0&lt;/a&gt;,
making C++ a build requirement, and&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Even more recently (2018), the GNU C Library &lt;a href=&quot;https://sourceware.org/git/?p=glibc.git;a=commit;h=c6982f7efc1c70fe2d6160a87ee44d871ac85ab0&quot;&gt;glibc-2.28 adds Python
as a build
requirement&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;While these examples make for a delightful puzzle from a
bootstrappability perspective, we would love to see the maintainers of
GNU packages consider bootstrappability and start taking more
responsibility for the bootstrap story of their packages.&lt;/p&gt;&lt;h3&gt;Next Steps&lt;/h3&gt;&lt;p&gt;Despite this major achievement, there is still work ahead.&lt;/p&gt;&lt;p&gt;First, while the package graph is rooted in a 357-byte program, the set
of binaries from which packages are built includes a 25 MiB
statically-linked Guile, &lt;code&gt;guile-bootstrap&lt;/code&gt;, that Guix uses as its driver
to build the initial packages.  25 MiB is a tenth of what the initial
bootstrap binaries use to weigh, but it is a lot compared to those 357
bytes.  Can we get rid of this driver, and how?&lt;/p&gt;&lt;p&gt;A development effort with Timothy Sample addresses the dependency on
&lt;code&gt;guile-bootstrap&lt;/code&gt; of &lt;a href=&quot;https://savannah.nongnu.org/projects/gash&quot;&gt;Gash and
Gash-Utils&lt;/a&gt;, the
pure-Scheme POSIX shell implementation central to our &lt;a href=&quot;https://guix.gnu.org/en/blog/2020/guix-further-reduces-bootstrap-seed-to-25/&quot;&gt;second
milestone&lt;/a&gt;.
On the one hand, Mes is gaining a higher level of Guile compatibility:
hash table interface, record interface, variables and variable-lookup,
and Guile (source) module loading support.  On the other hand, Gash
and Gash-Utils are getting Mes compatibility for features that Mes is
lacking (notably &lt;code&gt;syntax-case&lt;/code&gt; macros).  If we pull this off,
&lt;code&gt;guile-bootstrap&lt;/code&gt; will only be used as a dependency of bootar and as
the driver for Guix.&lt;/p&gt;&lt;p&gt;Second, the full-source bootstrap that just landed in Guix &lt;code&gt;master&lt;/code&gt; is
limited to x86_64-linux and i686-linux, but ARM and RISC-V will be
joining soon.  We are most grateful and excited that the &lt;a href=&quot;https://nlnet.nl&quot;&gt;NLnet
Foundation&lt;/a&gt; has &lt;a href=&quot;https://nlnet.nl/project/GNUMes-ARM_RISC-V&quot;&gt;decided to continue sponsoring this
work&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;Some time ago, Wladimir van der Laan contributed initial RISC-V
support for Mes but a major obstacle for the RISC-V bootstrap is that
the “vintage” GCC-2.95.3 that was such a helpful stepping stone does
not support RISC-V.  Worse, the RISC-V port of GCC was introduced only
in GCC 7.5.0—a version that requires C++ and cannot be
bootstrapped!  To this end, we have been improving MesCC, the C
compiler that comes with Mes, so it is able to
build GCC 4.6.5; meanwhile, Ekaitz Zarraga
&lt;a href=&quot;https://nlnet.nl/project/GNUMes-RISCV/&quot;&gt;backported RISC-V support to GCC
4.6.5&lt;/a&gt;, and backported RISC-V
support from the latest &lt;a href=&quot;https://www.tinycc.org&quot;&gt;tcc&lt;/a&gt; to our
&lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable-tcc&lt;/a&gt;.&lt;/p&gt;&lt;h3&gt;Outlook&lt;/h3&gt;&lt;p&gt;The full-source bootstrap was once deemed impossible.  Yet, here we are,
building the foundations of a GNU/Linux distro entirely from source, a
long way towards the ideal that the Guix project has been aiming for
&lt;a href=&quot;https://guix.gnu.org/manual/en/html_node/Bootstrapping.html&quot;&gt;from the
start&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;There are still some daunting tasks ahead.  For example, what about the
Linux kernel?  The good news is that the bootstrappable community has
grown a lot, from two people six years ago there are now around 100
people in the &lt;code&gt;#bootstrappable&lt;/code&gt; IRC channel.  Interesting times ahead!&lt;/p&gt;&lt;h4&gt;About Bootstrappable Builds and GNU Mes&lt;/h4&gt;&lt;p&gt;Software is bootstrappable when it does not depend on a binary seed
that cannot be built from source.  Software that is not
bootstrappable---even if it is free software---is a serious security
risk (supply chain security)
&lt;a href=&quot;https://www.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf&quot;&gt;for&lt;/a&gt;
&lt;a href=&quot;https://manishearth.github.io/blog/2016/12/02/reflections-on-rusting-trust/&quot;&gt;a&lt;/a&gt;
&lt;a href=&quot;https://www.quora.com/What-is-a-coders-worst-nightmare/answer/Mick-Stute&quot;&gt;variety&lt;/a&gt;
&lt;a href=&quot;https//blog.regehr.org/archives/1241&quot;&gt;of&lt;/a&gt;
&lt;a href=&quot;https://www.alchemistowl.org/pocorgtfo/pocorgtfo08.pdf&quot;&gt;reasons&lt;/a&gt;.
The &lt;a href=&quot;https://bootstrappable.org/&quot;&gt;Bootstrappable Builds&lt;/a&gt; project aims
to reduce the number and size of binary seeds to a bare minimum.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes/&quot;&gt;GNU Mes&lt;/a&gt; is closely related to the
Bootstrappable Builds project.  Mes is used in the full-source
bootstrap path for the Guix System.&lt;/p&gt;&lt;p&gt;Currently, Mes consists of a mutual self-hosting scheme interpreter
and C compiler.  It also implements a C library.  Mes, the scheme
interpreter, is written in about 5,000 lines of code of simple C and
can be built with &lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt;.
MesCC, the C compiler, is written in scheme.  Together, Mes and MesCC
can compile &lt;a href=&quot;https//gitlab.com/janneke/tinycc&quot;&gt;bootstrappable TinyCC&lt;/a&gt;
that is self-hosting.  Using this TinyCC and the Mes C library, the
entire Guix System for i686-linux and x86_64-linux is bootstrapped.&lt;/p&gt;&lt;h4&gt;About GNU Guix&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://guix.gnu.org&quot;&gt;GNU Guix&lt;/a&gt; is a transactional package manager and
an advanced distribution of the GNU system that &lt;a href=&quot;https://www.gnu.org/distros/free-system-distribution-guidelines.html&quot;&gt;respects user
freedom&lt;/a&gt;.
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.&lt;/p&gt;&lt;p&gt;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 &lt;a href=&quot;https://www.gnu.org/software/guile&quot;&gt;Guile&lt;/a&gt;
programming interfaces and extensions to the
&lt;a href=&quot;https//schemers.org&quot;&gt;Scheme&lt;/a&gt; language.&lt;/p&gt;</content></entry><entry><title>GNU Mes 0.24.2 released</title><id>https://joyofsource.com/gnu-mes-0242-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2023-02-15T09:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-0242-released.html" rel="alternate" /><content type="html">&lt;p&gt;We are happy to announce the release of GNU Mes 0.24.2, representing 25
commits over nine months by four people.&lt;/p&gt;&lt;p&gt;This release should fix the long standing `stat64' bug
&lt;a href=&quot;https://debbugs.gnu.org/41264&quot;&gt;#41264&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;We are very grateful that the &lt;a href=&quot;https://nlnet.nl&quot;&gt;NLnet Foundation&lt;/a&gt; is
sponsoring this work!&lt;/p&gt;&lt;h1&gt;What's next?&lt;/h1&gt;&lt;p&gt;Work to prototype this so-called &amp;quot;Full Source Bootstrap&amp;quot; for ARM on
Aarch64 is happening on the &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-aarch64-bootstrap&quot;&gt;Guix wip-aarch64-bootstrap
branch&lt;/a&gt;
branch.  Also, full Guile compatible module support, and RISC-V
support.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;h1&gt;About&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter
and C compiler for bootstrapping the GNU System.  Since version 0.22
it has again helped to halve the size of opaque, uninspectable binary
seeds that are currently being used in the &lt;a href=&quot;https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/&quot;&gt;Reduced Binary Seed
bootstrap&lt;/a&gt;
of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt;.  The final goal is
to help create a full source bootstrap as part of the &lt;a href=&quot;https//bootstrappable.org&quot;&gt;bootstrappable
builds&lt;/a&gt; effort for UNIX-like operating
systems.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  Mes can
now be bootstrapped from
&lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt; and
&lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;Mescc-Tools&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes has a Garbage Collector, a library of loadable Scheme modules--
notably Dominique Boucher's
&lt;a href=&quot;https://github.com/schemeway/lalr-scm&quot;&gt;LALR&lt;/a&gt;, Pre-R6RS &lt;a href=&quot;https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html&quot;&gt;portable
syntax-case&lt;/a&gt;
with R7RS ellipsis, Matt Wette's &lt;a href=&quot;https://www.nongnu.org/nyacc&quot;&gt;Nyacc&lt;/a&gt;
--and test suite, just enough to support a REPL and a C99 compiler:
mescc.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable
TinyCC&lt;/a&gt; that is self-hosting.
Using this tcc and the Mes C library we now have a Reduced Binary Seed
bootstrap for the gnutools triplet: glibc-2.2.5, binutils-2.20.1,
gcc-2.95.3.  This is enough to bootstrap Guix for i686-linux,
x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes is inspired by The Maxwell Equations of Software:
&lt;a href=&quot;https//www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt;
-- John McCarthy page 13, GNU Guix's source/binary packaging
transparency and Jeremiah Orians's
&lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt; ~500 byte self-hosting hex
assembler.&lt;/p&gt;&lt;h1&gt;Download&lt;/h1&gt;&lt;pre&gt;&lt;code&gt;git clone git://git.savannah.gnu.org/mes.git&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature[*]:&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.24.2.tar.gz&quot;&gt;mes-0.24.2.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.24.2.tar.gz.sig&quot;&gt;mes-0.24.2.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.24.2.tar.gz&quot;&gt;mes-0.24.2.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.24.2.tar.gz.sig&quot;&gt;mes-0.24.2.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Here are the SHA1 and SHA256 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;30b0ce4cd37c87dca37b85a6c19646001881be46  mes-0.24.2.tar.gz  
7ddae0854e46ebfa18c13ab37e64839a7b86ea88aeed366a8d017efd11dae86e  mes-0.24.2.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.24.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to update
or refresh it, and then rerun the 'gpg --verify' command.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;Get informed, get involved&lt;/h1&gt;&lt;p&gt;See &lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable.org&lt;/a&gt;&lt;br /&gt;Join #bootstrappable on irc.libera.chat&lt;/p&gt;&lt;h2&gt;NEWS&lt;/h2&gt;&lt;h3&gt;Changes in 0.24.2 since 0.24.1&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Build&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A number of compile warnings have been fixed.&lt;/li&gt;&lt;li&gt;The &lt;code&gt;simple.make&lt;/code&gt; and &lt;code&gt;simple.sh&lt;/code&gt; builds have been resurrected.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Some assembly defines were added for building TinyCC for x86_64.&lt;/li&gt;&lt;li&gt;&lt;code&gt;__assert_fail&lt;/code&gt; has been updated to use the standard signature.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Noteworthy bug fixes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;A bootstrap build without M2-Planet is now supported again.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;gettimeofday&lt;/code&gt; no longer segfaults in the M2-Planet build.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;stat64&lt;/code&gt; and friends are now used on 32bit platforms.
This fixes &lt;a href=&quot;https://debbugs.gnu.org/41264&quot;&gt;#41264&lt;/a&gt;, and should also fix
&lt;a href=&quot;https://debbugs.gnu.org/49985&quot;&gt;#49985&lt;/a&gt;,
&lt;a href=&quot;https://debbugs.gnu.org/53415&quot;&gt;#53415&lt;/a&gt;, and
&lt;a href=&quot;https://debbugs.gnu.org/53416&quot;&gt;#53416&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The Mes C Library now supports uppercase hex conversions.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Links&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://debbugs.gnu.org/41264&quot;&gt;#41264&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://nlnet.nl/project/GNUMes-ARM_RISC-V&quot;&gt;NLnet Full Source Bootstrap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-aarch64-bootstrap&quot;&gt;Guix wip-aarch64-bootstrap branch&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25&quot;&gt;Reduced Binary Seed Bootstrap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://bootstrappable.org&quot;&gt;Bootstrappable builds&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;MesCC-Tools&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/schemeway/lalr-scm&quot;&gt;LALR&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html&quot;&gt;portable syntax-case&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.nongnu.org/nyacc&quot;&gt;NYACC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;Bootstrappable TinyCC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https//www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/oriansj/stage0-posix&quot;&gt;stage0-posix&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;</content></entry><entry><title>GNU Mes 0.24.1 released</title><id>https://joyofsource.com/gnu-mes-0241-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2022-10-16T11:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-0241-released.html" rel="alternate" /><content type="html">&lt;p&gt;We are happy to announce the release of GNU Mes 0.24.1, representing 23
commits over five months by four people.&lt;/p&gt;&lt;p&gt;Mes now supports the stage0-posix and M2-Planet Full Source bootstrap on
Aarch64 for ARM.  Because stage0-posix does not support ARM yet, the Mes
ARM bootstrap is currently prototyped on Aarch64.&lt;/p&gt;&lt;p&gt;We are excited that the NlNet Foundation[4] is again sponsoring this
work!&lt;/p&gt;&lt;p&gt;What's next?&lt;/p&gt;&lt;p&gt;Work to prototype this so-called &amp;quot;Full Source Bootstrap&amp;quot; for ARM on
Aarch64 is happening on the wip-aarch64-bootstrap[3] branch.  Also, full
Guile compatible module support, and RISC-V support.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;h1&gt;About&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter
and C compiler for bootstrapping the GNU System.  Since version 0.22
it has again helped to halve the size of opaque, uninspectable binary
seeds that are currently being used in the &lt;a href=&quot;https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/&quot;&gt;Reduced Binary Seed
bootstrap&lt;/a&gt;
of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt;.  The final goal is
to help create a full source bootstrap as part of the &lt;a href=&quot;https//bootstrappable.org&quot;&gt;bootstrappable
builds&lt;/a&gt; effort for UNIX-like operating
systems.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  Mes can
now be bootstrapped from
&lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt; and
&lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;Mescc-Tools&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes has a Garbage Collector, a library of loadable Scheme modules--
notably Dominique Boucher's
&lt;a href=&quot;https://github.com/schemeway/lalr-scm&quot;&gt;LALR&lt;/a&gt;, Pre-R6RS &lt;a href=&quot;https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html&quot;&gt;portable
syntax-case&lt;/a&gt;
with R7RS ellipsis, Matt Wette's &lt;a href=&quot;https://www.nongnu.org/nyacc&quot;&gt;Nyacc&lt;/a&gt;
--and test suite, just enough to support a REPL and a C99 compiler:
mescc.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable
TinyCC&lt;/a&gt; that is self-hosting.
Using this tcc and the Mes C library we now have a Reduced Binary Seed
bootstrap for the gnutools triplet: glibc-2.2.5, binutils-2.20.1,
gcc-2.95.3.  This is enough to bootstrap Guix for i686-linux,
x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes is inspired by The Maxwell Equations of Software:
&lt;a href=&quot;https//www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt;
-- John McCarthy page 13, GNU Guix's source/binary packaging
transparency and Jeremiah Orians's
&lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt; ~500 byte self-hosting hex
assembler.&lt;/p&gt;&lt;h1&gt;Download&lt;/h1&gt;&lt;pre&gt;&lt;code&gt;git clone git://git.savannah.gnu.org/mes.git&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature[*]:&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.24.1.tar.gz&quot;&gt;mes-0.24.1.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.24.1.tar.gz.sig&quot;&gt;mes-0.24.1.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.24.1.tar.gz&quot;&gt;mes-0.24.1.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.24.1.tar.gz.sig&quot;&gt;mes-0.24.1.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Here are the SHA1 and SHA256 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;bceaaaf1cafaa31ccb1ee1247ce2dd651a2f67be  mes-0.24.1.tar.gz  
35120ceb0676632e58973355b9f86dff9cc717ed65ed2a17ff5272c59f2a0535  mes-0.24.1.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.24.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to update
or refresh it, and then rerun the 'gpg --verify' command.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;Get informed, get involved&lt;/h1&gt;&lt;p&gt;See &lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable.org&lt;/a&gt;&lt;br /&gt;Join #bootstrappable on irc.libera.chat&lt;/p&gt;&lt;h2&gt;NEWS&lt;/h2&gt;&lt;h3&gt;Changes in 0.24.1 since 0.24&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Build&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Support M2-Planet bootstrap for ARM.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The Mes C Library now supports bootstrapping ARM.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Noteworthy bug fixes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;The definition of S_ISUID was fixed.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Unsigned modulo has been fixed for ARM.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;A bug with abtol has been fixed.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Workarounds for building with gcc-12.2.0 have been added.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Links&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/oriansj/stage0-posix&quot;&gt;stage0-posix&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/oriansj/bootstrap-seeds&quot;&gt;bootstrap-seeds&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://archive.fosdem.org/2021/schedule/event/gnumes&quot;&gt;FOSDEM21 GNU Mes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-full-source-bootstrap&quot;&gt;Guix wip-full-source-bootstrap branch&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://nlnet.nl/project/GNUMes-ARM_RISC-V&quot;&gt;NLnet Full Source Bootstrap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25&quot;&gt;Reduced Binary Seed Bootstrap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://bootstrappable.org&quot;&gt;Bootstrappable builds&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;MesCC-Tools&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/schemeway/lalr-scm&quot;&gt;LALR&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html&quot;&gt;portable syntax-case&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.nongnu.org/nyacc&quot;&gt;NYACC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;TinyCC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https//www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://savannah.nongnu.org/projects/stage0&quot;&gt;Stage0&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;</content></entry><entry><title>GNU Mes 0.24 released</title><id>https://joyofsource.com/gnu-mes-024-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2022-05-02T20:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-024-released.html" rel="alternate" /><content type="html">&lt;p&gt;We are thrilled to announce the release of GNU Mes 0.24, representing
222 commits over one year by four people.&lt;/p&gt;&lt;p&gt;Mes has now been ported to M2-Planet and can be bootstrapped using
&lt;a href=&quot;https://github.com/oriansj/stage0-posix&quot;&gt;stage0-posix&lt;/a&gt; , starting
from the 357-byte hex0 binary of the
&lt;a href=&quot;https://github.com/oriansj/bootstrap-seeds&quot;&gt;bootstrap-seeds&lt;/a&gt;, as was
promised at
&lt;a href=&quot;https://archive.fosdem.org/2021/schedule/event/gnumes/&quot;&gt;FOSDEM'21&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;We are exciteda that the &lt;a href=&quot;https://nlnet.nl/project/GNUMes-ARM_RISC-V&quot;&gt;NLnet
Foundation&lt;/a&gt; is again
sponsoring this work!&lt;/p&gt;&lt;p&gt;What's next?&lt;/p&gt;&lt;p&gt;Work to integrate this so-called &amp;quot;Full Source Bootstrap&amp;quot; is happening
on &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-full-source-bootstrap&quot;&gt;wip-full-source-bootstrap
branch&lt;/a&gt;&lt;/p&gt;&lt;p&gt;branch.  Also, full Guile compatible module support, and RICS-V
support.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;h1&gt;About&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter
and C compiler for bootstrapping the GNU System.  Since version 0.22
it has again helped to halve the size of opaque, uninspectable binary
seeds that are currently being used in the &lt;a href=&quot;https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/&quot;&gt;Reduced Binary Seed
bootstrap&lt;/a&gt;
of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt;.  The final goal is
to help create a full source bootstrap as part of the &lt;a href=&quot;https//bootstrappable.org&quot;&gt;bootstrappable
builds&lt;/a&gt; effort for UNIX-like operating
systems.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  Mes can
now be bootstrapped from
&lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt; and
&lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;Mescc-Tools&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes has a Garbage Collector, a library of loadable Scheme modules--
notably Dominique Boucher's
&lt;a href=&quot;https://github.com/schemeway/lalr-scm&quot;&gt;LALR&lt;/a&gt;, Pre-R6RS &lt;a href=&quot;https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html&quot;&gt;portable
syntax-case&lt;/a&gt;
with R7RS ellipsis, Matt Wette's &lt;a href=&quot;https://www.nongnu.org/nyacc&quot;&gt;Nyacc&lt;/a&gt;
--and test suite, just enough to support a REPL and a C99 compiler:
mescc.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable
TinyCC&lt;/a&gt; that is self-hosting.
Using this tcc and the Mes C library we now have a Reduced Binary Seed
bootstrap for the gnutools triplet: glibc-2.2.5, binutils-2.20.1,
gcc-2.95.3.  This is enough to bootstrap Guix for i686-linux,
x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes is inspired by The Maxwell Equations of Software:
&lt;a href=&quot;https//www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt;
-- John McCarthy page 13, GNU Guix's source/binary packaging
transparency and Jeremiah Orians's
&lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt; ~500 byte self-hosting hex
assembler.&lt;/p&gt;&lt;h1&gt;Download&lt;/h1&gt;&lt;pre&gt;&lt;code&gt;git clone git://git.savannah.gnu.org/mes.git&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature[*]:&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.24.tar.gz&quot;&gt;mes-0.24.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.24.tar.gz.sig&quot;&gt;mes-0.24.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.24.tar.gz&quot;&gt;mes-0.24.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.24.tar.gz.sig&quot;&gt;mes-0.24.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Here are the SHA1 and SHA256 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;f6681aa02edc6729af43f1d7c46ae1a97cbc1c92  mes-0.24.tar.gz  
828be15e02c103df8a248232491fba10d763724d6ec10f08a2e0e1d249bd9902  mes-0.24.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.24.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to update
or refresh it, and then rerun the 'gpg --verify' command.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;Get informed, get involved&lt;/h1&gt;&lt;p&gt;See &lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable.org&lt;/a&gt;&lt;br /&gt;Join #bootstrappable on irc.libera.chat&lt;/p&gt;&lt;h2&gt;NEWS&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Changes in 0.24 since 0.23&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Core&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Mes and Mes C Library can now be built with M2-Planet.&lt;/li&gt;&lt;li&gt;Mes now supports the --bootstrap build on ARM.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC&lt;/p&gt;&lt;ul&gt;&lt;li&gt;MesCC now supports the integer suffixes:&lt;br /&gt;Next to &lt;code&gt;U&lt;/code&gt;, also support &lt;code&gt;ULL&lt;/code&gt;, &lt;code&gt;UL&lt;/code&gt;, &lt;code&gt;L&lt;/code&gt;, and &lt;code&gt;LL&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Noteworthy bug fixes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;MesCC now uses the unsigned type for sizeof.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC now only uses signed division if numerator is signed.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The Mes C library now supports an argv bigger than 255.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Development build support with Guile-2 was resurrected.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The logand procedure now works correctly.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The 64bit build was resurrected.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Links&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/oriansj/stage0-posix&quot;&gt;stage0-posix&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/oriansj/bootstrap-seeds&quot;&gt;bootstrap-seeds&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://archive.fosdem.org/2021/schedule/event/gnumes&quot;&gt;FOSDEM21 GNU Mes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-full-source-bootstrap&quot;&gt;Guix wip-full-source-bootstrap branch&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://nlnet.nl/project/GNUMes-ARM_RISC-V&quot;&gt;NLnet Full Source Bootstrap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25&quot;&gt;Reduced Binary Seed Bootstrap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://bootstrappable.org&quot;&gt;Bootstrappable builds&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://savannah.nongnu.org/projects/mescc-tools&quot;&gt;MesCC-Tools&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/schemeway/lalr-scm&quot;&gt;LALR&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html&quot;&gt;portable syntax-case&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.nongnu.org/nyacc&quot;&gt;NYACC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;TinyCC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https//www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://savannah.nongnu.org/projects/stage0&quot;&gt;Stage0&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;</content></entry><entry><title>GNU Mes 0.23.1 released</title><id>https://joyofsource.com/gnu-mes-0231-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2022-03-01T17:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-0231-released.html" rel="alternate" /><content type="html">&lt;p&gt;We are happy to announce the release of GNU Mes 0.23.1, representing 22
commits over one year by four people.&lt;/p&gt;&lt;p&gt;Mes was ported to ARM and can now be used in the GNU Guix Reduced Binary
Seed bootstrap as described here&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25/&quot;&gt;Guix Further Reduces Bootstrap Seed to 25%&lt;/a&gt;&lt;/p&gt;&lt;p&gt;and now also for armhf-linux and aarch-linux.  Work to integrate this
into Guix is ongoing: bootstrappable-tinycc and gcc-core-2.95.3 have
been built.&lt;/p&gt;&lt;p&gt;We are excited that the &lt;a href=&quot;https://nlnet.nl/project/GNUMes&quot;&gt;Nlnet
Foundation&lt;/a&gt; is sponsoring this work!&lt;/p&gt;&lt;p&gt;Enjoy,
Janneke and Danny.&lt;/p&gt;&lt;h1&gt;About&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter
and C compiler for bootstrapping the GNU System.  Since version 0.22
it has again helped to halve the size of opaque, uninspectable binary
seeds that are currently being used in the &lt;a href=&quot;https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25&quot;&gt;Reduced Binary Seed
bootstrap&lt;/a&gt;
of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt; .  The final goal is
to help create a full source bootstrap as part of the &lt;a href=&quot;https//bootstrappable.org&quot;&gt;bootstrappable
builds&lt;/a&gt; effort for UNIX-like operating
systems.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  This
mes.c is now being simplified to be transpiled by
&lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes has a Garbage Collector, a library of loadable Scheme modules--
notably Dominique Boucher's
&lt;a href=&quot;https://github.com/schemeway/lalr-scm&quot;&gt;LALR&lt;/a&gt;, pre-R6RS &lt;a href=&quot;https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html&quot;&gt;portable
syntax-case&lt;/a&gt;
with R7RS ellipsis, Matt Wette's &lt;a href=&quot;https://www.nongnu.org/nyacc&quot;&gt;Nyacc&lt;/a&gt;
–and test suite, just --and test suite, just enough to support
a REPL and a C99 compiler: mescc.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https//gitlab.com/janneke/tinycc&quot;&gt;bootstrappable
TinyCC&lt;/a&gt; that is self-hosting.  Using
this tcc and the Mes C library we now have a Reduced Binary Seed
bootstrap for the gnutools triplet: glibc-2.2.5, binutils-2.20.1,
gcc-2.95.3.  This is enough to bootstrap Guix for i686-linux,
x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes is inspired by The Maxwell Equations of Software: LISP-1.5
&lt;a href=&quot;https//www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt;
– -- John McCarthy page 13, GNU Guix's source/binary packaging
transparency and Jeremiah Orians's
&lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt; ~500 byte self-hosting hex
assembler.&lt;/p&gt;&lt;p&gt;We are very grateful to NLNet for sponsoring the &lt;a href=&quot;https://nlnet.nl/project/GNUMes&quot;&gt;Reduced Binary Seed
bootstrap&lt;/a&gt; and the &lt;a href=&quot;https://nlnet.nl/project/GNUMes-arm&quot;&gt;ARM
port&lt;/a&gt; .&lt;/p&gt;&lt;h1&gt;Download&lt;/h1&gt;&lt;p&gt;git clone git://git.savannah.gnu.org/mes.git&lt;/p&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature[*]:&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.23.1.tar.gz&quot;&gt;ftp.gnu.org/gnu/mes/mes-0.23.1.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.23.1.tar.gz.sig&quot;&gt;ftp.gnu.org/gnu/mes/mes-0.23.1.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.23.1.tar.gz&quot;&gt;ftpmirror.gnu.org/mes/mes-0.23.1.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.23.1.tar.gz.sig&quot;&gt;ftpmirror.gnu.org/mes/mes-0.23.1.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Here are the MD5 and SHA1 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;16b5bdf1c1ec0b743652f769b7bed772  mes-0.23.1.tar.gz  
a73b69e903eaab94c680d50436b51366e770130c  mes-0.23.1.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.23.1.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
then run this command to import it:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and rerun the 'gpg --verify' command.&lt;/p&gt;&lt;h1&gt;Get informed, get involved&lt;/h1&gt;&lt;p&gt;See &lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable.org&lt;/a&gt;&lt;br /&gt;Join #bootstrappable on irc.freenode.net.&lt;/p&gt;&lt;h2&gt;Changes in 0.23.1 since 0.23&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Build: Move to libera.chat.&lt;/li&gt;&lt;li&gt;&lt;p&gt;Core&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Mes and Mes C Library can now support ARM bootstrap.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC&lt;/p&gt;&lt;ul&gt;&lt;li&gt;MesCC now supports ARM bootstrap.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Noteworthy bug fixes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Stack frame 0 does not perform out of bounds access.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC's -m64 works again.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Guile-2 support has been resurrected.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;logand has been fixed.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Mes C Library now supports more than 255 command line parameters.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25&quot;&gt;Reduced Binary Seed bootstrap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://bootstrappable.org&quot;&gt;Bootstrappable builds&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/schemeway/lalr-scm&quot;&gt;LALR&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html&quot;&gt;portable syntax-case&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.nongnu.org/nyacc&quot;&gt;Nyacc&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable TinyCC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https//www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://savannah.nongnu.org/projects/stage0&quot;&gt;Stage0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://nlnet.nl/project/GNUMes&quot;&gt;NLnet GNU Mes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://nlnet.nl/project/GNUMes-arm&quot;&gt;NLnet GNU Mes ARM&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content></entry><entry><title>GNU Mes 0.23 released</title><id>https://joyofsource.com/gnu-mes-023-released.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2021-03-14T17:00:00Z</updated><link href="https://joyofsource.com/gnu-mes-023-released.html" rel="alternate" /><content type="html">&lt;p&gt;We are happy to announce the release of GNU Mes 0.23, representing 125
commits over one year by four people.&lt;/p&gt;&lt;p&gt;Mes was ported to ARM and can now be used in the GNU Guix Reduced Binary
Seed bootstrap as described here&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25/&quot;&gt;Guix Further Reduces Bootstrap Seed to 25%&lt;/a&gt;&lt;/p&gt;&lt;p&gt;and now also for armhf-linux and aarch-linux.  Work to integrate this
into Guix is ongoing: bootstrappable-tinycc and gcc-core-2.95.3 have
been built.&lt;/p&gt;&lt;p&gt;We are excited that the &lt;a href=&quot;https://nlnet.nl/project/GNUMes&quot;&gt;Nlnet
Foundation&lt;/a&gt; is sponsoring this work!&lt;/p&gt;&lt;p&gt;Enjoy,
Janneke and Danny.&lt;/p&gt;&lt;h1&gt;About&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt; is a Scheme interpreter
and C compiler for bootstrapping the GNU System.  Since version 0.22
it has again helped to halve the size of opaque, uninspectable binary
seeds that are currently being used in the &lt;a href=&quot;https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25&quot;&gt;Reduced Binary Seed
bootstrap&lt;/a&gt;
of &lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt; .  The final goal is
to help create a full source bootstrap as part of the &lt;a href=&quot;https//bootstrappable.org&quot;&gt;bootstrappable
builds&lt;/a&gt; effort for UNIX-like operating
systems.&lt;/p&gt;&lt;p&gt;The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
compiler written in Scheme and these are mutual self-hosting.  This
mes.c is now being simplified to be transpiled by
&lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mes has a Garbage Collector, a library of loadable Scheme modules--
notably Dominique Boucher's
&lt;a href=&quot;https://github.com/schemeway/lalr-scm&quot;&gt;LALR&lt;/a&gt;, pre-R6RS &lt;a href=&quot;https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html&quot;&gt;portable
syntax-case&lt;/a&gt;
with R7RS ellipsis, Matt Wette's &lt;a href=&quot;https://www.nongnu.org/nyacc&quot;&gt;Nyacc&lt;/a&gt;
–and test suite, just --and test suite, just enough to support
a REPL and a C99 compiler: mescc.&lt;/p&gt;&lt;p&gt;Mes + MesCC + Mes C Library can build a &lt;a href=&quot;https//gitlab.com/janneke/tinycc&quot;&gt;bootstrappable
TinyCC&lt;/a&gt; that is self-hosting.  Using
this tcc and the Mes C library we now have a Reduced Binary Seed
bootstrap for the gnutools triplet: glibc-2.2.5, binutils-2.20.1,
gcc-2.95.3.  This is enough to bootstrap Guix for i686-linux,
x86_64-linux, armhf-linux and aarch64-linux.&lt;/p&gt;&lt;p&gt;Mes is inspired by The Maxwell Equations of Software: LISP-1.5
&lt;a href=&quot;https//www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt;
– -- John McCarthy page 13, GNU Guix's source/binary packaging
transparency and Jeremiah Orians's
&lt;a href=&quot;https://github.com/oriansj/stage0&quot;&gt;stage0&lt;/a&gt; ~500 byte self-hosting hex
assembler.&lt;/p&gt;&lt;p&gt;We are very grateful to NLNet for sponsoring the &lt;a href=&quot;https://nlnet.nl/project/GNUMes&quot;&gt;Reduced Binary Seed
bootstrap&lt;/a&gt; and the &lt;a href=&quot;https://nlnet.nl/project/GNUMes-arm&quot;&gt;ARM
port&lt;/a&gt; .&lt;/p&gt;&lt;h1&gt;Download&lt;/h1&gt;&lt;p&gt;git clone git://git.savannah.gnu.org/mes.git&lt;/p&gt;&lt;p&gt;Here are the compressed sources and a GPG detached signature[*]:&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.23.tar.gz&quot;&gt;ftp.gnu.org/gnu/mes/mes-0.23.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftp.gnu.org/gnu/mes/mes-0.23.tar.gz.sig&quot;&gt;ftp.gnu.org/gnu/mes/mes-0.23.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Use a mirror for higher download bandwidth:&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.23.tar.gz&quot;&gt;ftpmirror.gnu.org/mes/mes-0.23.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ftpmirror.gnu.org/mes/mes-0.23.tar.gz.sig&quot;&gt;ftpmirror.gnu.org/mes/mes-0.23.tar.gz.sig&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Here are the MD5 and SHA1 checksums:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;e9a0ae6e2c3842cf57fccb54909463ba  mes-0.23.tar.gz  
0560879358e5a980f7374844c495c92014b47878  mes-0.23.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --verify mes-0.23.tar.gz.sig&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If that command fails because you don't have the required public key,
then run this command to import it:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and rerun the 'gpg --verify' command.&lt;/p&gt;&lt;h1&gt;Get informed, get involved&lt;/h1&gt;&lt;p&gt;See &lt;a href=&quot;https://bootstrappable.org&quot;&gt;bootstrappable.org&lt;/a&gt;&lt;br /&gt;Join #bootstrappable on irc.freenode.net.&lt;/p&gt;&lt;h2&gt;Changes in 0.23 since 0.22&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Core&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Mes and Mes C Library can now be built with GCC 10.x.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MesCC&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The Mes C Library now supports an armhf-linux bootstrap.&lt;/li&gt;&lt;li&gt;MesCC now supports ARM.&lt;/li&gt;&lt;li&gt;mini.c library was split into _exit.c, and _write.c.&lt;/li&gt;&lt;li&gt;When building with GCC, -lgcc is now used.&lt;/li&gt;&lt;li&gt;MesCC now has it's own support library libmescc.a (-lmescc).&lt;/li&gt;&lt;li&gt;MesCC now requires mescc-tools-0.7.0 or later for ARM.&lt;/li&gt;&lt;li&gt;MesCC can be now built with nyacc-1.00.2:
note that nyacc-1.03.0 is not (backwards) compatible.&lt;/li&gt;&lt;li&gt;MesCC can be built with Guile 3.0.x: See
&lt;a href=&quot;https://bugs.gnu.org/43831&quot;&gt;bugs.gnu.org/43831&lt;/a&gt;; use guild
compile -O1 with Guile 3.0.x.&lt;/li&gt;&lt;li&gt;MesCC now raises SIGABRT on abort, if supported.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Noteworthy bug fixes&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;unreadchar on EOF is now a no-op.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;malloc now aligns the blocks it gives out to max_align_t.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU Mes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25&quot;&gt;Reduced Binary Seed bootstrap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://bootstrappable.org&quot;&gt;Bootstrappable builds&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/schemeway/lalr-scm&quot;&gt;LALR&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html&quot;&gt;portable syntax-case&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.nongnu.org/nyacc&quot;&gt;Nyacc&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://gitlab.com/janneke/tinycc&quot;&gt;bootstrappable TinyCC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https//www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&quot;&gt;LISP-1.5&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://savannah.nongnu.org/projects/stage0&quot;&gt;Stage0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://nlnet.nl/project/GNUMes&quot;&gt;NLnet GNU Mes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://nlnet.nl/project/GNUMes-arm&quot;&gt;NLnet GNU Mes ARM&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content></entry><entry><title>We did it!</title><id>https://joyofsource.com/we-did-it.html</id><author><name>Janneke Nieuwenhuizen</name><email>janneke@gnu.org</email></author><updated>2021-01-07T08:00:00Z</updated><link href="https://joyofsource.com/we-did-it.html" rel="alternate" /><content type="html">&lt;p&gt;Last Monday I &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-devel/2021-01/msg00036.html&quot;&gt;sent an
update&lt;/a&gt;
essentially saying $Subject:&lt;/p&gt;&lt;h1&gt;WE DID IT!!!&lt;/h1&gt;&lt;p&gt;A proper blog post will follow once &lt;a href=&quot;https://gnu.org/s/mes&quot;&gt;GNU Mes&lt;/a&gt;
0.24 has been released and the &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-full-source-bootstrap&quot;&gt;Full Source
Bootstrap&lt;/a&gt;
has been merged, i.e, when &lt;a href=&quot;https://guix.gnu.org&quot;&gt;GNU Guix&lt;/a&gt; has a
bootstrap rooted in &lt;a href=&quot;https://github.com/oriansj/bootstrap-seeds/blob/master/POSIX/x86/hex0-seed&quot;&gt;this 357-byte
hex0-seed&lt;/a&gt;
binary with an
&lt;a href=&quot;https://github.com/oriansj/bootstrap-seeds/blob/master/POSIX/x86/hex0_x86.hex0&quot;&gt;ASCII-equivalent&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Once released, this is what the bottom of the provisional Guix package
graph will looks like
&lt;img src=&quot;images/gcc-core-mesboot0-fsb.png&quot; alt=&quot;gcc-mesboot-bag-graph&quot; /&gt;.&lt;/p&gt;&lt;p&gt;At &lt;a href=&quot;https://fosdem.org/2021/&quot;&gt;FOSDEM'21&lt;/a&gt; I will be &lt;a href=&quot;https://fosdem.org/2021/schedule/event/gnumes/&quot;&gt;giving a short
talk&lt;/a&gt; in the
&lt;a href=&quot;https://fosdem.org/2021/schedule/track/declarative_and_minimalistic_computing/&quot;&gt;Declarative and Minimalistic Computing
devroom&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Coverage&lt;/p&gt;&lt;ul&gt;&lt;li&gt;2021-01-06: &lt;a href=&quot;https://lwn.net/&quot;&gt;Linux Weekly News&lt;/a&gt; has a story on &lt;a href=&quot;https://lwn.net/Articles/841797/&quot;&gt;Bootstrappable builds&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;About Bootstrappable Builds and GNU Mes&lt;/h4&gt;&lt;p&gt;Software is bootstrappable when it does not depend on a binary seed
that cannot be built from source.  Software that is not
bootstrappable---even if it is free software---is a serious security
risk
&lt;a href=&quot;https://www.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf&quot;&gt;for&lt;/a&gt;
&lt;a href=&quot;https://manishearth.github.io/blog/2016/12/02/reflections-on-rusting-trust/&quot;&gt;a&lt;/a&gt;
&lt;a href=&quot;https://www.quora.com/What-is-a-coders-worst-nightmare/answer/Mick-Stute&quot;&gt;variety&lt;/a&gt;
&lt;a href=&quot;https//blog.regehr.org/archives/1241&quot;&gt;of&lt;/a&gt;
&lt;a href=&quot;https://www.alchemistowl.org/pocorgtfo/pocorgtfo08.pdf&quot;&gt;reasons&lt;/a&gt;.
The &lt;a href=&quot;https://bootstrappable.org/&quot;&gt;Bootstrappable Builds&lt;/a&gt; project aims
to reduce the number and size of binary seeds to a bare minimum.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes/&quot;&gt;GNU Mes&lt;/a&gt; is closely related to the
Bootstrappable Builds project.  Mes aims to create an entirely
source-based bootstrapping path for the Guix System and other
interested GNU/Linux distributions.  The goal is to start from a
&lt;a href=&quot;https://github.com/oriansj/bootstrap-seeds/blob/master/POSIX/x86/hex0-seed&quot;&gt;minimal, easily inspectable
binary&lt;/a&gt;
that has an
&lt;a href=&quot;https://github.com/oriansj/bootstrap-seeds/blob/master/POSIX/x86/hex0_x86.hex0&quot;&gt;ASCII-equivalent&lt;/a&gt;
and bootstrap into something close to R6RS Scheme.&lt;/p&gt;&lt;p&gt;Currently, Mes consists of a mutual self-hosting scheme interpreter
and C compiler.  It also implements a C library.  Mes, the scheme
interpreter, is written in about 5,000 lines of code of simple C or
M2.  It can be bootstrapped using the
&lt;a href=&quot;https://github.com/OriansJ/M2-Planet&quot;&gt;M2-Planet&lt;/a&gt; transpiler from the
&lt;a href=&quot;https://savannah.gnu.org/projects/stage0&quot;&gt;Stage0 project&lt;/a&gt;.
MesCC, the C compiler, is written in scheme.  Together, Mes and
MesCC can compile &lt;a href=&quot;https//gitlab.com/janneke/tinycc&quot;&gt;a lightly patched
TinyCC&lt;/a&gt; that is self-hosting.  Using
this TinyCC and the Mes C library, it is possible to bootstrap the
entire Guix System for i686-linux and x86_64-linux.&lt;/p&gt;&lt;h4&gt;About GNU Guix&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://guix.gnu.org&quot;&gt;GNU Guix&lt;/a&gt; is a transactional package
manager and an advanced distribution of the GNU system that &lt;a href=&quot;https://www.gnu.org/distros/free-system-distribution-guidelines.html&quot;&gt;respects
user
freedom&lt;/a&gt;.
Guix can be used on top of any system running the kernel Linux, or it
can be used as a standalone operating system distribution for i686,
x86_64, ARMv7, and AArch64 machines.&lt;/p&gt;&lt;p&gt;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 &lt;a href=&quot;https://www.gnu.org/software/guile&quot;&gt;Guile&lt;/a&gt;
programming interfaces and extensions to the
&lt;a href=&quot;https//schemers.org&quot;&gt;Scheme&lt;/a&gt; language.&lt;/p&gt;</content></entry><entry><title>Childhurds and GNU/Hurd substitutes</title><id>https://joyofsource.com/childhurds-and-substitutes.html</id><author><name>Janneke Nieuwenhuizen, Ludovic Courtès, Mathieu Othacehe</name><email>janneke@gnu.org</email></author><updated>2020-10-08T14:15:00Z</updated><link href="https://joyofsource.com/childhurds-and-substitutes.html" rel="alternate" /><content type="html">&lt;p&gt;A lot has happened since our &lt;a href=&quot;https://guix.gnu.org/en/blog/2020/a-hello-world-virtual-machine-running-the-hurd/&quot;&gt;Hello Hurd
post&lt;/a&gt;
beginning of April.
No, not nearly as much as &lt;a href=&quot;https://guix.gnu.org/blog/2020/deprecating-support-for-the-linux-kernel/&quot;&gt;we joked on April 1st
&lt;/a&gt;,
but more than enough to share and be proud of.&lt;/p&gt;&lt;h1&gt;Building a Hurd virtual machine&lt;/h1&gt;&lt;p&gt;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:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix system disk-image -t hurd-raw bare-hurd.tmpl&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This cross-compiles all the relevant packages for GNU/Hurd—specifically the
&lt;code&gt;i586-pc-gnu&lt;/code&gt;
&lt;a href=&quot;https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html&quot;&gt;triplet&lt;/a&gt;—and produces a VM image:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;/gnu/store/n7jkfajw0fzp975hv0b9v18r9bbr961q-disk-image&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can build it and start it from your GNU/Linux machine with this
command:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;qemu-system-i386 -enable-kvm -m 512 -snapshot -hda \
  $(guix system disk-image -t hurd-raw bare-hurd.tmpl)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We are using this ready-made, minimal GNU/Hurd operating system
description
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/examples/bare-hurd.tmpl&quot;&gt;gnu/system/examples/bare-hurd.tmpl&lt;/a&gt;
that looks suprisingly familiar:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-modules&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;gnu&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;gnu&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;hurd&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;guix&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;utils&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-service-modules&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;ssh&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-package-modules&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;ssh&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%hurd-os&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;operating-system&lt;/span&gt;
    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;inherit&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%hurd-default-operating-system&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader-configuration&lt;/span&gt;
                 &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;grub-minimal-bootloader&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                 &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;target&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/dev/sdX&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;file-systems&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cons&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;file-system&lt;/span&gt;
                          &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;device&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;file-system-label&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;my-root&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                          &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;mount-point&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                          &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;ext2&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                        &lt;span class=&quot;syntax-symbol&quot;&gt;%base-file-systems&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;host-name&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;guixygnu&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;timezone&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;Europe/Amsterdam&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;packages&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cons&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;openssh-sans-x&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%base-packages/hurd&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;services&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cons&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;service&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;openssh-service-type&lt;/span&gt;
                             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;openssh-configuration&lt;/span&gt;
                              &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;openssh&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;openssh-sans-x&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                              &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-pam?&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;#f&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                              &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;port-number&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;2222&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                              &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;permit-root-login&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;#t&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                              &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;allow-empty-passwords?&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;#t&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                              &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;password-authentication?&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;#t&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
               &lt;span class=&quot;syntax-symbol&quot;&gt;%base-services/hurd&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-symbol&quot;&gt;%hurd-os&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and it can be customized just like a GNU/Linux operating system
description.  The end result is a full-blown Guix System with &lt;a href=&quot;https://gnu.org/software/shepherd&quot;&gt;the
Shepherd&lt;/a&gt; managing system services
and all that—finally we can run
&lt;a href=&quot;https://www.gnu.org/software/shepherd/manual/html_node/Invoking-herd.html&quot;&gt;&lt;code&gt;herd&lt;/code&gt;&lt;/a&gt;
on the Hurd.&lt;/p&gt;&lt;p&gt;A lot of things had to be in place to support this, we worked on&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Adding &lt;a href=&quot;https://en.wikipedia.org/wiki/Multi-booting&quot;&gt;multiboot support&lt;/a&gt;
to &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=1244491a0d5334e1589159a2ff67bbc967b9648b&quot;&gt;&lt;code&gt;grub-minimal-bootloader&lt;/code&gt;&lt;/a&gt;; a nice standard that Linux sadly does
not support,&lt;/li&gt;&lt;li&gt;Support for the Hurd and cross-building of the core packages listed in
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/hurd.scm#n62&quot;&gt;&lt;code&gt;%base-packages/hurd&lt;/code&gt;&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;p&gt;Support for the Hurd and cross-building of the system services in
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/hurd.scm#n67&quot;&gt;&lt;code&gt;%base-services/hurd&lt;/code&gt;&lt;/a&gt;,&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Add &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=f9c04580bf5462bb088f47ad8fc6c3136649cbd6&quot;&gt;&lt;code&gt;hurd-console-service&lt;/code&gt;&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Add &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=7ccd471c71d650055e99cd02381bc8dcd86d5313&quot;&gt;&lt;code&gt;hurd-getty-service&lt;/code&gt;&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Add &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=45b2cb439deaa2f438aed3893ee8fc80445d5563&quot;&gt;&lt;code&gt;hurd-default-essential-services&lt;/code&gt;&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Add Hurd support to &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=b37c544196898cc3dfa3da07ed344fbe11abc120&quot;&gt;&lt;code&gt;%boot-service&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Add a &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=68d8c094659565fe19abc1c433a17337ce5cacb7&quot;&gt;&lt;code&gt;hurd-startup-service&lt;/code&gt;&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Add Hurd support to &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=c3fd2df705695a0dc9f393545606360be1ea6104&quot;&gt;&lt;code&gt;activation-service&lt;/code&gt;&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Add Hurd support for “syscalls”:
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=86f5decd2066889bf2e60df388d6c812aede0917&quot;&gt;&lt;code&gt;define-c-struct&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=598be42dfa3aa1f6a92b5562397742b3fa96a3e0&quot;&gt;&lt;code&gt;ioctl&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=82d8959e5d137b2061a68878d78a8f74a238ac44&quot;&gt;&lt;code&gt;readdir*&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=0d371c633f7308cfde2432d6119d386a5c63198c&quot;&gt;&lt;code&gt;sockaddr-in&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=df05842332be80ed7f53022402b95cf711163b41&quot;&gt;&lt;code&gt;getxattr&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=d155c9d93496ae620829fbc33b5694e74cda9683&quot;&gt;&lt;code&gt;setxattr&lt;/code&gt;&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;counting some ~200 patches by ten people over six months; including
generic cross-compilation fixes and support, and Hurd fixes and
support.&lt;/p&gt;&lt;p&gt;Also, we finished the passive translator settings over extended
attributes (&lt;em&gt;xattrs&lt;/em&gt;) &lt;a href=&quot;https://git.savannah.gnu.org/cgit/hurd/hurd.git/commit/?id=a04c7bf83172faa7cb080fbe3b6c04a8415ca645&quot;&gt;for the
Hurd&lt;/a&gt;
and &lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=88ee9d571b6d8ed345f877e05f685814412e359b&quot;&gt;for
Linux&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;You may notice that we are using the new &lt;code&gt;disk-image&lt;/code&gt; command rather
than the old &lt;code&gt;vm-image&lt;/code&gt;.  One of the big hurdles in producing a VM
image was &lt;a href=&quot;https://issues.guix.gnu.org/41350&quot;&gt;the way Guix produces VM
images&lt;/a&gt;: it would run a target
QEMU, e.g. &lt;code&gt;qemu-arm&lt;/code&gt;.  That does not work for the Hurd, as there is
no &lt;code&gt;qemu-hurd&lt;/code&gt;.  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 &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=f19cf27c2b9ff92e2c0fd931ef7fde39c376adaa&quot;&gt;brand-new
implementation&lt;/a&gt;
of the &lt;code&gt;disk-image&lt;/code&gt; command.  At the time, Hurd work was done on the
&lt;code&gt;wip-hurd&lt;/code&gt; branch and the disk-image work on &lt;code&gt;wip-disk-image&lt;/code&gt;.  Soon
after, Mathieu proposed an &lt;a href=&quot;https://lists.gnu.org/archive/html/bug-guix/2020-04/msg00610.html&quot;&gt;&lt;em&gt;explosive
mix&lt;/em&gt;&lt;/a&gt;
of the two branches; we managed to create the first Hurd system that
really felt like Guix System.&lt;/p&gt;&lt;p&gt;The new implementation of the &lt;code&gt;disk-image&lt;/code&gt; command was followed by the
introduction of an &lt;code&gt;--image-type&lt;/code&gt; or &lt;code&gt;-t&lt;/code&gt; option.  This option allows to
produce disk images targeting different supports. The &lt;code&gt;hurd-raw&lt;/code&gt; and
&lt;code&gt;hurd-qcow2&lt;/code&gt; image types, producing respectively a raw Hurd disk-image and a
Hurd QCOW2 disk-image were introduced. They can be used this way:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix system disk-image -t hurd-raw bare-hurd.tmpl
guix system disk-image -t hurd-qcow2 bare-hurd.tmpl&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This mechanism providing much more flexibility in the Guix System image
generation will be described in a future blog post.&lt;/p&gt;&lt;p&gt;We also offer downloads of continuously built (actually cross-built)
&lt;a href=&quot;https://ci.guix.gnu.org/search/latest/image?query=spec:guix-master+status:success+system:x86_64-linux+hurd-barebones.qcow2&quot;&gt;Guix System on
GNU/Hurd&lt;/a&gt;
(~350 MiB).&lt;/p&gt;&lt;h1&gt;Substitutes&lt;/h1&gt;&lt;p&gt;While amazing to be able to just run the Hurd in a VM, development without
&lt;a href=&quot;https://guix.gnu.org/manual/en/html_node/Substitutes.html&quot;&gt;substitutes&lt;/a&gt;
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
&lt;a href=&quot;https://guix.gnu.org/manual/devel/en/html_node/Daemon-Offload-Setup.html&quot;&gt;offload&lt;/a&gt;
Hurd build jobs to.&lt;/p&gt;&lt;p&gt;The proposed solution was to automate the building and running of a
Guix VM into a new Guix service: the so-called &lt;code&gt;hurd-vm&lt;/code&gt; or &lt;code&gt;childhurd&lt;/code&gt;
service.  We would add something like:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;service&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;hurd-vm-service-type&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;to a couple of our build nodes to add a hird of virtual Hurd machines
to our build farm.&lt;/p&gt;&lt;h1&gt;The Childhurd service&lt;/h1&gt;&lt;p&gt;The Hurd—being based on a microkernel—has some beautiful built-in
&amp;quot;virtualization&amp;quot; possibilites that have their own naming:
&lt;a href=&quot;https://www.gnu.org/software/hurd/hurd/neighborhurd.html&quot;&gt;neighborhurd&lt;/a&gt;s,
&lt;a href=&quot;https://www.gnu.org/software/hurd/hurd/subhurd.html&quot;&gt;subhurd&lt;/a&gt;s.
Similarly, we are adding
&lt;a href=&quot;https://guix.gnu.org/manual/devel/en/html_node/Virtualization-Services.html#Childhurd&quot;&gt;&lt;em&gt;childhurds&lt;/em&gt;&lt;/a&gt;
to this mix: a childhurd is a GNU/Hurd VM running on GNU/Linux and
managed by Guix.&lt;/p&gt;&lt;p&gt;When you are running Guix System, building a Hurd VM manually is no
longer necessary.  Just add &lt;a href=&quot;https://guix.gnu.org/manual/devel/en/html_node/Transparent-Emulation-with-QEMU.html#The-Hurd-in-a-Virtual-Machine&quot;&gt;the &lt;code&gt;hurd-vm&lt;/code&gt;
service&lt;/a&gt;
to your operating
system description:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;service&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;hurd-vm-service-type&lt;/span&gt;
         &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;hurd-vm-configuration&lt;/span&gt;
          &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;disk-size&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;12&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;expt&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-comment&quot;&gt;;12GiB
&lt;/span&gt;          &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;memory-size&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;1024&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;           &lt;span class=&quot;syntax-comment&quot;&gt;; 1GiB&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;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:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;herd stop hurd-vm
herd start childhurd&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(&lt;code&gt;childhurd&lt;/code&gt; is an alias for &lt;code&gt;hurd-vm&lt;/code&gt;).&lt;/p&gt;&lt;p&gt;&lt;em&gt;WARNING&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/static/blog/img/hurd-substitutes.gif&quot; alt=&quot;This Hurd is fully operational&quot; /&gt;&lt;/p&gt;&lt;p&gt;It is highly addictive.&lt;/p&gt;&lt;p&gt;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 &lt;code&gt;/etc/guix/machines.scm&lt;/code&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;build-machine&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;localhost&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;systems&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;i586-gnu&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;host-key&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHZsrZ63zs+AhWbVJgYq6j1h2rgQGrWKCokpR2/Q/Jzy root@guixygnu&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;port&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;10022&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;  &lt;span class=&quot;syntax-comment&quot;&gt;;the Hurd VM has SSH listening on that port
&lt;/span&gt;  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;root&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;private-key&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/home/janneke/.ssh/id_rsa_childhurd&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That can be used to transparently offload builds from GNU/Linux to the
childhurd:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ 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&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Hurrah!&lt;/p&gt;&lt;h1&gt;Hurd substitutes&lt;/h1&gt;&lt;p&gt;Last Friday we produced the very first &lt;a href=&quot;https://ci.guix.gnu.org/803q5wapfnmr91ag8d9dzwabkbdxz3ay.narinfo&quot;&gt;GNU Hello
substitute&lt;/a&gt;
for the Hurd:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;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==&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For development, porting and fixing of packages, you can use a
Childhurd configuration like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-modules&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;srfi&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;srfi-1&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;guix&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;packages&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;guix&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;records&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-package-modules&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;base&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;compression&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;gawk&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;gdb&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;hurd&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;less&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;m4&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;package-management&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;guix-packages&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;filter-map&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;input-&amp;gt;package&lt;/span&gt;
              &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;fold&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;alist-delete&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;package-direct-inputs&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;guix&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                    &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;glibc-utf8-locales&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;graphviz&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;po4a&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;operating-system&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;inherit&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%hurd-vm-operating-system&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;users&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;packages&lt;/span&gt;
    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cons*&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;diffutils&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;findutils&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;gawk&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;gdb-minimal&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;git-minimal&lt;/span&gt;
           &lt;span class=&quot;syntax-symbol&quot;&gt;gnu-make&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;gzip&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;less&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;m4&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;openssh-sans-x&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;tar&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;xz&lt;/span&gt;
           &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;append&lt;/span&gt;
            &lt;span class=&quot;syntax-symbol&quot;&gt;guix-packages&lt;/span&gt;
            &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;delete&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;guile-3.0&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%base-packages/hurd&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;… which allows working from a Git clone:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;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.&amp;quot;git+ssh://git.sv.gnu.org/srv/git/&amp;quot;.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.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;but before we continue let's first check the
&lt;a href=&quot;https://guix.gnu.org/development/manual/en/html_node/Invoking-guix-weather.html#Invoking-guix-weather&quot;&gt;weather&lt;/a&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;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
[..]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;this gives an idea of how young this project is.  Any day now, more
&lt;a href=&quot;https://ci.guix.gnu.org/jobset/hurd-master&quot;&gt;Hurd substitutes&lt;/a&gt; will
follow.  Now let's configure and build Guix:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;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&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;just like we are used to do…almost.  We are using &lt;code&gt;--bootstrap&lt;/code&gt; and a
targeted &lt;code&gt;--ad-hoc&lt;/code&gt; to avoid dependencies like &lt;code&gt;libx11&lt;/code&gt;,
&lt;code&gt;python-minimal&lt;/code&gt;, and other packages that do not build yet.&lt;/p&gt;&lt;h1&gt;Isolated build environments&lt;/h1&gt;&lt;p&gt;To help achieve &lt;a href=&quot;https://reproducible-builds.org/docs/definition/&quot;&gt;reproducible
builds&lt;/a&gt;, Guix builds
packages in &lt;em&gt;isolated build environments&lt;/em&gt;: build environments contain
nothing but the inputs explicitly declared in the package
definition—&lt;a href=&quot;https://lists.gnu.org/archive/html/bug-guix/2013-01/msg00041.html&quot;&gt;not even
&lt;code&gt;/bin/sh&lt;/code&gt;&lt;/a&gt;.
Build environments also lack network access.  On GNU/Linux this is
achieved by running builds in separate &lt;em&gt;namespaces&lt;/em&gt;.  Besides, the
environment contains device nodes and “special” file systems that are
usually expected to be available: &lt;code&gt;/dev/null&lt;/code&gt;, &lt;code&gt;/dev/pts&lt;/code&gt;, &lt;code&gt;/dev/shm&lt;/code&gt;,
&lt;code&gt;/proc&lt;/code&gt;, the loopback networking device, and so on.  (The exact contents
&lt;a href=&quot;https://guix.gnu.org/manual/en/html_node/Build-Environment-Setup.html&quot;&gt;are
documented&lt;/a&gt;.)&lt;/p&gt;&lt;p&gt;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
&lt;a href=&quot;https://guix.gnu.org/manual/en/html_node/Derivations.html&quot;&gt;derivations&lt;/a&gt;,
but that’s OK, that’s the deal: the kernel and hardware are considered
outside of Guix’s control.&lt;/p&gt;&lt;p&gt;What about GNU/Hurd, though?  In GNU/Hurd, &lt;code&gt;/dev/null&lt;/code&gt;, a
Linux-compatible &lt;code&gt;/proc&lt;/code&gt;, the TCP/IP stack necessary to implement the
loopback device, and even support for pipes are all implemented in
user-land: writing to &lt;code&gt;/dev/null&lt;/code&gt; amounts to talking to the &lt;code&gt;/hurd/null&lt;/code&gt;
service (or &lt;em&gt;translator&lt;/em&gt;), operations on &lt;code&gt;AF_INET&lt;/code&gt; sockets translate to
remote procedure calls (RPCs) to &lt;code&gt;/servers/socket/2&lt;/code&gt;, which the
&lt;code&gt;/hurd/pfinet&lt;/code&gt; program listens to, and so on.&lt;/p&gt;&lt;p&gt;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 &lt;a href=&quot;https://issues.guix.gnu.org/43857&quot;&gt;started
implementing&lt;/a&gt; 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, &lt;code&gt;/dev/null&lt;/code&gt;, or even
&lt;code&gt;pipe&lt;/code&gt; should be an explicit input of any build process that needs those
facilities.&lt;/p&gt;&lt;p&gt;This principled approach can push the notion of controlled, reproducible
build environments to a whole new level.  For example, we’ve
&lt;a href=&quot;https://issues.guix.gnu.org/21280#7&quot;&gt;had&lt;/a&gt;
&lt;a href=&quot;https://issues.guix.gnu.org/20877#5&quot;&gt;cases&lt;/a&gt; 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.&lt;/p&gt;&lt;p&gt;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
&lt;code&gt;/dev/null&lt;/code&gt; 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.&lt;/p&gt;&lt;p&gt;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 &lt;a href=&quot;https://guix.gnu.org/blog/2019/reproducible-builds-summit-5th-edition/&quot;&gt;discussed at the
2019 Reproducible Builds
Summit&lt;/a&gt;.
Tricky, but exciting.&lt;/p&gt;&lt;h1&gt;What's next?&lt;/h1&gt;&lt;p&gt;In &lt;a href=&quot;https://guix.gnu.org/en/blog/2020/a-hello-world-virtual-machine-running-the-hurd/&quot;&gt;an earlier
post&lt;/a&gt;
we tried to answer the question “Why bother with the Hurd anyway?” An
obvious question because it is &lt;a href=&quot;https://xkcd.com/1508&quot;&gt;all too easy to get
discouraged&lt;/a&gt;, to downplay or underestimate the
potential social impact of GNU and the Hurd.&lt;/p&gt;&lt;p&gt;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:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2020-07/msg00042.html&quot;&gt;user-space driver/modern hardware
support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://nlnet.nl/project/Hurd-Audio/&quot;&gt;audio support&lt;/a&gt; (this is
sponsored by &lt;a href=&quot;https://nlnet.nl&quot;&gt;NLnet&lt;/a&gt;, thanks!),&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://lists.gnu.org/archive/html/bug-hurd/2020-07/msg00048.html&quot;&gt;SMP
support&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/etienne02/gnumach/tree/master/x86_64&quot;&gt;64-bit&lt;/a&gt;/
&lt;a href=&quot;https//richtlijn.be/~larstiq/hurd/hurd-2020-03-28&quot;&gt;x86_64&lt;/a&gt; support
(!), as well as porting to non-Intel CPUs.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;Join &lt;code&gt;#guix&lt;/code&gt; and &lt;code&gt;#hurd&lt;/code&gt; on irc.freenode.net or the &lt;a href=&quot;https://guix.gnu.org/en/contact&quot;&gt;mailing
lists&lt;/a&gt; and get involved!&lt;/p&gt;&lt;h4&gt;About GNU Guix&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/guix&quot;&gt;GNU Guix&lt;/a&gt; is a transactional package
manager and an advanced distribution of the GNU system that &lt;a href=&quot;https://www.gnu.org/distros/free-system-distribution-guidelines.html&quot;&gt;respects
user
freedom&lt;/a&gt;.
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.&lt;/p&gt;&lt;p&gt;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 &lt;a href=&quot;https://www.gnu.org/software/guile&quot;&gt;Guile&lt;/a&gt;
programming interfaces and extensions to the
&lt;a href=&quot;https//schemers.org&quot;&gt;Scheme&lt;/a&gt; language.&lt;/p&gt;&lt;h4&gt;About the GNU Hurd&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/hurd&quot;&gt;The GNU Hurd&lt;/a&gt; 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).
&lt;a href=&quot;https://www.gnu.org/software/hurd/hurd/documentation.html&quot;&gt;More
info&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The &lt;a href=&quot;https://www.gnu.org/software/hurd/community/weblogs/antrik/hurd-mission-statement.html&quot;&gt;mission of the GNU
Hurd&lt;/a&gt;
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.&lt;/p&gt;</content></entry><entry><title>Guix Further Reduces Bootstrap Seed to 25%</title><id>https://joyofsource.com/guix-further-reduces-bootstrap-seed-to-25.html</id><author><name>Janneke Nieuwenhuizen</name><email>janneke@gnu.org</email></author><updated>2020-06-15T12:00:00Z</updated><link href="https://joyofsource.com/guix-further-reduces-bootstrap-seed-to-25.html" rel="alternate" /><content type="html">&lt;p&gt;We are delighted to announce that the second reduction by 50% of the
Guix &lt;em&gt;bootstrap binaries&lt;/em&gt; has now been officially released!&lt;/p&gt;&lt;p&gt;The initial set of binaries from which packages are built now weighs
in at approximately 60~MiB, a quarter of what it used to be.&lt;/p&gt;&lt;p&gt;In &lt;a href=&quot;https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/&quot;&gt;a previous blog
post&lt;/a&gt;
we elaborate on why this reduction and bootstrappability in general is
so important.  One reason is to eliminate---or greatly reduce the
attack surface of---a &lt;a href=&quot;https://www.archive.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf&quot;&gt;“trusting
trust”&lt;/a&gt;
attack.  Last summer at the &lt;a href=&quot;https://breaking-bitcoin.com&quot;&gt;Breaking Bitcoin
conference&lt;/a&gt;, Carl Dong gave a &lt;a href=&quot;https//diyhpl.us/wiki/transcripts/breaking-bitcoin/2019/bitcoin-build-system&quot;&gt;fun and
remarkably gentle
introduction&lt;/a&gt;
and at &lt;a href=&quot;https://fosdem.org/2020&quot;&gt;FOSDEM2020&lt;/a&gt; I also gave &lt;a href=&quot;https://fosdem.org/2020/schedule/event/gnumes/&quot;&gt;a short talk
&lt;/a&gt; about this.  If you
choose to believe that building from source is the proper way to do
computing, then it follows that the “trusting trust” attack is only a
symptom of an incomplete or missing bootstrap story.&lt;/p&gt;&lt;h4&gt;Further Reduced Binary Seed bootstrap&lt;/h4&gt;&lt;p&gt;Last year, the first reduction removed the GCC, glibc and Binutils
binary seeds.  The new &lt;em&gt;Further Reduced Binary Seed&lt;/em&gt; bootstrap, merged
in Guix &lt;code&gt;master&lt;/code&gt; last month, removes the “static-binaries tarball”
containing GNU Awk, Bash, Bzip2, the GNU Core Utilities, Grep, Gzip,
GNU Make, Patch, sed, Tar, and Xz.  It replaces them by &lt;a href=&quot;https://savannah.nongnu.org/projects/gash&quot;&gt;Gash and Gash
Core Utils&lt;/a&gt;.  Gash is a
minimalist POSIX shell written in Guile Scheme, while Gash Core Utils
is a Scheme implementation for most of the tools found in
GNU Coreutils, as well as the most essential bits of Awk, grep and
sed.&lt;/p&gt;&lt;p&gt;After three new &lt;a href=&quot;https://gnu.org/s/mes&quot;&gt;GNU Mes&lt;/a&gt; releases with
numerous Mes C Library updates and fixes, a major update of Gash and
the first official Gash Utils release, and the &lt;a href=&quot;https://bugs.gnu.org/38390&quot;&gt;delicate balancing of
17 new bootstrap source packages and
versions&lt;/a&gt;, the bottom of the package graph
now looks like this (woohoo!):&lt;/p&gt;&lt;pre&gt;&lt;code&gt;                              gcc-mesboot (4.9.4)
                                      ^
                                      |
                                    (...)
                                      ^
                                      |
               binutils-mesboot (2.14), glibc-mesboot (2.2.5),
                          gcc-core-mesboot (2.95.3)
                                      ^
                                      |
            bash-mesboot (2.05), bzip2-mesboot, gawk-mesboot (3.0.0)
       diffutils-mesboot (2.7), patch-mesboot (2.5.9), sed-mesboot (1.18)
                                      ^
                                      |
                             gnu-make-mesboot (3.82)
                                      ^
                                      |
                                gzip-mesboot (1.2.4)
                                      ^
                                      |
                                  tcc-boot
                                      ^
                                      |
                                  mes-boot
                                      ^
                                      |
                          gash-boot, gash-utils-boot
                                      ^
                                      |
                                      *
                 bootstrap-mescc-tools, bootstrap-mes (~12 MiB)
                            bootstrap-guile (~48 MiB)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&quot;images/gcc-core-mesboot0-graph.svg&quot;&gt;full graph&lt;/a&gt;&lt;/p&gt;&lt;p&gt;We are excited that the &lt;a href=&quot;https://nlnet.nl&quot;&gt;Nlnet Foundation&lt;/a&gt; has
&lt;a href=&quot;https://nlnet.nl/project/GNUMes&quot;&gt;sponsored this work&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;However, we aren't done yet; far from it.&lt;/p&gt;&lt;h3&gt;Lost Paths&lt;/h3&gt;&lt;p&gt;The idea of reproducible builds and bootstrappable software &lt;a href=&quot;https://lists.reproducible-builds.org/pipermail/rb-general/2017-January/000309.html&quot;&gt;is not
very
new&lt;/a&gt;.
Much of that was implemented for the GNU tools in the early 1990s.
Working to recreate it in present time shows us much of that practice
was forgotten.&lt;/p&gt;&lt;p&gt;Readers who are familiar with the GNU toolchain may have
noticed the version numbers of the &lt;code&gt;*-mesboot&lt;/code&gt; source packages in
this great new bootstrap: They are ancient!  That's a problem.&lt;/p&gt;&lt;p&gt;Typically, newer versions of the tool chain fix all kinds of bugs,
make the software easier to build and add support for new CPU
architectures, which is great.  However---more often than not---
simultaneously new features are introduced or dependencies are added
that are not necessary for bootstrapping and may increase the
bootstrap hurdle.  Sometimes, newer tools are more strict or old
configure scripts do not recognise newer tool versions.&lt;/p&gt;&lt;p&gt;A trivial example is GNU sed.  In the current bootstrap we are using
version 1.18, which was released in 1993.  Until recently the latest
version of sed we could hope to bootstrap was sed-4.2.2 (2012).  Newer
releases ship as &lt;code&gt;xz&lt;/code&gt;-compressed tarballs only, and &lt;code&gt;xz&lt;/code&gt; is
notoriously difficult to bootstrap (it needs a fairly recent GCC and
try building that without sed).&lt;/p&gt;&lt;p&gt;Luckily, the sed maintainers (Jim Meyering) &lt;a href=&quot;https://lists.gnu.org/archive/html/sed-devel/2020-01/msg00016.html&quot;&gt;were happy to
correct&lt;/a&gt;
this mistake and starting from release
&lt;a href=&quot;https//ftp.gnu.org/pub/gnu/sed/sed-4.8.tar.gz&quot;&gt;sed-4.8&lt;/a&gt; (2020) also
&lt;code&gt;gzip&lt;/code&gt;-compressed tarballs will be shipped.  Similar for the GNU Core
Utils: Releases made between 2011 and 2019 will probably be useless
for bootstrapping.  Confronted with this information, also the
coreutils maintainers (Pádraig Brady) &lt;a href=&quot;https://lists.gnu.org/archive/html/coreutils/2020-02/msg00043.html&quot;&gt;were happy
to&lt;/a&gt;
release
&lt;a href=&quot;https//ftp.gnu.org/pub/gnu/coreutils/coreutils-8.32.tar.gz&quot;&gt;coreutils-8.32&lt;/a&gt;
also in &lt;code&gt;gzip&lt;/code&gt; compression from now on.&lt;/p&gt;&lt;p&gt;Even these simple cases show that solving bootstrap problems can only
be done together: For GNU it really is a project-wide responsibility
that needs to be addressed.&lt;/p&gt;&lt;p&gt;Most bootstrap problems or loops are not so easy to solve and
sometimes there are no obvious answers, for example:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;In 2013, the year that &lt;a href=&quot;https://reproducible-builds.org&quot;&gt;Reproducible
Builds&lt;/a&gt; started to gain some
traction, the GNU Compiler Collection &lt;a href=&quot;https//gcc.gnu.org/gcc-4.8/changes.html&quot;&gt;released
gcc-4.8.0&lt;/a&gt;,
making C++ a build requirement, and&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Even more recently (2018), the GNU C Library &lt;a href=&quot;https://sourceware.org/git/?p=glibc.git;a=commit;h=c6982f7efc1c70fe2d6160a87ee44d871ac85ab0&quot;&gt;glibc-2.28 adds Python
as a build
requirement&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;and while these examples make for a delightful puzzle from a
bootstrappability perspective, we would love to see the maintainers of
GNU softwares to consider bootstrappability and start taking more
responsibility for the bootstrap story of their packages.&lt;/p&gt;&lt;h4&gt;Towards a Universal, Full Source Bootstrap&lt;/h4&gt;&lt;p&gt;Our next target will be a third reduction by ~50%; the Full-Source
bootstrap will replace the MesCC-Tools and GNU Mes binaries by
&lt;a href=&quot;https://savannah.nongnu.org/projects/stage0&quot;&gt;Stage0&lt;/a&gt; and
&lt;a href=&quot;https://github.com/oriansj/m2-planet&quot;&gt;M2-Planet&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The Stage0 project by Jeremiah Orians starts everything from ~512
bytes; virtually nothing.  Have a look at this incredible project if
you haven’t already done so.&lt;/p&gt;&lt;p&gt;We are most grateful and excited that the &lt;a href=&quot;https://nlnet.nl&quot;&gt;Nlnet
Foundation&lt;/a&gt; has &lt;a href=&quot;https://nlnet.nl/project/GNUMes-fullsource/&quot;&gt;again decided to sponsor this
work&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;While the reduced bootstrap currently only applies to the i686-linux
and x86_64-linux architectures, we are thrilled that ARM will be
joining soon.  The &lt;a href=&quot;https://nlnet.nl/project/GNUMes-arm/&quot;&gt;Trusted ARM bootstrapping
work&lt;/a&gt; is progressing nicely, and
GNU Mes is now passing its entire mescc test suite on native ARMv7,
and passing nigh its entire gcc test suite on native ARMv7.  Work is
underway to compile tcc using that GNU Mes.  Adding this second
architecture is a very important one towards the creation of a
universal bootstrap!&lt;/p&gt;&lt;p&gt;Upcoming releases of Gash and Gash-Utils will allow us to clean up the
bottom of the package graph and remove many of the “vintage” packages.
In particular, the next version of Gash-Utils will be sophisticated
enough to build everything up to &lt;code&gt;gcc-mesboot&lt;/code&gt; using only old versions
of GNU Make and Gzip.  This is largely thanks to improvements to the
implementation of Awk, which now includes nearly all of the standard
features.&lt;/p&gt;&lt;p&gt;Looking even further into the future, we will likely have to remove
the “vintage” GCC-2.95.3 that was such a helpful stepping stone and
reach straight for GCC-4.6.4.  Interesting times ahead!&lt;/p&gt;&lt;h4&gt;About Bootstrappable Builds and GNU Mes&lt;/h4&gt;&lt;p&gt;Software is bootstrappable when it does not depend on a binary seed
that cannot be built from source.  Software that is not
bootstrappable---even if it is free software---is a serious security
risk
&lt;a href=&quot;https://www.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf&quot;&gt;for&lt;/a&gt;
&lt;a href=&quot;https://manishearth.github.io/blog/2016/12/02/reflections-on-rusting-trust/&quot;&gt;a&lt;/a&gt;
&lt;a href=&quot;https://www.quora.com/What-is-a-coders-worst-nightmare/answer/Mick-Stute&quot;&gt;variety&lt;/a&gt;
&lt;a href=&quot;https//blog.regehr.org/archives/1241&quot;&gt;of&lt;/a&gt;
&lt;a href=&quot;https://www.alchemistowl.org/pocorgtfo/pocorgtfo08.pdf&quot;&gt;reasons&lt;/a&gt;.
The &lt;a href=&quot;https://bootstrappable.org/&quot;&gt;Bootstrappable Builds&lt;/a&gt; project aims
to reduce the number and size of binary seeds to a bare minimum.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/software/mes/&quot;&gt;GNU Mes&lt;/a&gt; is closely related to the
Bootstrappable Builds project.  Mes aims to create an entirely
source-based bootstrapping path for the Guix System and other
interested GNU/Linux distributions.  The goal is to start from a
minimal, easily inspectable binary (which should be readable as
source) and bootstrap into something close to R6RS Scheme.&lt;/p&gt;&lt;p&gt;Currently, Mes consists of a mutual self-hosting scheme interpreter
and C compiler.  It also implements a C library.  Mes, the scheme
interpreter, is written in about 5,000 lines of code of simple C.
MesCC, the C compiler, is written in scheme.  Together, Mes and MesCC
can compile &lt;a href=&quot;https//gitlab.com/janneke/tinycc&quot;&gt;a lightly patched
TinyCC&lt;/a&gt; that is self-hosting.  Using
this TinyCC and the Mes C library, it is possible to bootstrap the
entire Guix System for i686-linux and x86_64-linux.&lt;/p&gt;&lt;h4&gt;About GNU Guix&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://guix.gnu.org&quot;&gt;GNU Guix&lt;/a&gt; is a transactional package
manager and an advanced distribution of the GNU system that &lt;a href=&quot;https://www.gnu.org/distros/free-system-distribution-guidelines.html&quot;&gt;respects
user
freedom&lt;/a&gt;.
Guix can be used on top of any system running the kernel Linux, or it
can be used as a standalone operating system distribution for i686,
x86_64, ARMv7, and AArch64 machines.&lt;/p&gt;&lt;p&gt;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 &lt;a href=&quot;https://www.gnu.org/software/guile&quot;&gt;Guile&lt;/a&gt;
programming interfaces and extensions to the
&lt;a href=&quot;https//schemers.org&quot;&gt;Scheme&lt;/a&gt; language.&lt;/p&gt;</content></entry><entry><title>Guix System on the Pinebook Pro</title><id>https://joyofsource.com/guix-system-on-the-pinebook-pro.html</id><author><name>janneke</name><email>janneke@gnu.org</email></author><updated>2020-02-15T00:00:00Z</updated><link href="https://joyofsource.com/guix-system-on-the-pinebook-pro.html" rel="alternate" /><content type="html">&lt;p&gt;&lt;img src=&quot;images/pinebook-pro.png&quot; alt=&quot;pinebook pro with exwm&quot; /&gt;&lt;/p&gt;&lt;p&gt;The new Pinebook Pro is a very lovable machine.  For only $200 excluding
shipping (and possibly taxes, I paid $68) the keyboard feels different
but comparable to a flat &lt;a href=&quot;https://www.dell.com/en-us/work/shop/dell-laptops-and-notebooks/new-xps-13-developer-edition/spd/xps-13-9350-laptop-ubuntu&quot;&gt;Dell XPS 13
9350&lt;/a&gt;.
The screen is beautiful and the machine is remarkably silent.  So much
that at times you can hear the display almost like in the old days.&lt;/p&gt;&lt;p&gt;I have been waiting for an affordable ARM with more than 2GiB of
memory to help out with the ARM port of &lt;a href=&quot;https://www.gnu.org/software/mes&quot;&gt;GNU
Mes&lt;/a&gt;.  Although the Qemu-service in
Guix works neat, having the actual hardware helps a lot.&lt;/p&gt;&lt;p&gt;It does feel slow---even although it has 6 cores---so it may take some
time before we can really leave proprietary MEs and BIOSes behind.
Also, the Hurd does not run on ARM/AArch64 yet.  Bogomips are at 48
per CPU compared to 4400 for an i7, but it is certainly not two orders
slower.  Is it?  Compiling seems to be about 4x slower than the i7.&lt;/p&gt;&lt;p&gt;I got some inspiration from the lovely post on &lt;a href=&quot;https://guix.gnu.org/blog/2019/guix-on-an-arm-board/&quot;&gt;Guix on an ARM
board&lt;/a&gt; by Julien
Lepiller and had lots of help from Danny Milosavljevic during the
&lt;a href=&quot;https://guix.gnu.org/blog/2020/meet-guix-at-fosdem-2020/&quot;&gt;Guix Days&lt;/a&gt;
at &lt;a href=&quot;https://fosdem.org&quot;&gt;Fosdem20&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In a &lt;a href=&quot;a-bare-bones-guix-system-on-the-pinebook-pro.html&quot;&gt;previous
post&lt;/a&gt; I described
how I hacked to boot into a &lt;a href=&quot;https://guix.gnu.org&quot;&gt;GNU Guix&lt;/a&gt; root on a
&lt;a href=&quot;https://pine64.org/pinebook-pro&quot;&gt;Pinebook Pro&lt;/a&gt;, using the default
kernel provided with the &lt;a href=&quot;https://github.com/mrfixit2001/debian_desktop/releases/download/191123/pinebookpro-debian-desktop-mrfixit-191123.img.xz&quot;&gt;Debian
image&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;For the Guix System, I have packaged and
&lt;a href=&quot;https://lilypond.org/janneke/pinebook-pro/deblob-pinebook-pro-5.5&quot;&gt;deblobbed&lt;/a&gt;
the &lt;a href=&quot;https://gitlab.manjaro.org/tsys/linux-pinebook-pro&quot;&gt;Manjaro
kernel&lt;/a&gt;, which
seems to be where development of mainlining the Pinebook Pro kernel
has moved.&lt;/p&gt;&lt;p&gt;We now have a recipe to install a true Guix System with &lt;a href=&quot;https://linux-libre.fsfla.org&quot;&gt;Linux
Libre&lt;/a&gt;.  Also, I have added a u-boot
package variants: we no longer depend on 3rd party binary images.&lt;/p&gt;&lt;p&gt;We start by &lt;em&gt;infecting&lt;/em&gt; our beautiful Debian system with the Guix
package manager&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo apt install gpg
wget https://sv.gnu.org/people/viewgpg.php?user_id=15145 -qO - | gpg --import -
wget https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh
sudo bash guix-install.sh&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;First, insert the microSD, &lt;code&gt;tail -f /var/log/messages&lt;/code&gt; should say
something like&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Feb 15 14:33:01 armzalig kernel: [ 4150.344615] mmc0: new ultra high speed SDR104 SDXC card at address 0001
Feb 15 14:33:01 armzalig kernel: [ 4150.345537] mmcblk0: mmc0:0001 SD16G 58.9 GiB 
Feb 15 14:33:01 armzalig kernel: [ 4150.346755]  mmcblk0:&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then, add a bootable partition and create a file system (please verify
the correctness of /dev/mmc* for your device!)&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo parted -- /dev/mmcblk0 mkpart p 0% -1
sudo parted -- /dev/mmcblk0 set 1 boot on
sudo mkfs.ext4 -F /dev/mmcblk0p1&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We need to upgrade Guix to a more recent version.  At the time of
writing we need to avoid &lt;a href=&quot;https://debbugs.gnu.org/39352&quot;&gt;bug #39352&lt;/a&gt;
and pull to &lt;a href=&quot;https//git.savannah.gnu.org/cgit/guix.git/commit/?id=c7dd15596ffd09ab40629c89e7014e51a4d7e95e&quot;&gt;&lt;code&gt;c7dd15596ffd09ab40629c89e7014e51a4d7e95e&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix pull --commit=c7dd15596ffd09ab40629c89e7014e51a4d7e95e
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After running that, it told me to do&lt;/p&gt;&lt;pre&gt;&lt;code&gt;export PATH=&amp;quot;/home/janneke/.config/guix/current/bin${PATH:+:}$PATH&amp;quot;
hash guix
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;which I did, that may be a bit different for you.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;guix environment guix --ad-hoc git
#git clone https://git.savannah.gnu.org/git/guix.git  # not yet
git clone https://gitlab.com/janneke/guix.git
cd guix
git checkout wip-pinebook-pro
./bootstrap
./configure --localstatedir=/var GUILE=$(type -p guile) GUILD=$(type -p guild)
make&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I copied &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/plain/gnu/system/examples/pinebook-pro.tmpl?h=wip-pinebook-pro&quot;&gt;pine-book-pro.tmpl@savannah&lt;/a&gt;/&lt;a href=&quot;https://gitlab.com/janneke/guix/-/blob/wip-pinebook-pro/gnu/system/examples/pinebook-pro.tmpl&quot;&gt;pine-book-pro.tmpl@gitlab&lt;/a&gt; into &lt;a href=&quot;../images/arm-baar.scm&quot;&gt;arm-baar.scm&lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;; This is an operating system configuration template
&lt;/span&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;; for a &amp;quot;bare bones&amp;quot; pinebook pro
&lt;/span&gt;
&lt;span class=&quot;syntax-comment&quot;&gt;;; The default image's kernel 4.4.190 has
&lt;/span&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;;    microSD: /dev/mmcblk0
&lt;/span&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;;    eMMC: /dev/mmcblk1
&lt;/span&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;;
&lt;/span&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;; Note that after booting the Guix System with linux-libre
&lt;/span&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;; 5.5-pinebook-pro this changes to
&lt;/span&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;;    microSD: /dev/mmcblk1
&lt;/span&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;;    eMMC: /dev/mmcblk2
&lt;/span&gt;
&lt;span class=&quot;syntax-comment&quot;&gt;;; Assuming https://gitlab.com/janneke/guix.git wip-pinebook-pro
&lt;/span&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;; has been built in .
&lt;/span&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;; cp gnu/system/examples/pinebook-pro.tmpl arm-baar.scm
&lt;/span&gt;&lt;span class=&quot;syntax-comment&quot;&gt;;; sudo -E ./pre-inst-env guix system init arm-baar.scm /mnt --fallback
&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-modules&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;gnu&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;gnu&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;bootloader&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;u-boot&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-service-modules&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;avahi&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;networking&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;ssh&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-package-modules&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;admin&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;bootloaders&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;certs&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;linux&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;ssh&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;operating-system&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;host-name&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;armzalig&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;timezone&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;Europe/Amsterdam&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;locale&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;en_US.utf8&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;syntax-comment&quot;&gt;;; Assuming not using a typewriter that needs qwerty slowdown
&lt;/span&gt;  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;keyboard-layout&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;keyboard-layout&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;us&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;dvorak&amp;quot;&lt;/span&gt;
                                    &lt;span class=&quot;syntax-keyword&quot;&gt;#:options&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;ctrl:nocaps&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;compose:menu&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;syntax-comment&quot;&gt;;; Assuming /dev/mmcblk0 is the microSD...
&lt;/span&gt;  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader-configuration&lt;/span&gt;
               &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;target&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/dev/mmcblk0&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
               &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;bootloader&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;u-boot-pinebook-pro-rk3399-bootloader&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-comment&quot;&gt;;; ...and after booting, /dev/mmcblk1p1 is the root file system
&lt;/span&gt;  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;file-systems&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cons*&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;file-system&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;device&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/dev/mmcblk1p1&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                                    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;mount-point&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                                    &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;ext4&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                       &lt;span class=&quot;syntax-symbol&quot;&gt;%base-file-systems&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;kernel&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;linux-libre-pinebook-pro&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;kernel-arguments&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;ethaddr=${ethaddr}&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;eth1addr=${eth1addr}&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;serial=${serial#}&amp;quot;&lt;/span&gt;
                      &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;video=HDMI-A-1:1920x1080@60&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;video=eDP-1:1920x1080@60&amp;quot;&lt;/span&gt;
                      &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;vga=current&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;initrd-modules&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;users&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cons*&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;user-account&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;guix&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                              &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;group&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;users&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                              &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;supplementary-groups&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;wheel&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;syntax-symbol&quot;&gt;%base-user-accounts&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;name-service-switch&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%mdns-host-lookup-nss&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;packages&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cons*&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;nss-certs&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;openssh&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;wpa-supplicant-minimal&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;%base-packages&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;services&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;cons*&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;service&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;dhcp-client-service-type&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                   &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;service&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;openssh-service-type&lt;/span&gt;
                            &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;openssh-configuration&lt;/span&gt;
                             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;port-number&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;2222&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                   &lt;span class=&quot;syntax-symbol&quot;&gt;%base-services&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Save it as &lt;code&gt;arm-baar.scm&lt;/code&gt;, choose your hostname, timezone, locale and
keyboard layout.  After mounting the root file system&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo mount /dev/mmcblk0p1 /mnt&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;install Guix onto it, doing&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo -E ./pre-inst-env guix system init arm-baar.scm /mnt --fallback&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;says something like&lt;/p&gt;&lt;pre&gt;&lt;code&gt;The following derivations will be built:
   /gnu/store/7pad9i05ay9kmayh8l8i8r6wpir88f5g-system.drv
   /gnu/store/0rkjcqhkb30cban0291mqbv2yfi02n0f-boot.drv
   /gnu/store/vrfajn06i669wh27c2zia9wah7k1j3ws-activate.scm.drv
   /gnu/store/w1qchgxmvrsysd7q1r8h7izxb18r33g6-activate-service.scm.drv
   /gnu/store/g5awvk155l1nygd7mbg947pgcxx3cp3c-etc.drv
   /gnu/store/md0p8hcnfq2pf43wa51ajsapky53a1jm-provenance.drv
   /gnu/store/l2g009sdbm3x5qajnfgjfn4rj04p4l58-extlinux.conf.drv
building /gnu/store/md0p8hcnfq2pf43wa51ajsapky53a1jm-provenance.drv...
building /gnu/store/g5awvk155l1nygd7mbg947pgcxx3cp3c-etc.drv...
building /gnu/store/w1qchgxmvrsysd7q1r8h7izxb18r33g6-activate-service.scm.drv...
building /gnu/store/vrfajn06i669wh27c2zia9wah7k1j3ws-activate.scm.drv...
building /gnu/store/0rkjcqhkb30cban0291mqbv2yfi02n0f-boot.drv...
building /gnu/store/7pad9i05ay9kmayh8l8i8r6wpir88f5g-system.drv...
building /gnu/store/l2g009sdbm3x5qajnfgjfn4rj04p4l58-extlinux.conf.drv...
/gnu/store/bpq3gjfih8c1xgahw7yj3h18d1sw670l-system
/gnu/store/hgk8ya40n3pppp7sja12cdr6wkb3k0nr-extlinux.conf

initializing operating system under '/mnt'...
copying to '/mnt'...
populating '/mnt'...
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
substitute: updating substitutes from 'https//kluit.dezyne.org:8181'... 100.0%
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
substitute: updating substitutes from 'https//kluit.dezyne.org:8181'... 100.0%
downloading from https://ci.guix.gnu.org/nar/gzip/0dqzh840z4a8a23gvwc38ssmxb9qfcc2-u-boot-2020.01-pinebook-pro-1.365495a-checkout...
 u-boot-2020.01-pinebook-pro-1.365495a-checkout            1.8MiB/s 00:11 | 20.4MiB transferred
building /gnu/store/djgdaps803zizw77y9jgsg4m0dl06aik-u-boot-pinebook-pro-rk3399-2020.01-pinebook-pro-1.365495a.drv...
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
building /gnu/store/p97hj16a738kg64f5b87s2g54d5qmc3s-module-import-compiled.drv...
building /gnu/store/6r1xrpk1d17scaxpv7fzv1dxany9fafz-install-bootloader.scm.drv...
guix system: bootloader successfully installed on '/dev/mmcblk0'
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Weirdly, we need to fixup &lt;code&gt;extlinux.conf&lt;/code&gt;.  Although the default&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ grep DEFAULT_FDT /gnu/store/zxb488q5l9c6j5pnazvp5s30z1p18gnm-u-boot-pinebook-pro-rk3399-2020.01-pinebook-pro-1.365495a/libexec/.config 
CONFIG_DEFAULT_FDT_FILE=&amp;quot;rockchip/rk3399-pinebook-pro.dtb&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;seems to be correct, upon boot u-boot wants to load &lt;code&gt;rockchip-evb_rk3399.dtb&lt;/code&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;** File not found /gnu/store/4zsyqb40r34hp8q83fs5q3kpw4djs046-linux-libre-pinebook-pro-5.5.0/lib/dtbs/rockchip-evb_rk3399.dtb **&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Oh, well&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo sed 's,FDTDIR \([^ ]*\),FDT \1/rockchip/rk3399-pinebook-pro.dtb,' /mnt/boot/extlinux/extlinux.conf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And that's it, good luck!&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo umount /mnt
sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And there you have it&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;images/pinebook-pro-guix.png&quot; alt=&quot;pinebook pro with guix&quot; /&gt;&lt;/p&gt;&lt;p&gt;no WIFI or accelerated X yet; but you gotta love &lt;code&gt;This is the GNU system. Welcome.&lt;/code&gt;&lt;/p&gt;&lt;p&gt;What really got me going here was a serial console.  The trick is to
get &lt;a href=&quot;https://www.allekabels.nl/jack-kabel/4/1193169/jack-naar-usb-kabel.html&quot;&gt;a working
cable&lt;/a&gt;,
remove the backcover&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;images/pinebook-pro-open.png&quot; alt=&quot;pinebook pro with exwm&quot; /&gt;&lt;/p&gt;&lt;p&gt;and &lt;a href=&quot;https://wiki.pine64.org/index.php/Pinebook_Pro#Mainboard_Switches_and_Buttons&quot;&gt;flip the switch #9 Audio/UART upward&lt;/a&gt;
&lt;img src=&quot;images/pinebook-pro-switch.png&quot; alt=&quot;pinebook pro with exwm&quot; /&gt;&lt;/p&gt;&lt;p&gt;I first got one that did not work.  When you plug-in a working cable
in the client, &lt;code&gt;/var/log/messages&lt;/code&gt; should show something like&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Feb 15 15:03:55 localhost vmunix: [113105.608514] usb 1-1: new full-speed USB device number 8 using xhci_hcd
Feb 15 15:03:55 localhost vmunix: [113105.762159] usb 1-1: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00
Feb 15 15:03:55 localhost vmunix: [113105.762161] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Feb 15 15:03:55 localhost vmunix: [113105.762162] usb 1-1: Product: FT232R USB UART
Feb 15 15:03:55 localhost vmunix: [113105.762163] usb 1-1: Manufacturer: FTDI
Feb 15 15:03:55 localhost vmunix: [113105.762164] usb 1-1: SerialNumber: AC01OG7W
Feb 15 15:03:55 localhost vmunix: [113105.765223] ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected
Feb 15 15:03:55 localhost vmunix: [113105.765246] usb 1-1: Detected FT232RL
Feb 15 15:03:55 localhost vmunix: [113105.765527] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;telling you that &lt;code&gt;ttyUSB0&lt;/code&gt; is now available.  Then you can connect using &lt;code&gt;screen&lt;/code&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;screen /dev/ttyUSB0 1500000&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;that even works before plugging it into the Pinebook.  After plugging
in the earphone jack and rebooting the Pinebook, you can follow,
interact and debug the boot process.&lt;/p&gt;&lt;h4&gt;About GNU Guix&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://guix.gnu.org&quot;&gt;GNU Guix&lt;/a&gt; is a transactional package
manager and an advanced distribution of the GNU system that &lt;a href=&quot;https://www.gnu.org/distros/free-system-distribution-guidelines.html&quot;&gt;respects
user
freedom&lt;/a&gt;.
Guix can be used on top of any system running the kernel Linux, or it
can be used as a standalone operating system distribution for i686,
x86_64, ARMv7, and AArch64 machines.&lt;/p&gt;&lt;p&gt;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 &lt;a href=&quot;https://www.gnu.org/software/guile&quot;&gt;Guile&lt;/a&gt;
programming interfaces and extensions to the
&lt;a href=&quot;https//schemers.org&quot;&gt;Scheme&lt;/a&gt; language.&lt;/p&gt;&lt;h4&gt;About Pinebook Pro&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://pine64.org/pinebook-pro&quot;&gt;PINEBOOK Pro&lt;/a&gt;&lt;/p&gt;&lt;p&gt;A Powerful, Metal and Open Source ARM 64-Bit Laptop for Work, School
or Fun The Pinebook Pro is meant to deliver solid day-to-day Linux or
*BSD experience and to be a compelling alternative to mid-ranged
Chromebooks that people convert into Linux laptops. In contrast to
most mid-ranged Chromebooks however, the Pinebook Pro comes with an
IPS 1080p 14″ LCD panel, a premium magnesium alloy shell, 64/128GB of
eMMC storage, a 10,000 mAh capacity battery and the modularity /
hackability that only an open source project can deliver – such as the
unpopulated PCIe m.2 NVMe slot (an optional feature which requires an
optional adapter). The USB-C port on the Pinebook Pro, apart from
being able to transmit data and charge the unit, is also capable of
digital video output up-to 4K at 60hz.&lt;/p&gt;&lt;p&gt;[0]: A difficulty here is that the Pinebook Pro currently does not
want to show a U-Boot prompt, command line or debug output.  If you
consider to buy one, you may want to also order a serial cable that
might help debugging the boot sequence.&lt;/p&gt;</content></entry></feed>