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

Express LTS strategy #199

Merged
merged 10 commits into from
Feb 29, 2024
Merged

Conversation

kibertoad
Copy link
Contributor

refs #196

Copy link
Member

@wesleytodd wesleytodd left a comment

Choose a reason for hiding this comment

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

This is AWESOME. Thanks for getting this started. I made some comments to seed conversation, and I think we might want to expand a bit more on some of them, but generally I think this is an awesome start.

docs/LTS-strategy.md Show resolved Hide resolved
## Non-Goals

* Only support the active LTS releases of Node.js
* Support the widest possible set of Node.js versions. We aim to maintain a healthy balance between backwards compatibility and toolchain modernization.
Copy link
Member

Choose a reason for hiding this comment

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

Love this section, especially this line! 🎉

Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not actually sure this makes sense - a healthy balance imo is the same thing as "widest possible set". If a node version prevents using modern toolchains, for example, then that's not a version that'd be included in that set.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@ljharb I'll think about possible wording improvements here, but the intent is to emphasize that we only want to support a set of versions that do not contradict the rest of the goals defined. This is very important to make explicit in the context of Express specifically, as it has a long-standing tradition of preserving the compatibility to the detriment of everything else.

Copy link
Member

Choose a reason for hiding this comment

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

+1 this is a great way to explain it

Copy link
Contributor

Choose a reason for hiding this comment

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

I don’t think any of the detriments you refer to have anything to do with refusing to drop compat for node, but with other things - but i look forward to an alternative phrasing.

Copy link
Member

Choose a reason for hiding this comment

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

a healthy balance imo is the same thing as "widest possible set"

As other said, I disagree with the wording but maybe your meaning hinges on the definition we use for "possible"?

Like if we said "we want to ship diagnostic channels so it is not possible to support versions before them" (I am trying to make a hypnotically based on a reality from the past pillarjs/router#96) does that fit your definition? We would drop the old node versions which dont support it in the next major so we could ship support without a lot of compatibility code.

Copy link
Contributor

Choose a reason for hiding this comment

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

Yes, of course it fits my definition. If we need a feature that requires dropping a version, then that version is no longer possible to support.

I also especially like the implied path of "ship support with compat code, and then drop the compat code and the node versions that need it in the next major" - that's a very user-friendly way to do a major bump.

docs/LTS-strategy.md Outdated Show resolved Hide resolved
* Minimize disruption for end users
* Be mindful of the fact that some users are still running obsolete versions of Node in production

### Guidelines for dropping support of Node.js versions
Copy link
Member

Choose a reason for hiding this comment

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

I think this is the section I want us to discuss more deeply. Ideally we also put together a calendar view like Node does to see in comparison to Node majors how express majors would line up.

Copy link
Member

Choose a reason for hiding this comment

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

Yeah! Having a calendar is one of the best ways to explain the rules for the end users, but currently is very solid 🙂

Copy link
Member

Choose a reason for hiding this comment

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

I think we should make a diagram like node has, maybe even overlay our support over the existing node support schedules?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

sure, but let's address this in a separate PR

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@wesleytodd @UlisesGascon I think @ljharb strongly objected to having a timed deprecation without a practical justification. We need to have this established unambiguously within the strategy. Do we or not do time schedule-based Node version deprecation?

Copy link
Contributor

Choose a reason for hiding this comment

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

Either way, but it seems easy enough to do it before merging ¯\_(ツ)_/¯

Copy link
Member

Choose a reason for hiding this comment

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

@kibertoad if you get to it, awesome. If not, lets try and merge this before EOD so we can start those other PRs to clarify and expand.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

addressed. unless there are major outstanding objections to some of the wording, I would suggest merging it as-is and iterate in follow-up PRs.

@wesleytodd Can I get push permissions for the repo?

Copy link
Member

Choose a reason for hiding this comment

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

I agree and will merge now. I will also really quickly setup a committer team for this repo and add you.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

thanks!

docs/LTS-strategy.md Outdated Show resolved Hide resolved
docs/LTS-strategy.md Show resolved Hide resolved
docs/LTS-strategy.md Outdated Show resolved Hide resolved
docs/LTS-strategy.md Outdated Show resolved Hide resolved
Copy link
Contributor

@ljharb ljharb left a comment

Choose a reason for hiding this comment

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

Thanks for writing this up!

## Non-Goals

* Only support the active LTS releases of Node.js
* Support the widest possible set of Node.js versions. We aim to maintain a healthy balance between backwards compatibility and toolchain modernization.
Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not actually sure this makes sense - a healthy balance imo is the same thing as "widest possible set". If a node version prevents using modern toolchains, for example, then that's not a version that'd be included in that set.


### Guidelines for dropping support of Node.js versions

* In order to smoothen the experience of users updating to a new semver major Express version, Express should always support at least one even numbered Node.js version above the current lowest supported one before the drop can be considered. For example, if the lowest supported version is 20, Express support for Node 20 cannot be dropped until Express supports at least Node 22. This ensures that Express updates can be done independently from the Node.js version update.
Copy link
Contributor

Choose a reason for hiding this comment

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

this is great, thanks for capturing it

docs/LTS-strategy.md Outdated Show resolved Hide resolved
docs/LTS-strategy.md Outdated Show resolved Hide resolved
docs/LTS-strategy.md Outdated Show resolved Hide resolved
kibertoad and others added 5 commits February 27, 2024 08:16
Co-authored-by: Wes Todd <wes@wesleytodd.com>
Co-authored-by: Wes Todd <wes@wesleytodd.com>
Co-authored-by: Wes Todd <wes@wesleytodd.com>
Co-authored-by: Jordan Harband <ljharb@gmail.com>
Co-authored-by: Wes Todd <wes@wesleytodd.com>
Copy link
Member

@UlisesGascon UlisesGascon left a comment

Choose a reason for hiding this comment

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

Fantastic proposal @kibertoad! Thanks for doing this.

IMO this is great and I feel confident with the current state (previous discussed comments aside). I assume that might do more tweaks in the future (but not a blocker for this PR), specially when we will include the release schedule (calendar) as we will need to fit this ideas more intro a concrete schematics 👍

* Minimize disruption for end users
* Be mindful of the fact that some users are still running obsolete versions of Node in production

### Guidelines for dropping support of Node.js versions
Copy link
Member

Choose a reason for hiding this comment

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

Yeah! Having a calendar is one of the best ways to explain the rules for the end users, but currently is very solid 🙂

## Non-Goals

* Only support the active LTS releases of Node.js
* Support the widest possible set of Node.js versions. We aim to maintain a healthy balance between backwards compatibility and toolchain modernization.
Copy link
Member

Choose a reason for hiding this comment

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

+1 this is a great way to explain it

docs/LTS-strategy.md Show resolved Hide resolved
@wesleytodd
Copy link
Member

Here is an example we can also reference. https://github.com/debug-js/debug/releases?page=2

Debug, a direct dep, dropped node versions which blocked us updating.

docs/LTS-strategy.md Outdated Show resolved Hide resolved
Co-authored-by: Jordan Harband <ljharb@gmail.com>
@kibertoad kibertoad marked this pull request as ready for review February 28, 2024 00:42
@kibertoad kibertoad requested a review from wesleytodd February 28, 2024 00:42
Copy link
Contributor

@ljharb ljharb left a comment

Choose a reason for hiding this comment

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

LGTM! thanks for iterating

@kibertoad
Copy link
Contributor Author

OK, I think this might be ready to be merged as a first version, but of course we should keep iterating over it.

Should we open the discussion of what toolchain to use as a next step? This would help inform the decision of which particular versions to support in the first upcoming semver major release

* Minimize disruption for end users
* Be mindful of the fact that some users are still running obsolete versions of Node in production

### Guidelines for dropping support of Node.js versions
Copy link
Member

Choose a reason for hiding this comment

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

Can we merge without a consensus on this? I am leaning yes? And then we can open targeted PRs to update these and discuss after?

@wesleytodd wesleytodd merged commit 664d949 into expressjs:master Feb 29, 2024
@kibertoad kibertoad deleted the feat/lts-strategy branch February 29, 2024 00:15
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.

4 participants