Subject: Re: GCD005: Regular and efficient releases

From: Simon Tournier <[email-masked]>
Date: Thu, 12 Jun 2025 21:08:54 +0200

Hi Steve,

Thanks for this proposal!

Well, I’ve not commented yet because I’m very doubtful that releasing
more often can be solved with a GCD.  I mean, yeah we all would like
more releases, and then?  :-)  Look, on February, we were all in the
same room and we all agreed that we had to work on releasing soon and
we cooked a plan to make it happen.  But the release has not come yet…

Do not take me wrong.  I do not want to be the pessimistic one cutting
the positive circle trying to move forward.  As I wrote many times over
the years, yeah for sure, releasing more often would be more than great!

Somehow, I think that “regular and efficient release“ is a good target
but considering the current situation, I’m doubtful we will be able to
go in only one go – just by deciding from the top and writing down a
planning.

Instead, I think we need two intermediary steps:

 (1) Clarify what means being a member of a team.
 (2) Clarify the branching model; especially how to deal with grafts.

To me, they are requirements before being able to have regular releases.

Therefore, I read this GCD as setting the goal in order to address the
well known blockers as (1+2) and, only after, we will be able to have
regular releases without burning out.

Moreover, I think it’s difficult to find the right balance between
volunteering work and commitments.  Today, make a release is a piece of
work.  For sure, it’s possible to smooth the things and automatize with
various helpers etc. but if it’s not done yet, maybe it’s because it’s
not trivial or maybe even more work than the ‘piece of work’ itself. :-)

Yes, I’m convinced that committing to have “regular releases” will
improve all the releasing process over the next releases.  For sure!
And it’s probably by making such commitment that the releasing process
will be improved.  But we are not there yet, IMHO, so it’s still a piece
of work and it’ll still remain one for some release cycles.

Therefore, the core of this proposal appears to me what is the bar?

Until now, the bar was high.  Maybe, one way to release more often is to
decrease the bar so it’s easier to pass it and then we can rise it up,
by incremental improvements.  This is the section about Package Sets,
Tiers and Release Artifacts.

To me, that’s the key.

And concretely, who is ready to commit for 12 weeks (maybe 2 times) as
Release Manager?

All that said, some comments hoping it might improve the bootstrap of
“regular releases”. :-)

> ## Package Sets

[...]

> 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.
>
> Guix would still make all packages and services part of a release (the entire
> archive), but only those in the `package sets` could block a release due to a
> significant bug.  The goal would be for this to be as small a set of packages
> as reasonably possible.  It would mean that developers could focus on the
> critical packages and services during a release.  As an example, this would
> mean that a major issue in the Linux kernel could block a release, but not an
> issue in a game.

I understand the meaning however it’s unclear to me.  Instead, I propose
that the Release Team defines when they start their cycle which packages
the release will support.

Somehow, each package set should be defined by a manifest file.  Here
you picked 5 use-cases, so the Release Team lists the packages in the
manifests minimal.scm, standard.scm, desktop.scm, server.scm and
hosted.scm.  These manifests are considered as blockers.

If one package from one manifest fails and it’s hard to fix, then it can
be excluded; i.e., moved from Tier to another Tier.

It also would help in monitoring the CI outside the release period.

> ## Platforms and Architecture tiers

[...]

> - Primary architectures:
>   - Architectures: x86_64, AArch64
>   - Kernel: Linux
>   - Coverage: all packages and services that are not explicitly platform
>     specific must work to be included in the archive.
>   - Package status: package updates should build for this architecture.  If a
>     package update is broken it must not be pushed to users (e.g. master).
>   - Security: all packages that are maintained upstream receive updates

This does not read as the rolling release, does it? :-)

I propose:

        - Tier 1:
          - Architectures: x86_64, AArch64
          - Kernel: Linux
          - Coverage: defined by package sets.

        - Tier 2:
          - Architectures: all others
          - Kernel: Linux
          - Coverage: defined by package sets.

        - Tier 3:
          - Architectures: all
          - Kernel: Linux, Hurd
          - Coverage: all packages

For a release, Tier 1 must be all green; Tier 2 should be green; Tier 3
as good as possible.

Obviously, we can add more Tier than only 3.  The main idea here is to
define what is Tier (= list of architectures, kernel, package coverage)
and what expects when this Tier in a release.

Well, maybe we could add a “service coverage”.

> ## Release team and project

[...]

> The final release team is:
>
> - a new Release Manager
> - a returning Release Manager
> - up to 4 other members, one of whom acts as the Release Advocate

Hum, 2 times 12 weeks of commitment?  That’s something! :-)

For sure, back up the Release Manager with 2 people is a very good idea;
especially about knowledge transfer.  Cool!

If the primary Release Manager is not able to keep the commitment (busy
by life, away from keyboard, unexpected event, etc.), then the secondary
Release Manager takes the floor.  Right?  But then, this “absent”
primary Release Manager, does they become the next secondary Release
Manager?

Moreover, what does it happen if the both Release Manager are not
responding?  Do we delay the time to find two new Release Managers?  Or
is it two of the other members?

The other question: what does it happen if the Release Team is not able
to fix a blocker?  Do we delay until the fix?  Do we drop the blocker?
Who decides?  What is the process for making such decision?

> # Cost of Reverting
>
> If regular releases were not successful then the project would switch back to
> irregular releases.  There would be no impact for exiting users as they will
> be tracking the rolling release's master branch.
>
> If the project is able to successfully undertake regular releases then over
> time it may be possible to undertake full releases every six months or some
> other release cadence.

Well, I do not have the answer and my honest question is: Is it more
detrimental to have irregular^W no release since years! than to
communicate on regular releases and fail?

> # Appendix 1: Release Project Time-line

[...]

> ### 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.

Who nominates?  How?

Who decides if 7 people volunteer to be the next release team?  Hum, it
will not happen, but still. :-)

The converse, what does it happen if no one volunteer?  IIUC, the
primary Release Manager becomes the next secondary Release Manager, so
what does it happen if there is no one who volunteers to be the next
primary volunteer?

What does it happen if after the release, the primary Release Manager
steps down and do not become the next secondary Release Manager?

> ### 9. Ungraft master branch
> Guix master is ungrafted to minimise the difference with users of the release
> initial 'guix pull' experience.

This will take more than one week, I guess. :-)  For sure, more than few
hours in the week.

I think this needs to be done by each team all over the changes
independently of the release process.  As said above, I think we should
clarify what a team does.  For instance, if a team introduces a graft,
then this very same team must open a branch that ungrafts and then merge
this branch as soon as possible; independently of the release.

Somehow, we removed core-updates but we have never defined a clear
strategy for ungrafting.  Well, that’s outside the scope of this GCD
but, IMHO, the success of this GCD depends on how to deal with grafts.

All in all, let me know if you need a wording proposal from me about
some of my comments.

Cheers,
simon