mirror of
https://github.com/NixOS/rfcs.git
synced 2025-11-08 19:46:12 +01:00
[RFC 0106] Nix release schedule (#106)
* Nix release schedule * Fix link * Update rfcs/0106-nix-release-schedule.md Co-authored-by: Théophane Hufschmitt <regnat@users.noreply.github.com> * Add shepherds * Update to reflect latest meeting Co-authored-by: Théophane Hufschmitt <regnat@users.noreply.github.com>
This commit is contained in:
parent
5fa45c912a
commit
b5181c9246
1 changed files with 84 additions and 0 deletions
84
rfcs/0106-nix-release-schedule.md
Normal file
84
rfcs/0106-nix-release-schedule.md
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
---
|
||||||
|
feature: Nix release schedule
|
||||||
|
start-date: 2021-09-23
|
||||||
|
author: Eelco Dolstra
|
||||||
|
co-authors: (find a buddy later to help out with the RFC)
|
||||||
|
shepherd-team: @Ericson2314, @regnat, @Ma27, @tomberek
|
||||||
|
shepherd-leader: @tomberek
|
||||||
|
related-issues: N/A
|
||||||
|
---
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
[summary]: #summary
|
||||||
|
|
||||||
|
Do a new Nix release every 6 weeks.
|
||||||
|
|
||||||
|
# Motivation
|
||||||
|
[motivation]: #motivation
|
||||||
|
|
||||||
|
The last major Nix release, 2.3, came out in September 2019. Since
|
||||||
|
then, there has been a huge amount of work on the Nix master branch,
|
||||||
|
including major improvements to the new command line interface and new
|
||||||
|
experimental features such as flakes, the content-addressable Nix
|
||||||
|
store, and recursive Nix. This forces many users to use unstable Nix
|
||||||
|
releases, which is undesirable.
|
||||||
|
|
||||||
|
In the future, we should avoid having such long gaps between releases,
|
||||||
|
since it’s bad for both contributors and users that there is an
|
||||||
|
unbounded amount of time before a new feature shows up in a stable
|
||||||
|
release. The thing that has historically caused long gaps between Nix
|
||||||
|
releases is new experimental features landing in master that we
|
||||||
|
weren’t quite sure about, and doing a new release meant having to
|
||||||
|
support these features indefinitely. However, Nix 2.4 introduces an
|
||||||
|
experimental-features setting that enables us to add such features in
|
||||||
|
a way that they can be changed or removed, while still getting
|
||||||
|
feedback from adventurous users. So long as experimental features
|
||||||
|
don’t cause breakage in stable features, it’s fine to merge them into
|
||||||
|
master and include them in a new release.
|
||||||
|
|
||||||
|
# Detailed design
|
||||||
|
[design]: #detailed-design
|
||||||
|
|
||||||
|
* We do a new Nix release (named 2.5.0, 2.6.0, 3.0.0, ...) every 6
|
||||||
|
weeks. The release process is already almost entirely automated so
|
||||||
|
this is pretty easy.
|
||||||
|
|
||||||
|
* For each major release, we create a maintenance branch (named
|
||||||
|
e.g. `2.5-maintenance`) and corresponding Hydra jobset. Patch
|
||||||
|
releases (e.g. 2.5.1) are made as needed.
|
||||||
|
|
||||||
|
* The master branch should be kept in a releasable state at all
|
||||||
|
times. This means that the jobset
|
||||||
|
https://hydra.nixos.org/jobset/nix/master should be completely
|
||||||
|
green.
|
||||||
|
|
||||||
|
* PRs should include release notes, if applicable. (Currently trawling
|
||||||
|
through the history to dig up interesting stuff for the release
|
||||||
|
notes is the most work in making a new release.) The PR template
|
||||||
|
will be updated to reflect this.
|
||||||
|
|
||||||
|
# Drawbacks
|
||||||
|
[drawbacks]: #drawbacks
|
||||||
|
|
||||||
|
Infrequent releases give somewhat more stability to users. Users of Nix-stable
|
||||||
|
have been blissfully isolated from all the code churn on master for
|
||||||
|
the last two years.
|
||||||
|
|
||||||
|
# Alternatives
|
||||||
|
[alternatives]: #alternatives
|
||||||
|
|
||||||
|
Stick to the current release-when-it's-ready non-schedule.
|
||||||
|
|
||||||
|
# Previous work
|
||||||
|
|
||||||
|
[RFC 0009](https://github.com/NixOS/rfcs/pull/9) proposed a rapid
|
||||||
|
release policy where releases can be done at any time (e.g. on
|
||||||
|
request) rather than on a fixed schedule. It wasn't feasible at the
|
||||||
|
time because we didn't have a notion of experimental features, so we
|
||||||
|
had to give such features some time to stabilize before doing a new
|
||||||
|
release.
|
||||||
|
|
||||||
|
# Future work
|
||||||
|
[future]: #future-work
|
||||||
|
|
||||||
|
N/A
|
||||||
Loading…
Add table
Add a link
Reference in a new issue