website: Add draft post about the Guile guix-daemon.

* website/drafts/guile-guix-daemon-introduction.md: New file.
This commit is contained in:
Christopher Baines 2023-10-13 19:50:50 +01:00
parent 9c5b07cde7
commit 16b3181109
No known key found for this signature in database
GPG Key ID: 5E28A33B0B84F577
1 changed files with 94 additions and 0 deletions

View File

@ -0,0 +1,94 @@
title: Building a Guile guix-daemon
author: Christopher Baines
tags:
date: 2023-10-13 14:30:00
---
When using Guix, you might be aware of the
[daemon](https://guix.gnu.org/en/manual/en/html_node/Setting-Up-the-Daemon.html).
It runs in the background but it's a key component in Guix. Whenever
you've been using Guix to operate on the store, whether that's
building something or downloading some substitutes, it's the daemon
managing that operation.
The daemon also is a key part of the history of Guix. The Guix
project started mixing Guile with ideas from the Nix project, and the
guix-daemon is a fork of the nix-dameon with some tweaks made over the
years. Rather than being implemented in Guile though, the daemon is
implemented in C++. Given the focus on Guile in Guix, this is
unusual, and I believe it's made working on the daemon less desirable,
especially since rewriting it in Guile has been discussed for many
years now.
# What would a Guile guix-dameon mean?
Guix already has code written in Guile for doing some of what the
daemon does internally, so being able to use this Guile code inside
and outside the daemon would simplify Guix and allow removing the C++
code.
There isn't Guile code yet for everything the daemon does though, so
getting to this point will make new exciting features easier to
implement. That could be things like making it easier to use Guix in
environments where running the dameon in the usual way is inconvinient
or infeasible. It may also help with portability, so help with
running Guix on the Hurd and new architectures.
As someone who's more experienced writing Guile than C++, I'm also
hoping it'll generally make hacking on the dameon more accessible.
This in turn might lead to new features. For example, I think having
a Guile guix-daemon will simplify implementing a way to jump in to a
build and inspect the environment.
With some [monetary support from NLNet](https://nlnet.nl/project/GuixDaemon-Guile/),
I'm planning to focus for the next year on getting a Guile
implementation of the guix-daemon written and adopted.
# A technical plan
Building on the [recent discussion](https://lists.gnu.org/archive/html/guix-devel/2023-09/msg00328.html)
of this topic on the guix-devel mailing list, here's some technical
thoughts on how I'm approaching this.
While I think there's a substantial amount of work to do, progress
towards a Guile guix-daemon has already been made. Given that things
in Guix have probably changed since this work has happened, I plan to
carefully review that existing work (most of which can be found on the
`guile-daemon` branch) so that I can build upon it.
The priority for the Guile daemon is backwards compatability, so the
plan is to allow switching between the C++ implementation and Guile
implementation which any issues. This'll require not making changes
to the database schema, and generally doing things in a way which the
current C++ daemon will understand.
Like the build coordinator, I'm planning to make the daemon a single
process using Guile Fibers for parallelism. This is in contrast to
the forking model using by the C++ daemon. Even though it's not a
priority to address feature issues with the current dameon, this
approach might help to reduce database contention issues experienced
with the current daemon, and allow for less locking, like not having
the big GC lock for example.
# Progress reports
I'm planning on publishing more blog posts as the project progress, so
keep an eye on the Guix blog for future updates.
#### About GNU Guix
[GNU Guix](https://guix.gnu.org) is a transactional package manager
and an advanced distribution of the GNU system that [respects user
freedom](https://www.gnu.org/distros/free-system-distribution-guidelines.html).
Guix can be used on top of any system running the Hurd or the Linux
kernel, or it can be used as a standalone operating system
distribution for i686, x86_64, ARMv7, AArch64 and POWER9 machines.
In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package
management, per-user profiles, and garbage collection. When used as a
standalone GNU/Linux distribution, Guix offers a declarative,
stateless approach to operating system configuration management. Guix
is highly customizable and hackable through
[Guile](https://www.gnu.org/software/guile) programming interfaces and
extensions to the [Scheme](http://schemers.org) language.