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

Discuss possibility of adjusting LTS schedule for better alignment with V8 schedule #62

Closed
jasnell opened this issue Dec 11, 2015 · 12 comments

Comments

@jasnell
Copy link
Member

jasnell commented Dec 11, 2015

@nodejs/lts ... At Node.js Interactive, @ofrobots asked if we could explore the possibility of adjusting the LTS runway to achieve better alignment with the V8 stable schedule. For instance, V8 4.9 will be going into feature freeze after this next week, because Node v6 will be cut in April, v4.9 would be the version of V8 that we ship in v6 and ultimately in the next LTS when v6 rolls over next October. Therefore, any semver-major or breaking changes in V8 would have to land by December 18th, 2015 in order to make it into v6 LTS. However, if we shifted our stable release cycle by two months to ship v6 in June, the V8 team would have more time to get in the additional major fixes they would like to get landed before the next LTS rollover in October. Doing so would mean (a) adjusting our stable release cycle and (b) shortening our LTS runway from six months to four months. Obviously this is something that we would need to consider very carefully.

/cc @nodejs/ctc

@indutny
Copy link
Member

indutny commented Dec 11, 2015

I'm fine with this.

@mhdawson
Copy link
Member

What would be helpful is a sense of the importance/value of what additional functionality we'd get. This would help to explain the benefit of what we are getting versus the tradeoff of a delayed V6 and a shorter runway to LTS rollover.

@ofrobots
Copy link

Let me explain the motivation:

I want the release schedules for Node.js LTS and V8 to be better aligned. I want the V8 release to be a bit more current. If you work backwards from the LTS release schedule to the version of V8 to be picked by the stable in April, that would happen to be V8 4.9 as it goes stable in March (approximately). Feature freezes happen even earlier, and would be around the December-ish timeframe. This is a bit too out of date, and I don't think there is a good reason for it.

Concrete benefits of realigning the schedule would be:

  1. More language support. 6-LTS will live for a very long time, and having more language features baked in benefits the community. More language features also make it attractive to enterprises considering migration. It was by chance we were able to get V8 4.5 into 4-LTS (Argon). I think everyone agrees that getting a more recent V8 version there was good thing ("arrow functions").
  2. V8 team is continually working on performance. Again, the GC improvements we got in V8 4.5 were good for the Node eco-system.
  3. Right now we are disincentivizing Node.js-focussed performance work in V8. Anything that misses V8 4.9 (i.e. this month) will not land in LTS until Node.js 8-LTS in October 2017 (!!), and it will take a few months after that for a good subset of the Node.js ecosystem to be running on that version.

I do get the need for the runway between stable and LTS. I don't think the specifics make sense, especially now that we have experience of the first LTS behind us. We had a much shorter runway for the Argon LTS, and it ended up working really well. I am not sure where the 6-months number came from, and I don't think it still makes sense. The runway needs to be long enough to let the module ecosystem catch up, but no longer. A 4-month, or even a 3-month, runway would make a lot more sense, and give us a more current version of V8 in the LTS.

@rvagg
Copy link
Member

rvagg commented Dec 14, 2015

How are we getting 2 months? By my calculations, the Chrome team have been hitting a 7 week (exact) average when taken over the last 4 releases which would put a V8 5.0 at the 26th of April. I think we've maintained in the past that we would be a little flexible around release times, like we were for v5, if it helps us line up with V8 better, if we were still able to hit April then that's probably acceptable (Ubuntu always does late in the month for their releases even though they are tagged with that month). We'd probably need a cut-off though so we're not waiting for a V8 that may end up being delayed.

If we're talking pushing back beyond April then the reasoning seems very arbitrary to me. What happens during the next LTS cycle? Do we shorten to 3 months because it fits better with V8?

Sorry to be a thorn @ofrobots, I know you're not a fan of the long runways we have for this now but:

  1. More language support. 6-LTS will live for a very long time, and having more language features baked in benefits the community....

This is an arbitrary measure that you could make about any V8 version. You could use this argument to suggest we shouldn't cut v6 until October next year or even that we ship an LTS every 6 months. We have to find a compromise point somewhere and be able to stick to it.

  1. V8 team is continually working on performance. Again, the GC improvements we got in V8 4.5 were good for the Node eco-system...

Equally arbitrary that you can make about any V8 version (almost any version), this is still an argument for "the later the better".

  1. Right now we are disincentivizing Node.js-focussed performance work in V8...

This sucks the most, but there's really not much we can do about it while the V8 team continues to ignore the importance of a stable C++ API (and ABI), this is at the core of the compromises we have to make with V8 and I really wish we could do something about this but our hands are tied right now and delaying v6 isn't going to have a material impact on this because it's actually the discrepancy between our 6-month cycle and V8's 6-week cycle that's the problem.

My hope is that we can work to one or more of the following scenarios:

  1. A V8 with a stable API and ABI (our of our hands)
  2. A stable ABI layer that meets the needs of most native addons in the Node.js ecosystem (very far from the easy task that many people seem to think given the way that so many addons reach into weird places in the V8 API to get things done).
  3. Bindings to an alternative VM with better focus on stable ABI, perhaps ChakraCore could be that eventually?
  4. Maintaining our own fork of V8 that suits our needs but may also be able to pull improvements from upstream. This might not be as hard as it sounds if all we care about is stability within a 6-month window and we can jump forward to upstream parity after each of our stable releases. If we could pull this off then we could be shipping new V8s in minor version bumps.

Again, I am genuinely sorry to be a negative voice on this but there's nothing here that negates any of our original reasoning for choosing the time-frames that we did for the LTS schedule. It's so critical that we get LTS right and ensure it's stable, solid and and well tested. LTS is for users with very long-term perspectives and we need to be equally long-term in the way we plan for it.

@ofrobots: if V8 feature support is critical for Google Cloud, have you considered switching to Stable releases instead?

@ofrobots
Copy link

This is an arbitrary measure that you could make about any V8 version. You could use this argument to suggest we shouldn't cut v6 until October next year or even that we ship an LTS every 6 months.

That is not what I am arguing at all. I agree completely that we have to find a compromise. I am just questioning where the 6-month number came from and whether it makes sense. A shorter runway would be better for the Node ecosystem.

You cannot argue that a 6-month runway is essential. If that was truly the case, Node.js 4 LTS would not have been as successful as it has been, with a much shorter runway.

What happens during the next LTS cycle?

We figure out what the right runway length is and stick to it for each cycle. We have the experience from the Argon LTS behind us. Let's use it to figure out the cadence going forward.

This sucks the most, but there's really not much we can do about it while the V8 team continues to ignore the importance of a stable C++ API (and ABI)

The length of the runway has more to do how frequently a LTS release comes out and less to do with whether LTS has V8 4.9 or V8 5.1. We are asking the Node.js module ecosystem to react to the API changes once a year (if they want to keep up to date with LTS only) or twice (if they want stable and LTS). Whether they are adapting to V8 4.9 or V8 5.1 isn't as relevant.

It's so critical that we get LTS right and ensure it's stable, solid and and well tested

I agree completely. Let's get LTS right.

@rvagg
Copy link
Member

rvagg commented Dec 14, 2015

OpenSSL 1.1.0 release timing may be relevant to this discussion nodejs/node#4270

@mikeal
Copy link
Contributor

mikeal commented Dec 14, 2015

There seems to be an implied cycle beyond the standard 6ish week cycle that we don't entirely have visibility into. Some kind of planning and stabilization of larger changes in the code that spans beyond the release cycles we see that would be good to line up with. However, I've never seen anything, publicly, that would give us visibility in to what this is and how to plan around it or track it.

@rvagg
Copy link
Member

rvagg commented Dec 23, 2015

Unfortunately I've let this slip a week and my memory of the CTC meeting discussion isn't as clear. I haven't published the audio yet and the minutes are cut short because Chris had to hop off the call and he was the only one taking notes.

I believe the general agreement was that we would not be making any changes to the LTS / Release Schedule in this next iteration but we are open to stretching up into the first week of May if need be to take in V8 5.0. Does anyone want to add anything else to this from their recollection of the discussion?

@jasnell
Copy link
Member Author

jasnell commented Dec 23, 2015

Sounds correct to me.
On Dec 23, 2015 4:44 AM, "Rod Vagg" notifications@github.com wrote:

Unfortunately I've let this slip a week and my memory of the CTC meeting
discussion isn't as clear. I haven't published the audio yet and the
minutes are cut short because Chris had to hop off the call and he was the
only one taking notes.

I believe the general agreement was that we would not be making any
changes to the LTS / Release Schedule in this next iteration but we are
open to stretching up into the first week of May if need be to take in V8
5.0. Does anyone want to add anything else to this from their recollection
of the discussion?


Reply to this email directly or view it on GitHub
#62 (comment).

@orangemocha
Copy link

The only point that I would like to add is that it would be good to have a bit more predictability on whether Node v6 will ship with v8 v5 or not. NAN will need to be updated and other parts of the ecosystem might be affected by that decision. Right now what I gather is that there is no clear commitment from v8 to hit a specific date for hitting stable. Making that decision at the end of April is not ideal IMO. Can v8 give us an ETA for hitting stable, by an earlier date?

@mhdawson
Copy link
Member

mhdawson commented Jan 4, 2016

Also what I understood as well.

@jasnell
Copy link
Member Author

jasnell commented Jan 4, 2016

Closing per WG decision

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

7 participants