-
-
Notifications
You must be signed in to change notification settings - Fork 162
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC 0106] Nix release schedule #106
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
--- | ||
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: (names, to be nominated and accepted by RFC steering committee) | ||
shepherd-leader: (name to be appointed by RFC steering committee) | ||
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 every 6 weeks. The release process is | ||
already almost entirely automated so this is pretty easy. | ||
|
||
* The master branch should be kept in a releasable state at all times. | ||
|
||
* 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.) | ||
|
||
# Drawbacks | ||
[drawbacks]: #drawbacks | ||
|
||
Infrequent releases give more stability to users. Users of Nix-stable | ||
edolstra marked this conversation as resolved.
Show resolved
Hide resolved
|
||
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. | ||
|
||
# Unresolved questions | ||
[unresolved]: #unresolved-questions | ||
|
||
* Should we still do maintenance releases (like 2.3.x)? Should there | ||
be a long-term stability release (like 2.3 is now, de facto)? | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't see the point of this. Ideally, the only backward-compatible changes that happen in Nix are in the interface, not the language and building mechanisms. Because of this, supporting a new Nix release in a project will likely never require large changes. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Dunno for the long-term releases, but I think we’ll have to do maintenance releases anyways, if only because we might have to do some bug fixes on the latest release before the end of the 6w cycle |
||
Probably we should at least provide bug fixes for whatever Nix | ||
release is used by the latest NixOS release. | ||
|
||
* Is 6 weeks the ideal interval between releases? It seems to work | ||
edolstra marked this conversation as resolved.
Show resolved
Hide resolved
|
||
well for Rust. | ||
|
||
* Should we keep using the current versioning scheme? For now we can | ||
stick with the current scheme (i.e. only bumping the major version | ||
if there are incompatible changes or major non-experimental new | ||
features), but in the future we could switch to date-based versions | ||
(e.g. Nix 21.07). | ||
|
||
# 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While this is true, a lot of smaller changes don't get an experimental feature, e.g. NixOS/nix#4922. Perhaps there should be a generic experimental feature for enabling unstable minor changes such as this, so that we don't have to add an experimental feature for each?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don’t think having a arbitrary (reasonable) number of experimental features is too much of an issue. People shouldn’t be expected to just blindly buy into them, and having each feature guarded by an experimental flag gives more flexibility to rework/abandon them.
(Anyways, I think the usage of experimental features should be refined/standardized, but that’s out of scope for this RFC)