Subject: Re: GCD005: Regular and efficient releases (submitted)

From: Steve George <[email-masked]>
Date: Wed, 11 Jun 2025 13:26:42 +0100

Hi Ludo,

Thanks for the feedback and insights.

On Mon, Jun 09, 2025 at 03:34:26PM +0200, Ludovic Courtès wrote:
> Hi Steve,
> 
> Thanks for the hard work on this crucial aspect of the project.
> 
> Some wondered about the indented audience of releases.  To me it’s quite
> clear that it’s manifold: there’s public relation, yes, but also
> downstream packagers as mentioned, and perhaps more importantly, any new
> person installing Guix, be it standalone or on another distro.  Starting
> today from 1.4.0 makes for a terribly bad user experience.
> 
> Some more specific comments:
> 
> > The package sets would be:
> > 
> > * minimal: packages required to boot and install a minimal Guix or Guix System
> > install.  This would include the guix daemon, kernels, boot loaders,
> > file-systems and minimal utilities.
> > * standard: packages that create a core installation for all other uses.
> > * desktop: provides the packages necessary for a desktop.  This would include
> > things like X11/Wayland, desktop environments, key applications and themes.
> > * server: provides packages and services for a server.  This would include
> > standard server packages and services.
> > * hosted: provides packages and services which are necessary in hosted usage.
> 
> Perhaps I overlooked it, but it’s not clear to me how package sets
> affect the release process.
> 
> I would expect things like “package set X must successfully build on all
> Primary Architectures at time of release”, “package set Y is provided on
> a best-effort basis”, or things along these lines.

Maybe it's a bit too diffuse in what is a long document, it says:

"Packages within the `package sets` must build on the primary architectures (see definition lower).  As part of the release's QA contributors would be asked to these these packages."

Practically:

1. Package sets build on the primary architecture. All other packages are "best effort". 
2. Testing and manual QA is only on package sets on the primary architecture.
3. Release artefacts are only made from packages within the packages sets and on the primary architectures. 

> For previous releases, there were really two package sets of sorts,
> although that wasn’t formally specified:
> 
>   • Packages that the Guix System installer would offer had two build on
>     the two architectures for which images were provided (i686-linux and
>     x86_64-linux).  That includes core packages but also things like
>     Xfce, GNOME, Tor, ntpd, and other things that can be selected from
>     the dialog boxes of the installer.
> 
>     This is ‘%system-packages’ in ‘etc/manifests/release.scm’.
> 
>   • “Core” packages that anyone may wish to install on any of the
>     architectures supported by Guix (not Guix System).
> 
>     This was ‘%base-packages’ in
>     <https://codeberg.org/guix/guix/src/commit/12d00767f036029f1f5738de644d4972db374f4f/etc/manifests/release.scm>
>     (not sure why it’s not there anymore).
> 
> The former had to be build on x86_64-linux and i686-linux; the latter
> had to build on all architectures listed in ‘SUPPORTED_SYSTEMS’ in
> ‘Makefile.am’, and also listed in the manual:
> 
>   https://guix.gnu.org/manual/devel/en/html_node/GNU-Distribution.html
> 
> I would tend to formalize on these two package sets and associated
> requirements.
(...)

Thanks for the context, that really helps. I believe the version Efraim's been working on is here:

https://codeberg.org/guix/guix/src/commit/15e19a2d9206da8d1fe26f93573a41f16998462c/etc/manifests/release.scm

The main goal is to focus attention during testing, particularly as there's always some level of manual testing by a Release Team. Efraim's version still has the %system-packages, and what I would propose is to tighen it up further:

- %system_packages (what I called minimal): requirements for the installer including a default graphical desktop.
- %desktop_packages (what I called desktop): additional graphical desktops, other options like NTP and Tor. 

The Release Team would focus testing on the things on the installer's critical path. In Efraim's version there's actually three sets - %bootloader_packages, %filesystem_packages and %system_packages. Anyway, these all MUST work because they align with the installers defaults. Failures in these packages are release critical bugs.

Practically this means testing the end-to-end install process of Guix System with these defaults on (a) primary architectures (x86 and AArch64), also through KVM (QCow2 image), and tested on the major foreign distribution's (e.g. Debian, Fedora, Ubuntu).

Non-default packages that are in the installer (but not a default option) go into (a new) %desktop_packages. These get the next layer of testing, these SHOULD work as we shouldn't ship something we know is broken, but it's less critical. We're assuming that each Team is shipping things that work, and it's 'reasonable efforts' for the Release Team to try and check that the installer works for them.

This focuses attention by reducing the scope that the release team "must" test.

I also proposed a "minimal" group which would be "packages required to boot and install a minimal Guix or Guix System". Is it the same idea as %base_packages? I'm wondering if we should separate "Guix installed as a packge manager" into it's own package set. In the long run this would be a building lock that allow us to align with Philip's suggestion of following a more Nix-packages / Nix OS separation of releases. What do you think?

> > ## Release artifacts
> > 
> > Using the primary architecture tier and the package sets would involve creating
> > the following release artifacts:
> > 
> > - GNU Guix System ISO image
> > - GNU Guix System QCOW2 image
> > - GNU Guix installer
> 
> This omits two important things:
> 
>   • The binary tarball, used to install on top of another distro, for
>     all “supported architectures” (Primary and Alternative).
(...)

OK, I can add them to the GCD.

Just to clarify terms, I'm looking at the download page (https://guix.gnu.org/en/download/)

What you're calling the "binary tarball" is that on the download page as the third option labeled "GNU Guix 1.4.0 Binary"?  I thought that was what I was calling the "GNU Guix installer".

>   • The source tarball, as produced by ‘make dist’ (target audience is
>     primarily downstream packagers, such as Debian).
> 

On the download page this is defined as "GNU Guix 1.4.0 Source". I will add this.

We don't have anything about the downstream Debian/Fedora packages. Philip McGrath mentioned this as an important path and I agree. Since we don't create the packages I'm not sure what to do here. Ideally, we'd work with the packagers to co-ordinate with them, but as a project we don't actually create them.

> Reducing toil will be a matter of defining “supported architectures” in
> a reasonable way.
> 
> > ## Release team and project
> 
> I really like this section!
> 
> > ### 1. Nominate a release team
> > Nominate a release team with two Release Managers (1 is the previous RM), and
> > up to 4 other people who will work on the release. Put out a call for a Release
> > Advocate who can be anyone in the Guix community who's willing.
> 
> This raises the question of who will nominate the team.  But perhaps
> that’s a problem mostly for the first release (Nov. 2025) since after
> that passing on the torch will be easier?

At Guix Days (2025) there was a big discussion about releasing. Efraim nominated himself as the first "Release Manager".

I'm sure that there are others in the group would also be interested, there was a good discussion in December. I'm sure that Andreas and I would be excited to work on it!

And, I'm assuming _you_ are mentoring us all ;-))

> > ### 3. Release project start
> > Start the project with weekly updates to guix-dev and regular meetings of the
> 
> s/guix-dev/`guix-devel`/
> 

Thanks

> > ### 8. Breaking changes to staging
> > To avoid a period of time where teams can't commit breaking changes, these are
> > sent to a new 'staging' branch, rather than directly to master.  The master
> > branch slows down from this week.
> 
> In the past, what we did was to create a ‘version-1.4.0’ (or similar)
> branch one or two weeks before release and would let ‘master’ live its
> life, avoiding both total freeze and unintentional breakage while we’re
> close to release (only people working on the release would commit to
> that version branch).
> 
> The version branch would be prioritized by ci.guix.gnu.org too.
> 
> It’s very similar to what you wrote here but by keeping the default
> unchanged for developers not part of the Release Team, it may prove to
> work better.
> 
> > ### 12. Testing and Hard Freeze
> > RC bugs and issues should be solved for the release branch.
> >
> > Only changes that will fix a non-building package, or a bug in a package are
> > allowed.  Ideally avoid new upstream versions, but it's acceptable to use a new
> > minor upstream version to solve a bug.
> > 
> > Any non-building packages are removed.
> 
> According to the deprecation policy, this can be done anytime but takes
> at least one month.
(...)

Understood. I have it now that in week 3 we identify things to be removed and notify everyone. In week 10 they are removed, so there's been a good long period of notification.

> Overall I like what the GCD lays out.  Perhaps there will be adjustments
> to be made here and there but it looks sensible to me.
> 
> I expect that a big chunk of the work before the November release will
> be streamlining the process, in particular ensuring that a developer can
> make a release without having too many privileges or a
> multi-architecture build farm at home.
(...)

Agreed, the real work is not the actual GCD heh heh =-)

Steve / Futurile