https://guix.gnu.org/feeds/blog/guix-days.atomGNU Guix — Blog — Guix Daysfeed author nameGNU Guixhttps://guix.gnu.org/themes/initial/img/icon.png2024-03-20T10:57:54Zhttps://guix.gnu.org/blog/2024/guix-days-2024-recap//Guix Days 2024 and FOSDEM recapSteve George2024-02-10T18:00:00Z2024-02-10T18:00:00Z Guix contributors and users got together in Brussels to explore Guix's status, chat about new ideas and spend some time together enjoying Belgian beer! Here's a recap of what was discussed. Day 1 The first day kicked off with an update on the project's health, given by Efraim Flashner representing the project's Maintainer collective. Efraim relayed that the project is doing well, with lots of exciting new features coming into the archive and new users taking part. It was really cool listening to all the new capabilities - thank-you to all our volunteer contributors who are…<p>Guix contributors and users got together in Brussels to explore Guix's status, chat about new ideas and spend some time together enjoying Belgian beer! Here's a recap of what was discussed.</p><h1>Day 1</h1><p>The first day kicked off with an update on the project's health, given by Efraim Flashner representing the project's Maintainer collective. Efraim relayed that the project is doing well, with lots of exciting new features coming into the archive and new users taking part. It was really cool listening to all the new capabilities - thank-you to all our volunteer contributors who are making Guix better! Efraim noted that the introduction of <a href="https://guix.gnu.org/manual/en/html_node/Teams.html">Teams</a> has improved collaboration - equally, that there's plenty of areas we can improve. For example, concern remains over the "bus factor" in key areas like infrastructure. There's also a desire to release more often as this provides an updated installer and lets us talk about new capabilities.</p><p>Christopher Baines gave a general talk about the QA infrastructure and the ongoing work to develop automated builds. Chris showed a diagram of the way the <a href="https://qa.guix.gnu.org/README#org5dde7a9">services interact</a> which shows how complex it is. Increasing automation is very valuable for users and contributors, as it removes tedious and unpleasant drudgery!</p><p>Then, Julien Lepiller, representing the <a href="https://foundation.guix.info/">Guix Foundation</a>, told us about the work it does. Julien also brought some great stickers! The Guix Foundation is a non-profit association that can receive donations, host activities and support the Guix project. Did you know that it's simple and easy to join? Anyone can do so by simply <strong><a href="https://foundation.guix.info/statutes/membershipform.txt">filling in the form and paying the 10 Euro membership fee</a></strong>. Contact the Guix Foundation if you'd like to know more.</p><p>The rest of the day was taken up with small groups discussing topics:</p><ul><li><p><strong>Goblins, Hoot and Guix</strong>: Christine Lemmer-Webber gave an introduction to
the <a href="https://spritely.institute/">Spritely Institute's</a> mission to create
decentralized networks and community infrastructure that respects user freedom
and security. There was a lot of interesting discussion about how the
network capabilities could be used in Guix, for example enabling distributed
build infrastructure.</p></li><li><p><strong>Infrastructure</strong>: There was a working session on how the projects
infrastructure works and can be improved. Christopher Baines has been
putting lots of effort into the QA and build infrastructure.</p></li><li><p><strong>Guix Home</strong>: Gábor Boskovits coordinated a session on Guix Home. It was
exciting to think about how Guix Home introduces the "Guix way" in a
completely different way from packages. This could introduce a whole new
audience to the project. There was interest in improving the overall
experience so it can be used with other distributions
(e.g. Fedora, Arch Linux, Debian and Ubuntu).</p></li><li><p><strong>Release management</strong>: Julien Lepiller led us through a discussion of
release management, explaining the ways that all the parts fit together. The
most important part that has to be done is testing the installation image
which is a manual process.</p></li></ul><h1>Day 2</h1><p>The second day's sessions:</p><ul><li><p><strong>Funding</strong>: A big group discussed funding for the project. Funding is
important because it determines many aspects of what the group can achieve.
Guix is a global project so there are pools of money in the United States and
Europe (France). Andreas Enge and Julien Lepiller represented the group that
handle finance, giving answers on the practical elements. Listening to their
description of this difficult and involved work, I was struck how grateful
we all are that they're willing to do it!</p></li><li><p><strong>Governance</strong>: Guix is a living project that continues to grow and evolve.
The governance discussion concerned how the project continues to chart a
clear direction, make good decisions and bring both current and new users on
the journey. There was reflection on the need for accountability and quick
decision making, without onerous bureaurcacy, while also acknowledging that
everyone is a volunteer. There was a lot of interest in how groups can join
together, perhaps using approaches like <a href="https://en.wikipedia.org/wiki/Sociocracy">Sociocracy</a>.</p><p>Simon Tournier has been working on an <a href="https://issues.guix.gnu.org/issue/66844">RFC process</a>,
which the project will use to discuss major changes and make decisions.
Further discussion is taking place on the development mailing-list if you'd
like to take part.</p></li><li><p><strong>Alternative Architectures</strong>: The Guix team continues to work on
alternative architectures. Efraim had his 32-bit PowerPC (Powerbook G4) with
him, and there's continued work on PowerPC64, ARM64 and RISC-V 64. The big
goal is a complete source bootscrap across all architectures.</p></li><li><p><strong>Hurd</strong>: Janneke Nieuwenhuizen led a discussion around
<a href="https://www.gnu.org/software/hurd/">GNU Hurd</a>, which is a microkernel-based
architecture. Activity has increased in the last couple of years, and there's
support for SMP and 64-bit (x86) is work in progress. There's lots of ideas
and excitement about getting Guix to work on Hurd.</p></li><li><p><strong>Guix CLI improvements</strong>: Jonathan coordinated a discussion about the state of the Guix CLI. A consistent, self-explaining and intuitive experience is important for our users. There are 39 top-level commands, that cover all the functionality from package management through to environment and system creation! Various improvements were discussed, such as making extensions available and improving documentation about the REPL work-flow.</p></li></ul><h1>FOSDEM 2024 videos</h1><p>Guix Days 2024 took place just before FOSDEM 2024. FOSDEM was a fantastic two days of interesting talks and conversations. If you'd like to watch the GUIX-related talks the videos are being put online:</p><ul><li><p><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2651-making-reproducible-and-publishable-large-scale-hpc-experiments/"><strong>Making reproducible and publishable large-scale HPC experiments</strong></a>
by Philippe Swartvagher.</p></li><li><p><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2339-scheme-in-the-browser-with-guile-hoot-and-webassembly/"><strong>Scheme in the Browser with Guile Hoot and WebAssembly</strong></a>
by Robin Templeton.</p></li><li><p><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-1755-risc-v-bootstrapping-in-guix-and-live-bootstrap/"><strong>RISC-V Bootstrapping in Guix and Live-Bootstrap</strong></a>
by Ekaitz Zarraga.</p></li><li><p><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2560-self-hosting-and-autonomy-using-guix-forge/"><strong>Self-hosting and autonomy using guix-forge</strong></a>
by Arun Isaac.</p></li><li><p><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2331-spritely-guile-guix-a-unified-vision-for-user-security/"><strong>Spritely, Guile, Guix: a unified vision for user security</strong></a>
by Christine Lemmer-Webber.</p></li><li><p><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2927-supporting-architecture-psabis-with-gnu-guix/"><strong>Supporting architecture psABIs with GNU Guix</strong></a>
by Efraim Flashner.</p></li></ul><h1>Join Us</h1><p>There's lots happening in Guix and many ways to get involved. We're a small and friendly project that values user freedom and a welcoming community. If this recap has inspired your interest, take a look at the <a href="https://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/doc/guix-days-2024">raw notes</a> and <a href="https://guix.gnu.org/en/contribute/"><strong>join us!</strong></a></p>https://guix.gnu.org/blog/2024/meet-guix-at-fosdem-2024//Guix at FOSDEM 2024Steve George2024-01-19T15:00:00Z2024-01-19T15:00:00Z It's not long to FOSDEM 2024, where Guixers will come together to learn and hack.
As usual there's some great talks and opportunities to meet other users and
contributors. FOSDEM is Europe's biggest Free Software conference.
It's aimed at developers and anyone who's interested in the Free Software
movement. While it's an in-person conference there are live video streams
and lots of ways to participate remotely. The schedule is varied with development rooms covering many interests. Here
are some of the talks that are of particular interest to Guixers: Saturday, 3rd Febuary " Making reproducible and…<p>It's not long to FOSDEM 2024, where Guixers will come together to learn and hack.
As usual there's some great talks and opportunities to meet other users and
contributors.</p><p><a href="https://fosdem.org/2024/">FOSDEM</a> is Europe's biggest Free Software conference.
It's aimed at developers and anyone who's interested in the Free Software
movement. While it's an in-person conference there are live video streams
and lots of ways to participate remotely.</p><p>The schedule is varied with development rooms covering many interests. Here
are some of the talks that are of particular interest to Guixers:</p><h3>Saturday, 3rd Febuary</h3><ul><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2651-making-reproducible-and-publishable-large-scale-hpc-experiments/">"<strong>Making reproducible and publishable large-scale HPC experiments</strong>"</a>
by Philippe Swartvagher (10:30 CET). Philippe will talk about the search for
reproducible experiments in high-performance computing (HPC) and how he uses
Guix in his methododology.</li></ul><h3>Sunday, 4th February</h3><p>The <a href="https://fosdem.org/2024/schedule/track/declarative-and-minimalistic-computing/">Declarative and Minimalistic Computing track</a>
takes place Sunday morning. Important topics are:</p><ul><li><em>Minimalism Matters</em>: sustainable computing through smaller, resource efficient systems</li><li><em>Declarative Programming</em>: reliable and reproducible systems by minimising side-effects</li></ul><p>Guix-related talks are:</p><ul><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2339-scheme-in-the-browser-with-guile-hoot-and-webassembly/">"<strong>Scheme in the Browser with Guile Hoot and WebAssembly</strong>"</a>
by Robin Templeton (11:00 CET). A talk covering bringing Scheme to WebAssembly
through the Guile Hoot toolchain. Addressing the current state of Guile Hoot
with examples, and how recent Wasm proposals might improve the
situation in the future.</li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-1755-risc-v-bootstrapping-in-guix-and-live-bootstrap/">"<strong>RISC-V Bootstrapping in Guix and Live-Bootstrap</strong>"</a>
by Ekaitz Zarraga (11:20 CET). An update on the RISC-V bootstrapping effort
in Guix and Live-bootstrap. Covering what's been done, what's left to do and
some of the lessons learned.</li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2560-self-hosting-and-autonomy-using-guix-forge/">"<strong>Self-hosting and autonomy using guix-forge</strong>"</a>
by Arun Isaac (11:40 CET). This talk demonstrates the value of Guix's declarative
configuration to simplify deploying and maintaining complex services. Showing
<a href="https://guix-forge.systemreboot.net/">guix-forge</a>, a project that
makes it easy to self-host an efficient software forge.</li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2331-spritely-guile-guix-a-unified-vision-for-user-security/">"<strong>Spritely, Guile, Guix: a unified vision for user security</strong>"</a>
by Christine Lemmer-Webber (12:00 CET). Spritely's goal is to create
networked communities that puts people in control of their own identity
and security. This talk will present a unified vision of how Spritely,
Guile, and Guix can work together to bring user freedom and security to
everyone!</li></ul><p>This year the track commemorates Joe Armstrong, who was the principal
inventor of <a href="https://www.erlang.org/">Erlang</a>. His focus on concurrency,
distribution and fault-tolerence are key topics in declarative and minimalistic
computing. This <a href="https://thenewstack.io/why-erlang-joe-armstrongs-legacy-of-fault-tolerant-computing/">article</a>
is a great introduction to his legacy. Along with
<a href="https://youtu.be/lKXe3HUG2l4?si=3zbc7BEbg1o6mW5R">"<strong>The Mess We're In</strong>"</a>, a
classic where he discusses why software is getting worse with time, and what can
be done about it.</p><p>On Sunday afternoon, the <a href="https://fosdem.org/2024/schedule/track/distributions/">Distributions devroom</a>
has another Guix talk:</p><ul><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2927-supporting-architecture-psabis-with-gnu-guix/">"<strong>Supporting architecture psABIs with GNU Guix</strong>"</a>
by Efraim Flashner (14:30 CET). Guix maintainer Efraim will be giving a
talk about improving Guix's performance. Demonstrating how to use psABI
targets that keep older hardware compatible while providing optimized
libraries for newer hardware.</li></ul><h3>Guix Days (Thursday and Friday)</h3><p>Guix Days will be taking place on the Thursday and Friday before FOSDEM. This is
an <a href="https://en.wikipedia.org/wiki/Unconference">"unconference-style"</a> event,
where the community gets together to focus on Guix's development. All the
details are on the
<a href="https://libreplanet.org/wiki/Group:Guix/FOSDEM2024"><strong>Libreplanet Guix Wiki</strong></a>.</p><h3>Participating</h3><p>Come and join in the fun, whether you're a new Guix user or seasoned hacker!
If you're not in Brussels you can still take part:</p><ul><li>See the <a href="https://fosdem.org/2024/schedule/">FOSDEM Schedule</a></li><li>Watch the <a href="https://fosdem.org/2024/schedule/streaming/">live streams</a></li><li>Chat in the unofficial <a href="https://matrix.to/#/#guix-days:matrix.org">Guix Days Matrix room</a></li></ul><h3>About GNU Guix</h3><p><a href="https://guix.gnu.org">GNU Guix</a> is a transactional package manager and
an advanced distribution of the GNU system that <a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html">respects user
freedom</a>.
Guix can be used on top of any system running the Hurd or the Linux
kernel, or it can be used as a standalone operating system distribution
for i686, x86_64, ARMv7, AArch64, and POWER9 machines.</p><p>In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection. When used as a standalone
GNU/Linux distribution, Guix offers a declarative, stateless approach to
operating system configuration management. Guix is highly customizable
and hackable through <a href="https://www.gnu.org/software/guile">Guile</a>
programming interfaces and extensions to the
<a href="http://schemers.org">Scheme</a> language.</p>https://guix.gnu.org/blog/2023/meet-guix-at-fosdem-2023//Meet Guix at FOSDEMLudovic Courtès2023-01-23T15:00:00Z2023-01-23T15:00:00Z GNU Guix will be present at FOSDEM next
week, February 4th and 5th. This is the first time since the pandemic
that FOSDEM takes place again “in the flesh” in Brussels, which is
exciting to those of us lucky enough to get there! Everything will be
live-streamed and recorded thanks to the amazing FOSDEM crew, so
everyone can enjoy wherever they are; some of the talks this year will
be “remote” too: pre-recorded videos followed by live Q&A sessions with
the speaker. Believe it or not, it’s the 9th year Guix is represented at
FOSDEM , with more than 30
talks given…<p>GNU Guix will be present at <a href="https://fosdem.org/2023/">FOSDEM</a> next
week, February 4th and 5th. This is the first time since the pandemic
that FOSDEM takes place again “in the flesh” in Brussels, which is
exciting to those of us lucky enough to get there! Everything will be
live-streamed and recorded thanks to the amazing FOSDEM crew, so
everyone can enjoy wherever they are; some of the talks this year will
be “remote” too: pre-recorded videos followed by live Q&A sessions with
the speaker.</p><p>Believe it or not, it’s the <a href="https://guix.gnu.org/en/blog/tags/fosdem/">9th year Guix is represented at
FOSDEM</a>, with more than 30
talks given in past editions! This year brings several talks that will let you
learn more about different areas of the joyful Hydra Guix has become.</p><p>This all starts on Saturday, in particular with the amazing <a href="https://fosdem.org/2023/schedule/track/declarative_and_minimalistic_computing/">declarative
and minimalistic computing
track</a>:</p><ul><li><a href="https://fosdem.org/2023/schedule/event/guixriscv/">“<em>Bringing RISC-V to Guix's
bootstrap</em>”</a>
(remote), as a continuation of <a href="https://fosdem.org/2022/schedule/event/riscvadventures/">last year’s
talk</a>, will
be Ekaitz Zarraga’s account of the successful port the <em>full-source
bootstrap</em> to RISC-V—no less!</li><li>In <a href="https://fosdem.org/2023/schedule/event/guixfhs/">“<em>Using GNU Guix Containers with FHS (Filesystem Hierarchy
Standard)
Support</em>”</a> (remote)
John Kehayias will present the recently-added <a href="https://guix.gnu.org/en/blog/2023/the-filesystem-hierarchy-standard-comes-to-guix-containers/"><code>guix shell --container --emulate-fhs</code></a>.</li><li><a href="https://fosdem.org/2023/schedule/event/minimalguixsystemimages/">“<em>Declaring just what is
necessary</em>”</a>
(remote) will show how to create system images that contain just
what you need, by Efraim Flashner.</li><li>In <a href="https://fosdem.org/2023/schedule/event/guixopenscience/">“<em>GNU Guix and Open Science, a
crush?</em>”</a>,
Simon Tournier will illustrates ways in which Guix can be beneficial
to “open science”.</li><li><a href="https://fosdem.org/2023/schedule/event/replicantguix/">“<em>How Replicant, a 100% free software Android distribution, uses
(or doesn't use)
Guix</em>”</a> will
showcase an unusual and exciting use case for Guix, by one of
Replicant’s core developers, Denis “GNUtoo” Carikli.</li><li><a href="https://fosdem.org/2023/schedule/event/guixhome/">“<em>An Introduction to Guix
Home</em>”</a> will be
given on Sunday (remote) by David Wilson of <a href="https://systemcrafters.net/">System
Crafters</a> fame—a must if you want to
understand this newfangled Guix Home thing!</li></ul><p>There are many other <a href="https://fosdem.org/2023/schedule/track/declarative_and_minimalistic_computing/">exciting talks in this
track</a>,
some of which closely related to Guix and Guile; check it out!</p><p>You can also discover Guix in other tracks:</p><ul><li>On Saturday, <a href="https://fosdem.org/2023/schedule/event/openresearch_guix/">“<em>Guix, toward practical transparent, verifiable and
long-term reproducible
research</em>”</a>
will be an introduction to Guix (by Simon Tournier) for an audience
of scientists interested in coming up with scientific practices that
improves verifiability and transparency.</li><li>On Saturday in the security track, <a href="https://fosdem.org/2023/schedule/event/security_where_does_that_code_come_from/"><em>“Where does that code come
from?”</em></a>
(by Ludovic Courtès) will talk Git checkout authentication in Guix
and how this fits in the broader picture of “software supply chain”
security.</li><li>On Sunday, Efraim Flashner will talk about <a href="https://fosdem.org/2023/schedule/event/rv_gnu_guix/">“<em>Porting RISC-V to
GNU Guix</em>”</a> in
the RISC-V track.</li><li>On Sunday, in the high-performance computing (HPC) track, Ludovic
Courtès will give a lightning talk about CPU tuning in Guix entitled
<a href="https://fosdem.org/2023/schedule/event/cpu_tuning_gnu_guix/">“<em>Reproducibility and performance: why
choose?</em>”</a>.</li></ul><p><img src="/static/blog/img/Guix-Days-2023.png" alt="Guix Days logo" /></p><p>As was the case pre-pandemic, we are also organizing the Guix Days as a
<a href="https://fosdem.org/2023/fringe/">FOSDEM fringe event</a>, a two-day Guix
workshop where contributors and enthusiasts will meet. The workshop
takes place on <strong>Thursday Feb. 2nd and Friday Feb. 3rd</strong> at the
<a href="https://www.openstreetmap.org/?mlat=50.85025&mlon=4.37326#map=19/50.85025/4.37326">Institute of Cultural Affairs (ICAB) in
Brussels</a>.</p><p>Again this year there will be few talks; instead, the event will
consist primarily of
“<a href="https://en.wikipedia.org/wiki/Unconference">unconference-style</a>”
sessions focused on specific hot topics about Guix, the Shepherd,
continuous integration, and related tools and workflows.</p><p>Attendance to the workshop is free and open to everyone, though you are
invited to register (there are few seats left!). Check out <a href="https://libreplanet.org/wiki/Group:Guix/FOSDEM2023">the
workshop’s wiki
page</a> for
registration and practical info. Hope to see you in Brussels!</p><h4>About GNU Guix</h4><p><a href="https://guix.gnu.org">GNU Guix</a> is a transactional package manager and
an advanced distribution of the GNU system that <a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html">respects user
freedom</a>.
Guix can be used on top of any system running the Hurd or the Linux
kernel, or it can be used as a standalone operating system distribution
for i686, x86_64, ARMv7, AArch64, and POWER9 machines.</p><p>In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection. When used as a standalone
GNU/Linux distribution, Guix offers a declarative, stateless approach to
operating system configuration management. Guix is highly customizable
and hackable through <a href="https://www.gnu.org/software/guile">Guile</a>
programming interfaces and extensions to the
<a href="http://schemers.org">Scheme</a> language.</p>https://guix.gnu.org/blog/2022/meet-guix-at-fosdem-2022//Meet Guix at FOSDEMLudovic Courtès2022-02-02T15:00:00Z2022-02-02T15:00:00Z As usual, GNU Guix will be present at FOSDEM
this week-end, February 5th and 6th. Due to the pandemic, FOSDEM takes
place on-line for the second year, but we’re confident the wires will be
able carry enthusiasm to the homes of the thousands of attendees. This year’s a bit special: we’re celebrating 10 years of Guix, including
8 years sharing our excitement at
FOSDEM ! This edition will
also bring you several talks about Guix and related projects. Sunday morning, in the distributions
track ,
co-maintainer and long-time hacker Mathieu Othacehe will present
“ Unify your distributions —…<p>As usual, GNU Guix will be present at <a href="https://fosdem.org/2022/">FOSDEM</a>
this week-end, February 5th and 6th. Due to the pandemic, FOSDEM takes
place on-line for the second year, but we’re confident the wires will be
able carry enthusiasm to the homes of the thousands of attendees.</p><p>This year’s a bit special: we’re celebrating 10 years of Guix, including
<a href="https://guix.gnu.org/en/blog/tags/fosdem/">8 years sharing our excitement at
FOSDEM</a>! This edition will
also bring you several talks about Guix and related projects.</p><ul><li>Sunday morning, in the <a href="https://fosdem.org/2022/schedule/track/distributions/">distributions
track</a>,
co-maintainer and long-time hacker Mathieu Othacehe will present
<a href="https://fosdem.org/2022/schedule/event/unify_your_distributions/">“<em>Unify your distributions — How GNU Guix can run on any of your
hardware</em>”</a></li></ul><p>The other talks will take place on Sunday as well, in the now
traditional track on <a href="https://fosdem.org/2022/schedule/track/declarative_and_minimalistic_computing/">declarative and minimalistic
computing</a>:</p><ul><li><a href="https://fosdem.org/2022/schedule/event/riscvadventures/">“<em>A year of RISC-V adventures: embracing chaos in your software
journey</em>”</a>
will be Ekaitz Zarraga’s account of the work porting
GNU Guile, stage0, and GNU Mes to RISC-V, which will be instrumental
in improving the RISC-V port of Guix.</li><li>With <a href="https://fosdem.org/2022/schedule/event/guixdeclare/"><em>“Declare All Your Needs — Managing computing environment
declaratively using
GNU Guix”</em></a>,
Andrew Tropin will show how you can declare your whole computing
environment using <a href="https://guix.gnu.org/manual/devel/en/html_node/System-Configuration.html">Guix
System</a>,
<a href="https://guix.gnu.org/manual/devel/en/html_node/Home-Configuration.html">Guix
Home</a>,
and <a href="https://git.sr.ht/~abcdw/rde/">rde</a>.</li><li>In <a href="https://fosdem.org/2022/schedule/event/gnuguixci/">“<em>GNU Guix behind the scene — Continuous integration for the
GNU Guix
project</em>”</a>,
Mathieu Othacehe will show what’s happening in the backyard of
<a href="https://ci.guix.gnu.org">Guix’s build farm</a>.</li><li><a href="https://fosdem.org/2022/schedule/event/commonworkflowlang/">“<em>Concise Common Workflow Language — Concision and elegance in a
workflow language using
Lisp</em>”</a>
will be Arun Isaac presenting <a href="https://hpc.guix.info/blog/2022/01/ccwl-for-concise-and-painless-cwl-workflows/">the all new
ccwl</a>, a
Guile domain-specific language (DSL) to define scientific workflows.</li></ul><p>But let’s be clear: there are other <a href="https://fosdem.org/2022/schedule/track/declarative_and_minimalistic_computing/">exciting talks in this
track</a>,
some of which closely related to Guix and Guile, so do not miss out!</p><p><img src="/static/blog/img/Guix-Days-online-2022.png" alt="Guix Days logo" /></p><p>As in previous years, we are also organizing a <a href="https://guix.gnu.org/en/blog/2022/online-guix-days-2022-announcement-1/">two-day on-line
event</a>
two weeks after FOSDEM. If you’d like to share what you’ve done with
Guix or in Guix, if you have packaging stories from the trenches,
there’s <em>one week left to submit a talk</em>. At any rate, whether you’re
simply curious about Guix or whether you’re already deep into, we hope
to see you on February, 19–20!</p><h4>About GNU Guix</h4><p><a href="https://guix.gnu.org">GNU Guix</a> is a transactional package manager and
an advanced distribution of the GNU system that <a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html">respects user
freedom</a>.
Guix can be used on top of any system running the Hurd or the Linux
kernel, or it can be used as a standalone operating system distribution
for i686, x86_64, ARMv7, AArch64 and POWER9 machines.</p><p>In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection. When used as a standalone
GNU/Linux distribution, Guix offers a declarative, stateless approach to
operating system configuration management. Guix is highly customizable
and hackable through <a href="https://www.gnu.org/software/guile">Guile</a>
programming interfaces and extensions to the
<a href="http://schemers.org">Scheme</a> language.</p>https://guix.gnu.org/blog/2021/meet-guix-at-fosdem-2021//Meet Guix at FOSDEMLudovic Courtès2021-02-02T15:00:00Z2021-02-02T15:00:00Z As usual, GNU Guix will be present at FOSDEM
on February 6th and 7th. Due to the pandemic, this year’s edition takes
place on-line. The downside is that we’ll miss beautiful Brussels, but
on the up side hopefully people who cannot join physically will be able
to attend this year, and the event’s carbon footprint will be much
lower. We’re happy to say that there will be several talks about Guix and
related projects! Saturday afternoon, Guix Workflow Language — Extending a
reproducible software deployment system for
HPC by
Ricardo Wurmus, in the high-performance computing (HPC)
track…<p>As usual, GNU Guix will be present at <a href="https://fosdem.org/2021/">FOSDEM</a>
on February 6th and 7th. Due to the pandemic, this year’s edition takes
place on-line. The downside is that we’ll miss beautiful Brussels, but
on the up side hopefully people who cannot join physically will be able
to attend this year, and the event’s carbon footprint will be much
lower.</p><p>We’re happy to say that there will be several talks about Guix and
related projects!</p><ul><li>Saturday afternoon, <a href="https://fosdem.org/2021/schedule/event/guix_workflow/"><em>Guix Workflow Language — Extending a
reproducible software deployment system for
HPC</em></a> by
Ricardo Wurmus, in the <a href="https://fosdem.org/2021/schedule/track/hpc_big_data_and_data_science/">high-performance computing (HPC)
track</a>,
will introduce the <a href="https://workflows.guix.info/">Guix Workflow
Language</a> and discuss the state of
workflow languages.</li></ul><p>Sunday, the <a href="https://fosdem.org/2021/schedule/track/declarative_and_minimalistic_computing/">Declarative and Minimalistic Computing
track</a>
will be home to several Guix talks:</p><ul><li>Around noon, <a href="https://fosdem.org/2021/schedule/event/gnumes/"><em>GNU Mes: the Full Source Bootstrap — The missing link
between stage0/M2-Planet and
Mes</em></a> by Jan
“janneke” Nieuwenhuizen will present the latest advances in
<a href="https://guix.gnu.org/en/blog/tags/bootstrapping/">bootstrapping</a>:
building the root of the Guix package collection <em>entirely from
source</em>!</li><li>Early in the afternoon, <a href="https://fosdem.org/2021/schedule/event/gnuguix/"><em>Declaratively yours — Composing system
abstractions with
GNU Guix</em></a> by
Ludovic Courtès will present how Guix takes advantage of its
declarative structure, showcasing concrete examples.</li><li><a href="https://fosdem.org/2021/schedule/event/minimalismguix/"><em>Is GNU Guix a minimal distribution, and what might that even
mean?</em></a> by
Christopher Baines will reflect on what minimalism means for
distributions and how it might apply to Guix.</li></ul><p>Do not miss all the other <a href="https://fosdem.org/2021/schedule/track/declarative_and_minimalistic_computing/">exciting talks in this
track</a>,
some by Guile and Guix hackers!</p><p>For the fourth time, we are also organizing a <a href="https://fosdem.org/2021/fringe/">FOSDEM fringe
event</a> on Monday, February 8th, a
<strong>one-day Guix workshop</strong> where contributors and enthusiasts will meet,
on-line. Being an on-line event, we hope to attract people (maybe you?)
who wouldn’t have come to the in-person meeting but will be happy to
learn about what’s cooking in Guix and share their experience, needs,
and ideas.</p><p>Again this year there will be few talks; instead, the event will
consist primarily of
“<a href="https://en.wikipedia.org/wiki/Unconference">unconference-style</a>”
sessions focused on specific hot topics about Guix, the Shepherd,
continuous integration, and related tools and workflows.</p><p>Attendance to the workshop is free and open to everyone, though you are
invited to register (there are only a few seats left!). Join <a href="https://guixbbb.fosshost.org">our
BigBlueButton instance</a> on Monday 8th, and
check out <a href="https://libreplanet.org/wiki/Group:Guix/FOSDEM2021">the workshop’s wiki
page</a> for practical
info. Hope to see you on-line!</p><h4>About GNU Guix</h4><p><a href="https://guix.gnu.org">GNU Guix</a> is a transactional package manager and
an advanced distribution of the GNU system that <a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html">respects user
freedom</a>.
Guix can be used on top of any system running the Hurd or the Linux
kernel, or it can be used as a standalone operating system distribution
for i686, x86_64, ARMv7, and AArch64 machines.</p><p>In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection. When used as a standalone
GNU/Linux distribution, Guix offers a declarative, stateless approach to
operating system configuration management. Guix is highly customizable
and hackable through <a href="https://www.gnu.org/software/guile">Guile</a>
programming interfaces and extensions to the
<a href="http://schemers.org">Scheme</a> language.</p>https://guix.gnu.org/blog/2020/meet-guix-at-fosdem-2020//Meet Guix at FOSDEMManolis Ragkousis2020-01-10T14:30:00Z2020-01-10T14:30:00Z As usual, GNU Guix will be present at FOSDEM
on February 1st and 2nd. This year, we’re happy to say that there will
be quite a few talks about Guix and related projects! On Saturday afternoon, Guix: Unifying provisioning, deployment, and
package management in the age of
containers by Ludovic
in the main track on containers and
security ,
will reflect on what GNU Guix
has to offer to users and how it compares to other approaches—from
CONDA and pip to Flatpak and Docker. Sunday morning starts with Efraim talking in the Rust devroom about
Packaging Rust…<p>As usual, GNU Guix will be present at <a href="https://fosdem.org/2020/">FOSDEM</a>
on February 1st and 2nd. This year, we’re happy to say that there will
be quite a few talks about Guix and related projects!</p><ul><li>On Saturday afternoon, <a href="https://fosdem.org/2020/schedule/event/guix/"><em>Guix: Unifying provisioning, deployment, and
package management in the age of
containers</em></a> by Ludovic
in the <a href="https://fosdem.org/2020/schedule/track/containers_and_security/">main track on containers and
security</a>,
will reflect on what GNU Guix
has to offer to users and how it compares to other approaches—from
CONDA and pip to Flatpak and Docker.</li><li>Sunday morning starts with Efraim talking in the Rust devroom about
<a href="https://fosdem.org/2020/schedule/event/rust_packaging_gnu_guix/"><em>Packaging Rust programs in
GNU Guix</em></a>—telling
Rust programmers about the needs of a distro like Guix, and about the
journey building infrastructure for Rust packages in Guix.</li><li>Next up is <a href="https://fosdem.org/2020/schedule/event/ggaaattyp/"><em>GNU Guix as an alternative to the
Yocto Project</em></a> by
Mathieu in the Distributions devroom will demonstrate how to use
GNU Guix to build a root filesystem for an embedded device.</li><li>Later on in the HPC, Big Data, and Data Science devroom, Ludovic will
present <a href="https://fosdem.org/2020/schedule/event/reprod_jupyter_guix/"><em>Towards reproducible Jupyter
notebooks</em></a>
which will talk about
<a href="https://hpc.guix.info/blog/2019/10/towards-reproducible-jupyter-notebooks/">Guix-Jupyter</a>,
which aims to make Jupyter
notebook self-contained and to support reproducible deployment.</li><li>In the same devroom, Efraim will present <a href="https://fosdem.org/2020/schedule/event/reprod_container/"><em>Sharing Reproducible Results
in a
Container</em></a>
about how Guix solves the issue of reproducibility and deployment of
containers.</li><li>Finally in the Minimalistic, Experimental and Emerging Languages
devroom, janneke with <a href="https://fosdem.org/2020/schedule/event/gnumes/"><em>GNU Mes, Scheme-only bootstrap and
beyond</em></a> will report
on three years of hard work tackling one of the most pressing
security issues of operating systems—the “trusting trust” attack.
Janneke will present exciting bootstrapping achievements and their
integration in Guix.</li><li>Pierre will present <a href="https://fosdem.org/2020/schedule/event/gnuguixpackagemanager/"><em>Universal package & service discovery with
Guix</em></a>
on how he intends to leverage the Guile programming language to boost
searchability of packages and services <em>via</em> intuitive user interfaces
and semantics.</li><li>Pjotr will talk about why minimalism matters in computing with <a href="https://fosdem.org/2020/schedule/event/lispeverywhere/"><em>Lisp
everywhere!</em></a></li><li>Andy will discuss all the work that has gone into the upcoming
<a href="https://www.gnu.org/software/guile/news">Guile 3</a>—which will soon
power Guix—making it a faster implementation, with <a href="https://fosdem.org/2020/schedule/event/guile2020/"><em>Celebrating
Guile 2020</em></a>.</li><li>Last, Chris Marusich will give an <a href="https://fosdem.org/2020/schedule/event/gexpressionsguile"><em>Introduction to
G-Expressions</em></a>,
the magic behind
<a href="https://guix.gnu.org/manual/devel/en/html_node/G_002dExpressions.html">them</a>,
and how to use them in Guix.</li></ul><p>The <a href="https://fosdem.org/2020/schedule/track/minimalistic_experimental_and_emerging_languages/">Minimalistic, Experimental and Emerging Languages
devroom</a>
will also feature talks about about <a href="https://racket-lang.org">Racket</a>,
<a href="https://www.lua.org/">Lua</a>, <a href="https://crystal-lang.org/">Crystal</a>,
<a href="https://nim-lang.org/">Nim</a>, and <a href="https://pharo.org/">Pharo</a>
that you should not miss under any circumstances!</p><p><img src="https://guix.gnu.org/static/blog/img/Guix-Days-2020.png" alt="Guix Days logo." /></p><p>For the third time, we are also organizing the Guix Days as a <a href="https://fosdem.org/2020/fringe/">FOSDEM
fringe event</a>, a two-day Guix workshop
where contributors and enthusiasts will meet. The workshop takes place
on Thursday Jan. 30st and Friday Jan. 31st at the Institute of Cultural
Affairs (ICAB) in Brussels.</p><p>Again this year there will be few talks; instead, the event will
consist primarily of
“<a href="https://en.wikipedia.org/wiki/Unconference">unconference-style</a>”
sessions focused on specific hot topics about Guix, the Shepherd,
continuous integration, and related tools and workflows.</p><p>Attendance to the workshop is free and open to everyone, though you are
invited to register (there are only a few seats left!). Check out <a href="https://libreplanet.org/wiki/Group:Guix/FOSDEM2020">the
workshop’s wiki
page</a> for
registration and practical info. Hope to see you in Brussels!</p><h4>About GNU Guix</h4><p><a href="https://guix.gnu.org">GNU Guix</a> is a transactional package
manager and an advanced distribution of the GNU system that <a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html">respects
user
freedom</a>.
Guix can be used on top of any system running the kernel Linux, or it
can be used as a standalone operating system distribution for i686,
x86_64, ARMv7, and AArch64 machines.</p><p>In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection. When used as a standalone
GNU/Linux distribution, Guix offers a declarative, stateless approach to
operating system configuration management. Guix is highly customizable
and hackable through <a href="https://www.gnu.org/software/guile">Guile</a>
programming interfaces and extensions to the
<a href="http://schemers.org">Scheme</a> language.</p>https://guix.gnu.org/blog/2019/documentation-video-creation//Documentation video creationLaura Lazzati2019-03-15T12:00:00Z2019-03-15T12:00:00Z Over the last few months, I have been working as an
Outreachy intern with the GNU Guix crowd
to develop videos presenting and documenting the project.
My goal in this round as an Outreachy
intern for the December 2018 to March 2019 period consists of creating introductory documentation videos
about different topics for people who would like to use GNU Guix,
admins and/or those who would like to join Guix community and don’t
know where to start. Even interested or having a clear documentation, they
might feel overwhelmed by it. I experienced this issue in the past with people in another context. My main tasks consist…<p>Over the last few months, I have been working as an
<a href="https://www.outreachy.org/">Outreachy</a> intern with the GNU Guix crowd
to develop videos presenting and documenting the project.
My goal in this round as an Outreachy
intern for the December 2018 to March 2019 period consists of creating introductory documentation videos
about different topics for people who would like to use GNU Guix,
admins and/or those who would like to join Guix community and don’t
know where to start. Even interested or having a clear documentation, they
might feel overwhelmed by it. I experienced this issue in the past with people in another context.</p><p>My main tasks consist of creating a workflow for
automating as much as possible the process of creating the videos, as well as,
of course, creating the videos themselves. Creating the videos is not that easy
as it might seem, I have to design them (I cannot automate that part), let
the audio match the video, and matching the exact timing is quite difficult.
Something very important that I should mention is that the workflow currently
allows translations to other languages.</p><p>It is a work in progress for too many reasons, specially because it keeps
being improved all the time.</p><p>Also, I had to study tools deeply both for the creation of the workflow and the videos
because I did not know them beforehand or I knew just the basics.</p><p>After trying several approaches for the workflow, the current one consists of
creating “pieces of videos” and gluing them together in the end.</p><p>These “pieces of videos” may consist of:</p><ul><li>Slide videos: they contain only a sequence of one or more slides.</li><li>Command line session videos: they contain only Guix or shell commands and
their output, without showing any slide at all.</li></ul><h5>Workflow for creating each slide video.</h5><p><img src="https://www.gnu.org/software/guix/static/blog/img/outreachy-2019-slide-video.png" alt="slide" /></p><p>The inputs are SVG files and audio files.
First, SVGs are converted to PNGs (“the slides”).
Then, a text file having the order in which each slide will
appear and the duration of the audio that matches it is created.
An audio text file containing all the audio files sorted to
have a complete audio file is created too.
Lastly, with the slides' text file that has the reference to the slide files
and the glued audio file the final slide video is made.</p><h5>Workflow for creating each command line session video.</h5><p><img src="https://www.gnu.org/software/guix/static/blog/img/outreachy-2019-cli-video.png" alt="cli" /></p><p>The input is a session text file that has commands or meta-commands that
are used to simulate, for example, the typing of a command, or the printing of
it’s output.
This file is passed to a Guile script that is in charge of executing the
commands defined in the input text file and take text snapshots at a fixed time
interval. Then, all these files are converted to postscript format. After
that, they are transformed to SVG format. Finally, the process is repeated and
the audio and the slides are glued to have final command line session video.</p><h5>Workflow for creating the final video.</h5><p><img src="https://www.gnu.org/software/guix/static/blog/img/outreachy-2019-gluing-video.png" alt="gluing" /></p><p>Slide videos and command line videos are a “bunch of videos”
that need to be glued into the final one. They are sorted, and using the
same tool for video creation our final introductory video is created.</p><p>The code for this video creation workflow is available
<a href="https://git.savannah.gnu.org/cgit/guix/videos.git">on Savannah</a>.
Enjoy!</p><h4>About GNU Guix</h4><p><a href="https://www.gnu.org/software/guix">GNU Guix</a> is a transactional package
manager and an advanced distribution of the GNU system that <a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html">respects
user
freedom</a>.
Guix can be used on top of any system running the kernel Linux, or it
can be used as a standalone operating system distribution for i686,
x86_64, ARMv7, and AArch64 machines.</p><p>In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection. When used as a standalone
GNU/Linux distribution, Guix offers a declarative, stateless approach to
operating system configuration management. Guix is highly customizable
and hackable through <a href="https://www.gnu.org/software/guile">Guile</a>
programming interfaces and extensions to the
<a href="http://schemers.org">Scheme</a> language.</p><blockquote><p><em>This post does not yet carry an agreed-upon license.</em></p></blockquote>https://guix.gnu.org/blog/2019/guix-days-bootstrapping-arm//Guix Days: Bootstrapping ARMChris Marusich2019-02-22T00:00:00Z2019-02-22T00:00:00Z During the Guix
Days before
FOSDEM , some of us discussed bootstrapping
on ARM architectures. We focused on how to port Mes to ARM. This
post consists of notes from that discussion. Recap: i686/x86_64 Reduced Binary Seed We started our discussion by reviewing the current status for
i686-linux and x86_64-linux. Jan (janneke) Nieuwenhuizen gave a
similar summary a few
days later at FOSDEM, and you can read the slides
online . Previously, the size of Guix's binary seed totaled about 250 MB. Now,
on the
core-updates
branch, it's been reduced to about 130 MB.…<p>During the <a href="https://libreplanet.org/wiki/Group:Guix/FOSDEM2019">Guix
Days</a> before
<a href="https://fosdem.org/2019/">FOSDEM</a>, some of us discussed bootstrapping
on ARM architectures. We focused on how to port Mes to ARM. This
post consists of notes from that discussion.</p><h4>Recap: i686/x86_64 Reduced Binary Seed</h4><p>We started our discussion by reviewing the current status for
i686-linux and x86_64-linux. Jan (janneke) Nieuwenhuizen gave <a href="https://fosdem.org/2019/schedule/event/gnumes/">a
similar summary</a> a few
days later at FOSDEM, and you can <a href="https://fosdem.org/2019/schedule/event/gnumes/attachments/slides/2848/export/events/attachments/gnumes/slides/2848/gnu_mes_fosdem19_v2.pdf">read the slides
online</a>.</p><p>Previously, the size of Guix's binary seed totaled about 250 MB. Now,
on the
<a href="http://git.savannah.gnu.org/cgit/guix.git/log/?h=core-updates">core-updates</a>
branch, it's been reduced to about 130 MB. This is nearly a 50%
reduction in size, which is great progress! Using this 130 MB reduced
binary seed, it's currently possible to bootstrap Guix for both
i686-linux and x86_64-linux.</p><p>To bootstrap x86_64-linux, we actually "cheat" and bootstrap from the
i686-linux bootstrap binaries. This is possible because an
x86_64-linux system can natively run i686-linux executables, and also
because Guix automatically <a href="http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/commencement.scm?id=63d4ef52ebad4157817d56ccbe974da8fff81929#n1562">cross-compiles for the host
platform</a>
during the bootstrap process. In other words, on an x86_64-linux
system, Guix uses the i686-linux bootstrap binaries to build a
cross-compilation toolchain, which it then uses to build a final,
normal x86_64-linux toolchain. Guix then uses this final toolchain to
build everything else for the x86_64-linux system.</p><p>That's great news for owners of i686 and x86_64 machines! But what
about ARM? Although we could cross-compile the bootstrap binaries for
ARM from an x86_64 machine, this isn't great because it would increase
the number of things a person or organization would have to verify in
order to audit the system. Perhaps more importantly, it would force
owners of ARM machines to implicitly trust an x86_64 machine. The
dominant vendors of CPUs implementing the x86_64 architecture, Intel
and AMD, both include a management engine in many of their products,
which represents a <a href="https://www.fsf.org/blogs/sysadmin/the-management-engine-an-attack-on-computer-users-freedom">serious risk to user
freedom</a>.</p><p>In the short term, cross-compilation is better than nothing, but in
the long term, we'd prefer to bootstrap ARM without cross-compiling
from another architecture. Concretely, we'll need to complete at
least the following tasks.</p><h4>TODO: Implement a Mes backend for ARM</h4><p>We need to implement a new Mes backend for an ARM architecture. We
should choose an ARM instruction set that can work on a variety of ARM
platforms with minimal fuss. The following candidates were suggested:</p><ul><li><p>ARMv4. We would need to avoid unaligned memory accesses because
they can behave in different ways depending on the CPU. This is the
latest version of ARM that GCC 2.95 supports, which matters because
<a href="http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/commencement.scm?id=63d4ef52ebad4157817d56ccbe974da8fff81929#n510">GCC 2.95 is the latest version that the Mes C Library
supports</a>.</p></li><li><p>ARMv7. If we avoid extensions and unaligned memory accesses, it
might still work for our needs. It was mentioned in the session
that TinyCC will probably work with either ARMv4 or ARMv7. In
TinyCC, as a first step, it's probably fine to depend on ARMv7 since
it's the most common recent architecture version (and it is more
forgiving). Later, if we remove unaligned accesses, it will also
work on ARMv4 and thus on basically all ARM CPUs.</p></li></ul><p>After the session concluded, Danny Milosavljevic committed some
changes to <a href="http://git.savannah.gnu.org/cgit/mes.git/log/?h=wip-arm">the wip-arm branch of
mes</a> which
enabled many of the tests to pass - but some tests still fail, and you
can help finish the work!</p><h4>TODO: Port mescc-tools to ARM, also</h4><p>The mes project depends upon the
<a href="https://savannah.nongnu.org/projects/mescc-tools">mescc-tools</a>
project, which also must be ported. The mescc-tools project contains
an M1 macro assembler, which would need to be extended to support ARM
branches. Currently, ARM branches are very broken.</p><h4>TODO: Improve Guix integration and merge core-updates</h4><p>Even if we had a new Mes backend and mescc-tools for ARM, there would
still be more to do. The Guix integration is not quite complete - the
<a href="http://git.savannah.gnu.org/cgit/guix.git/log/?h=core-updates">core-updates</a>
branch still needs to be merged with
<a href="http://git.savannah.gnu.org/cgit/guix.git/log/?h=master">master</a>, and
we'll need to fix any problems that arise. Even on i686-linux, the
bottom of the bootstrap path is incomplete. Preliminary Guix code
exists on the
<a href="http://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-bootstrap">wip-bootstrap</a>
branch to achieve a scheme-only bootstrap, but help would be welcome!</p><h4>You can help!</h4><p>In summary, you can help the Mes project by doing any of the following
things:</p><ul><li><p>Help implement an ARMv7 (or ARMv4) backend for Mes! This entails
machine code and assembly. It should be fun for anyone who wants to
play around close to the metal.</p></li><li><p>Help port mescc-tools to ARM. This entails <a href="http://git.savannah.nongnu.org/cgit/mescc-tools.git/tree/HACKING?id=0a930aa47389ec842bcbe8a270ab2921a36f62d9#n33">writing an assembler in
M1 macro
code</a>
and probably goes hand-in-hand with work on Mes itself.</p></li><li><p>Help firm up
<a href="http://git.savannah.gnu.org/cgit/guix.git/log/?h=core-updates">core-updates</a>
and merge it to
<a href="http://git.savannah.gnu.org/cgit/guix.git/log/?h=master">master</a>!
This involves Guix package definitions and troubleshooting build
failures. It should be fun for anyone who wants to learn more about
the bigger picture of how Guix bootstraps all of its software from
the new reduced binary seed.</p></li><li><p>Help complete the i686-linux and x86_64-linux bootstrap. You can
hack on the bleeding edge scheme code in the
<a href="http://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-bootstrap">wip-bootstrap</a>
branch, or maybe you can help extend the bootstrap path all the way
down to <a href="https://github.com/oriansj/stage0">approximately 500 bytes of auditable assembly
code</a>!</p></li></ul><p>There's still plenty of meaty work left to be done! If you're
interested, <a href="http://bootstrappable.org/who.html">get in touch</a> and
we'll help you get started.</p><h4>Think Big: Bootstrapping without an OS</h4><p>In addition to the immediate tasks necessary for porting Mes to ARM,
we also took some time to think about the long term hopes and dreams
of the bootstrappable project.</p><p>We discussed how in the long term, in parallel with the aforementioned
tasks, it should be possible to investigate how to bootstrap an entire
system without relying on a OS or even a kernel running on the
machine. For example, one can imagine loading the transitive closure
of source (including a tiny, human-readable machine code program to
kick off the entire process) into a computer as a kind of "firmware
image". When the computer runs, it would execute this "firmware
image" and eventually produce a fully bootstrapped system.</p><h4>Think Bigger: Bootstrapping Hardware</h4><p>We also briefly talked about how even after we achieve full source
software bootstrap, we will still need to tackle the problem of
"hardware bootstrap". It isn't clear what form this will eventually
take, but surely <a href="https://www.gnu.org/philosophy/free-hardware-designs.en.html">free hardware
design</a>
will play an important role in ensuring that we can trust our
hardware, too.</p><h4>About Bootstrappable Builds and Mes</h4><p>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
<a href="https://www.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf">for</a>
<a href="https://manishearth.github.io/blog/2016/12/02/reflections-on-rusting-trust/">a</a>
<a href="https://www.quora.com/What-is-a-coders-worst-nightmare/answer/Mick-Stute">variety</a>
<a href="http://blog.regehr.org/archives/1241">of</a>
<a href="https://www.alchemistowl.org/pocorgtfo/pocorgtfo08.pdf">reasons</a>.
The <a href="https://bootstrappable.org/">Bootstrappable Builds</a> project aims
to reduce the number and size of binary seeds to a bare minimum.</p><p><a href="https://www.gnu.org/software/mes/">GNU Mes</a> 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.</p><p>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 <a href="http://gitlab.com/janneke/tinycc">a lightly patched
TinyCC</a> 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.</p><h4>About GNU Guix</h4><p><a href="https://www.gnu.org/software/guix">GNU Guix</a> is a transactional package
manager and an advanced distribution of the GNU system that <a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html">respects
user
freedom</a>.
Guix can be used on top of any system running the kernel Linux, or it
can be used as a standalone operating system distribution for i686,
x86_64, ARMv7, and AArch64 machines.</p><p>In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection. When used as a standalone
GNU/Linux distribution, Guix offers a declarative, stateless approach to
operating system configuration management. Guix is highly customizable
and hackable through <a href="https://www.gnu.org/software/guile">Guile</a>
programming interfaces and extensions to the
<a href="http://schemers.org">Scheme</a> language.</p>https://guix.gnu.org/blog/2019/qa-on-non-intel-at-guix-days//QA on non-Intel at Guix DaysEfraim Flashner2019-02-07T09:30:00Z2019-02-07T09:30:00Z During the second day of Guix Days (a FOSDEM fringe
event ) we split up into smaller working groups
based on our areas of interest. I led a group which aimed to address some of
the package issues which exist on non-Intel architectures. Of course not
everyone has access to an ARM board, but with the
qemu-binfmt-service
service it is possible to use QEMU and the binfmt_misc functionality of the
Linux kernel to emulate these systems. Many have reported that this system
emulation is comparable in speed to many of the available ARM boards on the
market. Yet another possibility…<p>During the second day of Guix Days (a FOSDEM <a href="https://fosdem.org/2019/fringe">fringe
event</a>) we split up into smaller working groups
based on our areas of interest. I led a group which aimed to address some of
the package issues which exist on non-Intel architectures. Of course not
everyone has access to an ARM board, but with the
<a href="https://www.gnu.org/software/guix/manual/en/html_node/Virtualization-Services.html#index-binfmt_005fmisc"><code>qemu-binfmt-service</code></a>
service it is possible to use QEMU and the <code>binfmt_misc</code> functionality of the
Linux kernel to emulate these systems. Many have reported that this system
emulation is comparable in speed to many of the available ARM boards on the
market. Yet another possibility would be to do the hacking on an x86_64 system
and, when we had a working prototype, to test it with QEMU or on actual ARM
hardware.</p><p>Our group decided to tackle Go, which was lacking support in Guix on armhf and
aarch64. Upon checking the build logs from Cuirass and the source code for Go we
determined that Go did indeed require the <code>gold</code> linker from the GNU Binutils. We
didn't want to modify the copy of Binutils in Guix since it is part of our
bootstrap story, so we quickly put together a new package definition which added
the configure flag to enable <code>gold</code>.</p><pre><code class="language-scheme">(define-public binutils-gold
(package
(inherit binutils)
(name "binutils-gold")
(arguments
(substitute-keyword-arguments (package-arguments binutils)
((#:configure-flags flags)
`(cons "--enable-gold=default" ,flags))))))</code></pre><p>This was an obvious first step, and one which we knew would fail. Had it been
this easy <code>gold</code> would have been enabled back in 2012 when it was first added.
Our error came in the form of one of the binaries not being able to link against
<code>libstdc++.so</code>, which is in the <code>gcc:lib</code> output. This was quickly added and we
were off and building again.</p><pre><code class="language-scheme">(define-public binutils-gold
(package
(inherit binutils)
(name "binutils-gold")
(arguments
(substitute-keyword-arguments (package-arguments binutils)
((#:configure-flags flags)
`(cons "--enable-gold=default" ,flags))))
(inputs
`(("gcc:lib" ,gcc "lib")))))</code></pre><p>Once again this failed. What were we missing? The correct paths were included,
the file was indeed in the <code>gcc:lib</code> output. We inspected the original
<code>binutils</code> package again noticed that it was built against a static libgcc, so
of course it wouldn't find the shared library. In order to work quickly we
copied the configure flags rather than inheriting them from <code>binutils</code> and
tried our build again.</p><pre><code class="language-scheme">(define-public binutils-gold
(package
(inherit binutils)
(name "binutils-gold")
(arguments
(substitute-keyword-arguments (package-arguments binutils)
((#:configure-flags flags)
`(cons* "--enable-gold=default"
"--enable-new-dtags"
"--with-lib-path=/no-ld-lib-path"
"--enable-install-libbfd"
"--enable-deterministic-archives"))))
(inputs
`(("gcc:lib" ,gcc "lib")))))</code></pre><p>This time we made it through the full build phase and we knew we were almost
there. Our enthusiasm was quickly dampened when we got the error during the
tests: <code>unable to find the 'dc' program</code>. What is this <code>dc</code> program? This isn't
any package any of us had heard of before. It definitely wasn't packaged in
Guix. A quick <code>apt-cache search dc</code> search in Ubuntu showed they didn't have
package either. A second search of Ubuntu, <code>apt-file search dc | grep '/bin/dc'</code>
quickly showed us it was in the <code>bc</code> package, and soon we were building
<code>binutils-gold</code> again.</p><pre><code class="language-scheme">(define-public binutils-gold
(package
(inherit binutils)
(name "binutils-gold")
(arguments
(substitute-keyword-arguments (package-arguments binutils)
((#:configure-flags flags)
`(cons* "--enable-gold=default"
"--enable-new-dtags"
"--with-lib-path=/no-ld-lib-path"
"--enable-install-libbfd"
"--enable-deterministic-archives"))))
(native-inputs
`(("bc" ,bc)))
(inputs
`(("gcc:lib" ,gcc "lib")))))</code></pre><p>Approaching the end of the <code>check</code> phase we soon ran into another error, there
was an unpatched <code>/bin/sh</code> somewhere in the source code which was generated
during the check phase. Based on the build logs we were able to track down
approximately where the code should be, so we downloaded the source <code>tar xf $(guix build --source binutils)</code> and started looking. There were many obvious
<code>/bin/sh</code> calls which we cross-referenced with the build logs and the
<code>patch-source-shebangs</code> phase, and this left us with some code in
<code>gold/Makefile.in</code>, which by default is not included in the
<code>patch-source-shebangs</code> and would need to be fixed manually.</p><pre><code class="language-scheme">(define-public binutils-gold
(package
(inherit binutils)
(name "binutils-gold")
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'patch-source-shebangs 'patch-more-shebangs
(lambda _
(substitute* "gold/Makefile.in"
(("/bin/sh") (which "sh")))
#t)))
,@(substitute-keyword-arguments (package-arguments binutils)
((#:configure-flags flags)
`(cons* "--enable-gold=default"
"--enable-new-dtags"
"--with-lib-path=/no-ld-lib-path"
"--enable-install-libbfd"
"--enable-deterministic-archives")))))
(native-inputs
`(("bc" ,bc)))
(inputs
`(("gcc:lib" ,gcc "lib")))))</code></pre><p>One more build cycle later and we did it! <code>/gnu/store/…-binutils-gold-2.31.1</code>
existed! We now did two things, we copied our patch over to an aarch64 build
machine and we started cleaning up our package definition on our x86_64 build
machine, where we knew we had a working package definition.</p><pre><code class="language-scheme">(define-public binutils-gold
(package
(inherit binutils)
(name "binutils-gold")
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'patch-source-shebangs 'patch-more-shebangs
(lambda _
(substitute* "gold/Makefile.in"
(("/bin/sh") (which "sh")))
#t)))
,@(substitute-keyword-arguments (package-arguments binutils)
((#:configure-flags flags)
`(cons* "--enable-gold=default"
(delete "LDFLAGS=-static-libgcc" ,flags))))))
(native-inputs
`(("bc" ,bc)))
(inputs
`(("gcc:lib" ,gcc "lib")))))</code></pre><p>Fortunately for us the changes in the code worked on x86_64 and we still got a
working <code>binutils-gold</code> output. On our aarch64 side the build was progressing
nicely and everything seemed fine... until we suddenly were presented with big
red errors about unrelocatable code. How could it? Everything was working so
well! Undeterred, we built the source again, this time targeting armhf and were
unfortunately presented with similar errors. Deciding to address the test
failures later (It's ARM! It's not as well tested as other architectures!
Right?) we disabled the tests and unsurprisingly <code>binutils-gold</code> built on both
aarch64 and armhf.</p><pre><code class="language-scheme">(define-public binutils-gold
(package
(inherit binutils)
(name "binutils-gold")
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'patch-source-shebangs 'patch-more-shebangs
(lambda _
(substitute* "gold/Makefile.in"
(("/bin/sh") (which "sh")))
#t)))
,@(substitute-keyword-arguments (package-arguments binutils)
((#:tests? _ #f) #f)
((#:configure-flags flags)
`(cons* "--enable-gold=default"
(delete "LDFLAGS=-static-libgcc" ,flags))))))
(native-inputs
`(("bc" ,bc)))
(inputs
`(("gcc:lib" ,gcc "lib")))))</code></pre><p>Now for the real test. Due to bootstrapping issues with Go and aarch64, aarch64
uses Go@1.4 built for armhf. Go@1.11 failed to build until now because it was
missing the <code>gold</code> linker. Surely using the <code>gold</code> linker would be a good test
if our package worked. Since Go for aarch64 is 'more complex' due to the
bootstrapping using armhf's Go, we decided to test armhf first. <code>binutils-gold</code>
was added and our build started.</p><pre><code class="language-diff"> (native-inputs
`(("go" ,go-1.4)
+ ,@(match (%current-system)
+ ((or "armhf-linux" "aarch64-linux")
+ `(("gold" ,binutils-gold)))
+ (_ `()))
,@(package-native-inputs go-1.4)))</code></pre><p>First build, success! <code>/gnu/store/…-go-1.11.5</code> exists! OK, but does it
actually work? <code>guix build syncthing --system=armhf-linux</code>.
<code>/gnu/store/…-syncthing-1.0.0</code> exists too! A quick check of <code>guix refresh --list-dependent go@1.4</code> showed that we had unlocked 176 new packages for armhf.
Even better, since they had all failed by default due to go@1.11 failing to
build, for each package that did build meant one fewer package which failed to
build which should take a big bite out of our build failures.</p><p>Our next test was syncthing for aarch64. <code>/gnu/store/…-go-1.11.5</code> exists!
<code>/gnu/store/…-syncthing-1.0.0</code> ... does not. "<code>unknown architecture 'armv7-a'</code>."
It seems that Go is confused which architecture it is building for.
Unfortunately we were reaching the end of our time for hacking, so that will
have to wait for another day. All that was left now was the test failures on
<code>binutils-gold</code> for the ARM systems. Some attempts at cargo-culting other code
failed (per-architecture tests we had and overriding flags in
<code>substitute-keyword-arguments</code> we had, but not together), but after some attempts
we were able to create a working package definition we were happy with.</p><pre><code class="language-scheme">(define-public binutils-gold
(package
(inherit binutils)
(name "binutils-gold")
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'patch-source-shebangs 'patch-more-shebangs
(lambda _
(substitute* "gold/Makefile.in"
(("/bin/sh") (which "sh")))
#t)))
,@(substitute-keyword-arguments (package-arguments binutils)
; Upstream is aware of unrelocatable test failures on arm*.
((#:tests? _ #f)
(if (any (cute string-prefix? <> (or (%current-target-system)
(%current-system)))
'("i686" "x86_64"))
'#t '#f))
((#:configure-flags flags)
`(cons* "--enable-gold=default"
(delete "LDFLAGS=-static-libgcc" ,flags))))))
(native-inputs
`(("bc" ,bc)))
(inputs
`(("gcc:lib" ,gcc "lib")))))</code></pre><p>This patch was pushed to the master branch as
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=28317d499034b00cf1f08a9efd39bd2bc3425b19">28317d499034b00cf1f08a9efd39bd2bc3425b19</a>,
and the
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=1009e6e7ecc00b72a51778e90b0212ccc33bfa7a">commit</a>
following uses it as a native-input for Go@1.9 and Go@1.11. Go@1.4 was added in
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=7a2941a83ee8ecac9ca7a3a076b1231805b39bbd">June
2016</a>
and Go@1.6 that
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=ec91bcb500a2540b91fca6fd2a93a0562c427712">August</a>,
with our first go packages being added in <a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=56a37713c3fada3010666278eb37873980746572">October
2017</a>.
That same
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=dda785f66081871501236722f68c8eaa31103186">October</a>
Go@1.4 had support limited to Intel and armhf and in October 2018, in an effort
to work toward a resolution, a
<a href="https://git.savannah.gnu.org/cgit/guix.git/commit/?id=2ab321ca37d1c00c1540d78d587226d3d487b2d4">patch</a>
was added to have aarch64 use Go@1.4 built for armhf for it's bootstrap path.
Basically since the addition of the Go language support into Guix there was not
a time when it was usable on armhf or aarch64. Hopefully we will soon finish
getting full Go support on aarch64 and we can move all 352 dependents of Go@1.4
from "failing" to "succeeding" and have these architectures better supported.</p><h4>About GNU Guix</h4><p><a href="https://www.gnu.org/software/guix">GNU Guix</a> is a transactional package
manager and an advanced distribution of the GNU system that <a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html">respects
user
freedom</a>.
Guix can be used on top of any system running the kernel Linux, or it
can be used as a standalone operating system distribution for i686,
x86_64, ARMv7, and AArch64 machines.</p><p>In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection. When used as a standalone
GNU/Linux distribution, Guix offers a declarative, stateless approach to
operating system configuration management. Guix is highly customizable
and hackable through <a href="https://www.gnu.org/software/guile">Guile</a>
programming interfaces and extensions to the
<a href="http://schemers.org">Scheme</a> language.</p>