Hi Ian,

On 11 May, Ian Eure wrote:
> Hi Steve,
> 
> Steve George <st...@futurile.net> writes:
> 
> > 3. Rolling updates aren't suitable for all users.
> 
> If a Guix release is a point in time snapshot of a rolling release, and the
> first `guix pull' after
> installation puts you back into the rolling release model, I don’t think
> more frequent releases address this need.
(...)

Yes, so this GCD doesn't resolve any issues with the rolling release not being 
suitable for all users (problem 3). An earlier version did, but following input 
from the sponsors I cut the GCD down to focus it and make it easeir to 
implement - one change at a time! That's why it refers to the idea that in 
future we could implement slower moving branches, or something else - something 
along those lines would resolve that issue - but it's out of scope for this GCD.

This GCD focuses on problem (1) and (2) only.

Rereading it this morning, it's not clear, so I will alter the paragraph to 
make it clear. Thanks!


> > Adding a slower-moving branch akin to Nix's stable could be an eventual
> > goal as
> > it would increase Guix's suitability for some users and use-cases [^2].
> > However,
> > this GCD only sets out to implement regular releases which is a
> > substantial
> > change that would be a big improvement for our users.
> 
> 
> > A specific issue caused by irregular releases is that new users/installs
> > face a
> > significant first "guix pull". This provides a poor initial user
> > experience,
> > and in some cases may even deter users [^4]. Additionally, it requires
> > the
> > project to keep old substitutes on our servers.
> 
> It also causes user confusion becasue the assumption is that the release is
> what they should be using.  We get a good number of folks in #guix reading
> the 1.4.0 manual, which doesn’t accurately reflect the current state of
> things.
> 

Agreed.


> > This GCD proposes an annual release cycle, with releases **in May**.
> > 
> > To move onto this cycle the first release would be a little later:
> > aiming for
> > the **November of 2025**, with a short cycle to release in May 2026.
> 
> I think it’d be better to align the initial release with the schedule we
> want to keep, so if we plan for a November release, plan to release every
> November.
> 

An annual spring release would be better due to alignment in the ecosystem 
around stabilisation: it's beneficial to get the additional stabilisiation that 
the commercial distro's do and RHEL/LTS's always do a spring release [0]. I 
outlined this a bit more elsewhere in the thread, but can go into more detail.

I personally would like us to do a release before $SPRING 2026. Doing releases 
more often, should help us get better at them, automate them (see comments from 
Ekaitz/Reza), so hopefully doing a November and then a $SPRING would be 
achievable.

I would give shifting to a $SPRING time-frame, priority over doing the November 
one if it was an absolute choice, as I think that time of year is optimal. 


> > ## 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
> 
> I’m not sure what the difference is between the installer and system ISO
> image is, could you elaborate please?
> 

AIUI we have two install paths (product?), one is installing 'Guix System' as a 
Linux distribution, the other is installing 'Guix' (package manager) on a 
foreign distribution. For a release we update both. So 'GNU Guix installer' was 
refering to the Guix as a package manager, and the other two were 'Guix System'.
> > Again in an effort to reduce developer toil, additional release
> > artifacts could
> > be created but would not be part of the formal release testing and
> > errors would
> > not block a release.
> 
> The 1.4.0 release artifacts are[1]:
> 
> - Installer image for i686 and x86_64.
> - QCow image for x86_64.
> - Binary for i686, x86_64, armhf, aarch64, and powerpc64e.
> - Source tarball.
> 
> Are the binaries and source tarballs "additional release artifacts?"
> 

Yes, good catch. I'll add 'GNU Guix Source tarball', I believe that the 
existing 'GNU GUIX installer' covers the binary point.

This section is covering the minimum created artifacts, which would be the 
focus of developer work and testing. Nothing stops additional artifacts being 
created - for example the latest downloads page 
(https://guix.gnu.org/en/download/latest/) has a Pinebook Pro image.

(...)
> > ### 4. Toolchain and transition freeze
> > No major changes to toolchains (e.g. gcc-toolchain, rust-1.xx) or
> > runtimes
> > (e.g. java).  There should be no changes that will cause major
> > transitions.
> > 
> > Debian defines a transition as one where a change in one package causes
> > changes
> > in another, the most common being a library.  This isn't suitable for
> > Guix since
> > any change in an input causes a change in another package. Nonetheless,
> > any
> > change that alters a significant number of packages should be carefully
> > considered and updates that cause other packages to break should be
> > rejected.
> > 
> > No alterations to the Guix daemon or modules are accepted after this
> > point.
> > Packages and services in the 'minimal' package set should not be
> > altered.
> 
> I think it’s worth considering doing this the other way around: instead of
> freezing master, cut a release branch and cherry-pick fixes into it as
> needed.  I don’t expect that development on non-release features will stop
> during the freeze, which means we’ll have a large backlog of work to merge
> once the freeze ends; this is a thing Guix has historically not been good at
> working through in a timely manner.
> 
> A release branch would also support longer-term stable releases, if we
> wanted to do that.
> 
> The downside is that it’s more work to cherry-pick fixes between branches,
> and there’s the potential for merge conflicts.
(...)

In the context of doing a release I think we _could_ cut the release branch 
earlier in the project. Rutherther also brought this up. It's definitely a 
trade-off. I selected to stay on the master branch for as long as possible 
because (a) the group has had difficulty with long-running branches, (b) the 
social signal of doing a release, for a few weeks we all focus on it. I agree 
we may block up with items to go to master, though given our current velocity a 
5 week freeze doesn't seem that big to me.

I think that Efraim has an idea that would also try to reduce the freeze time - 
which I think is along the lines of what you're outlining Ian - Efraim do you 
want to chime in here?

I agree a release branch would also support some form of longer-term stable 
branch. I don't think doing it that way is a necessary precursor for this GCD, 
but I do take the point! For now I would keep the idea of maintaining two 
branches outside the scope of this GCD.


> > ### 7. Updates freeze
> > Major package updates are frozen on 'master' as the focus is on fixing
> > any
> > blocking packages.  Security updates still go to 'master'.
> 
> This could prove troublesome, as the current Guix approach is to update
> packages to the version containing the fix.  Are you thinking that we’d
> maintain that, or adopt a Debian style of backporting fixes where possible?
(...)

We'd maintain our current approach as we are ultimately a rolling release.

My point here was to hold us for a couple of weeks only pushing 'security' 
issues to the branch, so that the whole of the team can focus on testing the 
release and fixing release-critical bugs on the 'release' branch. For devs that 
don't want to focus on the release they can continue to push to their 
team-branches and/or the "staging" (z572 thinks this sould be called something 
else).

> > ### 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.
> 
> This is going to be difficult to manage, especially for contributions from
> those new to Guix development.

We already have this problem in the sense that new contributors send 
contributions against master, and a lot of work is actually against 
team-branches. For example, people send package updates for rust/python and we 
already have them in rust-team/python-team branches. I agree it's difficult to 
manage as it will be a "new thing".

> Thank you for starting the discussion!
(...)

It sounds like you're broadly in favour, but the main improvement would be 
flipping the branches around.

Thanks for the input!

Steve / Futurile


[0] Ubuntu/Canonical LTS's are always the April release. RedHat is a bit less 
clear to me, but RHEL 9 was in May, and they've announced that RHEL 10 is 
mid-2025 so I _think_ they are also on a spring release cycle 
 - 
https://www.redhat.com/en/blog/red-hat-enterprise-linux-10-beta-now-available - 
mentions "to release a new major edition every three years .... RHEL 10, due to 
reach general availability in mid-2025"
 - https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux - RH9 May 2022, RH8 
May 2019


Reply via email to