Skip to content
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

Release Cycle Proposal #168

Closed
wraithan opened this issue Dec 15, 2014 · 8 comments
Closed

Release Cycle Proposal #168

wraithan opened this issue Dec 15, 2014 · 8 comments

Comments

@wraithan
Copy link

Context

Whenever the topic of release comes up, there will always be people on both sides. One side is looking for stability, other side looking to get features and bug fixes as fast as possible. Both sides have a part in common, that is predictability of release. Since we can all agree that predictability is important, we'll move forward assuming that a release schedule is a good idea.

Release Promotion

The next part to decide is how a release gets promoted to be a full generally available release. This part has contention, but what I'd like to propose is the same system as Chrome, Firefox, and now Rust. The style is called a train system. Every release cycle worth of time, the current beta is promoted to release, the current alpha is promoted to beta, and the current nightly is promoted to alpha.

This system allows users to run their tests against nightly, see when something breaks and know how long they have to fix it before a release happens. Not only that, they can canary and report problems upstream before the release is promoted further. Sometimes the discovery of where the bug/problem lies takes a while. Having the train means they can test against alpha while digging in, get things fixed, and have the beta be a theoretically 100% stable release preview. Obviously sometimes fixes also go into beta, but that should be a rare release blocking problem.

The only type of changes that would be accepted into the alpha and beta releases are fixes for regressions. This prevents other types of fixes from skipping the cycle and causing instability.

I can see stripping this down to just nightly, next, and release. Instead of the full nightly/alpha/beta/release. But having some sort of train system will be important for many of us who implement libraries.

Cycle Duration

We are in a state of frustration right now because Node 0.12 is not out and has taken longer than many of us would have liked. I bring this up as the currenly weekly release feels like an overaction in the opposite direction to me. My proposal would be 6 weeks, just like the above mentioned projects (Chrome, Firefox, Rust). This will be the contention point between the stability camp and the release all the time camp.

This gives plenty of time for people who have APIs tightly coupled with core APIs to react to any changes coming down the pipe. It does mean 12-18 weeks before a feature or bugfix makes it into a GA release, but it gives us time to work out any kinks that may have happened with the feature/fix. I'd be hesitant to allow this duration get lower than 4 weeks between nightly and release. This is to give library authors a definite chance to keep up without feeling like they are on a high paced treadmill.

Side effect of this is the ability of node to stagger its releases with Chrome. By releasing a week or two after Chrome, we get the ability to absorb new versions of v8 as they come, as well as getting fixes upstreamed before they make it into a full Chrome release. I consider this a win-win benefit.

Caveats

In both Chrome and Firefox, security fixes and fixes for sufficently bad bugs can skip ahead on the train. This is something that would likely need TC approval to happen. No one is advocating for leaving insecure versions of node in the wild on purpose.

Outside of scope for this (IE open other proposals)

The intent of this proposal is to set our pace and how nightly will be turned into a full release. Anything pertaining to the following should be considered outside of scope:

  • How we determine what to merge into nightly
  • When to merge into nightly (regarding things that may bump different chunks of the version number)
  • Feature flags or other opt in functionality
  • Deprecation process
  • Long term support verisons

CC: @bnoordhuis

@crueber
Copy link

crueber commented Dec 15, 2014

While I don't have much of a dog in this race, I much prefer a longer cadence. More lead time for the library developers generally means a higher degree of stability for what is generally available. So 👍 to a 6 week release cadence, rather than weekly.

@algesten
Copy link

The "train" is how I assumed things were going to run anyway. Given the TC member's track record on backwards compatibility, I say release small, release often. Try 1 week and see how it goes.

@mikeal
Copy link
Contributor

mikeal commented Dec 16, 2014

Just a quick note about a difference between browsers and us: as of a few years ago, most browser vendors don't ship bugfix releases for older versions. I suspect that we will. Also, browsers have an auto-updater that forces nearly all their users to upgrade, we don't have that.

We also have some natural "buckets," those being semver major, minor, and patch. What I suspect will need to happen is patch releases for every minor for 3-6 months and patch releases for every major for at least a few years. That needs to be factored in, we don't get to replace the version of Node for the majority of our users overnight the way the browser vendors do. But, this is all just speculation.

I think that all of this is very premature. We need nightly builds before we can talk about this kind of cadence, and we need to see a real release before we start talking about all these patch releases.

We need to start getting something out every week so that we can evaluate how it's going and improve the process from there. While I appreciate the sentiment behind threads like this they are based on a lot of assumptions that may or may not be true and we won't know if they hold until we see some traction.

Let's just get stuff out and iterate and stop planning prematurely.

@wraithan
Copy link
Author

@mikeal You are definitely correct in that we can't force an upgrade, which means how, why, and when major/minor version updates happen is a big concern. But I think that is different from this proposal.

The mentioned natural buckets make good final GA targets. If we end up with multiple GA targets, a train system like this would be meant to deal with the fastest updated bucket.

The primary concern of this proposal is the minimum time before, and in what stages, things move from being merged to being included in a full generally available release. Whether nightly is actually nightly or is a weekly build or anything else at the start of the train is not really a concern of this proposal.

Regarding it being too early to discuss this, @bnoordhuis asked me to write up a proposal after a discussion on IRC. I'm not the only one with concerns in this area. I want to make sure those concerns are addressed before weekly GA releases start happening implicitly, codifying what could be painful for us in the community.

@rvagg
Copy link
Member

rvagg commented Dec 17, 2014

Good discussion about this in the TC meeting today, I'd recommend seeing the video as the minutes are unlikely to contain all of the nuance of what went down. The agreement (as expected I think) was that this is still too premature but that everybody agrees that io.js releases need stability, predictability, decent lead-time but also need to be more frequent.

See #178 for TC minutes and link to video.

@snostorm
Copy link

I really like how Mozilla has been documenting their release cycles. As per https://developer.mozilla.org/en-US/Firefox/Releases clicking on an upcoming version (like v36) provides a description of when it will be production released, the "stage" that version is in (beta/alpha/etc.), and a detailed list of the upcoming changes/additions, including those which might be behind a feature flag (or are finally being promoted from a flag, in some cases.)

As io.js works to deprecate some old APIs, introduce new V8 features, ES6 language additions and generally improve the core functionality, it would be great to have a similar structure of documentation to refer to. It also helps people to know what they can help test against, especially with regard to bleeding edge API.

Edit: added the second paragraph

@fbender
Copy link

fbender commented Dec 20, 2014

A good compromise between the Train model and long-term stability is additional ESR releases (just like Mozilla does for Gecko/Firefox): Every X releases, this release is maintained for X+1 or X+2 releases (providing security and serious-bug fixes). For the 6 week Train model and X=7, this will amount to ~ 1 year support of one ESR version with 1-2 (ESR release) version overlap (more if you consider pre-release channels).

@Fishrock123
Copy link
Contributor

Discuss in #630

minervapanda pushed a commit to minervapanda/node that referenced this issue Oct 9, 2016
…feature including web, phone, map and email
minervapanda pushed a commit to minervapanda/node that referenced this issue Oct 9, 2016
minervapanda pushed a commit to minervapanda/node that referenced this issue Oct 9, 2016
…feature including web, phone, map and email
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants