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

Clarifying supported Node.js versions #466

Merged
merged 3 commits into from
Sep 16, 2020
Merged

Clarifying supported Node.js versions #466

merged 3 commits into from
Sep 16, 2020

Conversation

vmx
Copy link
Member

@vmx vmx commented Jun 4, 2020

I found "most recent LTS" a bit vague. With this change you can go to
https://nodejs.org/en/about/releases/ and clearly see which versions
are supported.

I hope that reflects what the original sentence tried to say. That would
mean that as of today, we support v12 and v14. We won't support v10.

I found "most recent LTS" a bit vague. With this change you can go to
https://nodejs.org/en/about/releases/ and clearly see which versions
are supported.
@achingbrain
Copy link
Member

My feeling on this is that we should support as many node versions as is practical. To me that means all LTS versions (including node 10 at the time of writing).

We are in a fortunate position in that we are pushing the boundaries of technology so don't really think twice about reaching for the latest and greatest tech but our users are not always so fortunate.

If we want to see the widest possible levels of adoption we need to support as many runtimes as we can.

@vmx
Copy link
Member Author

vmx commented Jun 4, 2020

If we want to see the widest possible levels of adoption we need to support as many runtimes as we can.

I agree with that, but I also think we should be able to move forward quickly. Things like the async/await refactor shouldn't be blocked by old LTS versions. The biggest change at this point in time is probably being able to use ESM modules in Node.js. I think starting such a transition early on is (at this point) more valuable than not supporting Node.js v10. Do we know if we've many people on old Node.js versions?

@hugomrdias
Copy link
Member

I do not agree we should support "Current", it's either just latest Active or latest Active and Maintenance IMO.

@achingbrain
Copy link
Member

There are some download metrics available at https://nodejs.org/metrics/ - there's some churn in the data quality over the last six months (see nodejs/nodejs.org#3244) but this chart is of of the last couple of months worth of data:

image

I'm not sure how reliable this data is, but it shows node 10 is still the most popular version with 12 slowly narrowing the gap.

@jacobheun
Copy link

The old thread this was previously decided in is at #350, which decided on Latest Active only.

This PR seems to be about adding/clarifying support to also add Current. I agree with @hugomrdias, we should not support current as it's a moving target.

My feeling on this is that we should support as many node versions as is practical. To me that means all LTS versions (including node 10 at the time of writing).

I agree with this, but this is a separate conversation IMO. I believe we should support all Active versions, maintenance versions are reasonable to not support atm, but we may wish to do that in the future.

@achingbrain
Copy link
Member

Aha, I think I misread it then.

This PR was opened because I changed the ipfs-http-client readme to say we support the Current and Active LTS versions, which is a mistake. - what I meant to say was Maintenance and Active LTS versions, since the stats show they are the most widely used.

We should not be trying to support the Current version.

@vmx
Copy link
Member Author

vmx commented Jun 10, 2020

There seems to be agreement on not supporting Current versions (I've updated the PR). Though I think we should enable Current on CI as in the current schedule there is no overlap "Active" overlap between v12 and v14.

So the open question is whether to support Maintenance or not (or whether we drop v10 now, but support v12 even if v14 is released).

@hugomrdias
Copy link
Member

Maintenance and Active LTS

@jacobheun
Copy link

Maintenance and Active LTS

I am fine with this. From October this year to May of next year this will mean we are supporting 2 Maintenance releases.

Do we want to support all Maintenance releases, or limit to 1 Maintenance release? Keep in mind 3 releases will also have significant impact on CI times. We can also punt this restriction to October and see where version usage is then.

@mikeal
Copy link
Contributor

mikeal commented Jun 10, 2020

I worked on this LTS process for Node.js, and the intention was for projects like js-ipfs to support LTS and Current and cut support for maintenance releases sometime before Node.js ends maintenance.

It isn’t actually good for the JS ecosystem for libraries to match the support schedule of Node.js Core. Once a release line falls out of maintenance, it’s an active security liability. In some cases this isn’t even the decision of Node.js, previous maintenance schedules have been cut short because OpenSSL ended support of the version Node.js was bound to.

The ecosystem needs to lead people away from these release lines before Node.js cuts support for them.

It’s easy to not recognize this, but “maintenance” really means “no longer supported.” The only thing that gets back ported to those release lines are security fixes. Said another way, these release lines will soon no longer even receive critical security fixes. “Maintenance” is the bare minimum Node.js can do in good conscience, it’s a big red blinking sign that says “you need to upgrade because pretty soon this will be insecure.”

IMO, js-ipfs should support/test against LTS and Current only. If it happens to work with prior releases, cool, but that shouldn’t be guaranteed or tested.

Not really considered in this equation is what range of releases you support within a particular release line. Just because something like ESM lands in 12.x you may have good reason to hold off on using that feature since prior 12.x releases will break, but you also don’t want that time window to be indefinite because there needs to be some incentive to take new Node.js minor releases since they often contain critical fixes 🤷‍♂️

@mikeal
Copy link
Contributor

mikeal commented Jun 10, 2020

I do not agree we should support "Current", it's either just latest Active or latest Active and Maintenance IMO.

This is a dangerous practice.

“Supporting” CURRENT is not the same thing as “depending on” CURRENT.

The CURRENT line tends to be quite stable and it’s rare that code that works in LTS would break in CURRENT. If it does break then it’s either because there is an upcoming breaking change you’re effected by, which you want to be aware of long before it becomes the LTS version of Node.js, or because there’s a bug in CURRENT that you’re finding which could very well be getting adopted and even make it into LTS if you don’t log it.

Getting something changed in Node.js after it has already made its way into LTS is significantly more difficult than getting it fixed in CURRENT. If you break on CURRENT and don’t discover this until it’s in LTS that also means you’re broken on the early LTS releases which are widely adopted.

@achingbrain
Copy link
Member

the intention was for projects like js-ipfs to support LTS and Current and cut support for maintenance releases sometime before Node.js ends maintenance

I think this is a fair point and on balance maybe we should do Active LTS and Current after all.

We could try it and set another milestone to review?

Not really considered in this equation is what range of releases you support within a particular release line

I think it's reasonable to ask users to upgrade minor/patch versions of node. Major versions less so.

@vmx
Copy link
Member Author

vmx commented Jun 17, 2020

the intention was for projects like js-ipfs to support LTS and Current and cut support for maintenance releases sometime before Node.js ends maintenance.

When I look at the current Node.js Release Schedule, I see that maintenance releases overlap (and it looks like it's also the case in the future. Perhaps an idea would be to support maintenance released until a new maintenance release comes out.

So the supported versions would be Current, latest Active LTS (it seems that there will only be one at a time in the future anyways) and latest Maintenance.

Practically this would mean that for now we do support v10 until v12 becomes maintenance (October 2020), so we would drop v10 support while still being in maintenance (as @mikeal suggested). Moving forward we would then drop v12 support in October 2021.

@hugomrdias
Copy link
Member

hugomrdias commented Jun 17, 2020

@mikeal thank you for your explaining all this. After reading through your thoughts i can get behind supporting Current.

@jacobheun
Copy link

IMO, js-ipfs should support/test against LTS and Current only. If it happens to work with prior releases, cool, but that shouldn’t be guaranteed or tested.

I think we should just go with this, as @mikeal recommended. This would also enable us to just configure CI to test the aliases and avoid the mass CI config updates we've needed to do in the past.

To be explicit, we would not support any maintenance release. This would currently mean v12 and v14 only. In October this becomes v14 and v15 only.

@vmx
Copy link
Member Author

vmx commented Sep 4, 2020

I've reverted the last commit and came back to my original proposal, which seems to have broad agreement. Reading this issue it sounds like @achingbrain @hugomrdias @jacobheun @mikeal and I agree on the current version of this PR.

Copy link

@jacobheun jacobheun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This LGTM

@vmx
Copy link
Member Author

vmx commented Sep 16, 2020

Yay, we reached agreement. May someone please merge this one?

@achingbrain achingbrain merged commit eeeaaaf into ipfs:master Sep 16, 2020
@vmx vmx deleted the patch-1 branch September 16, 2020 13:34
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

Successfully merging this pull request may close these issues.

5 participants