Skip to content

Add LTS to SPEC 0 #389

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

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions spec-0000/SPEC0_versions.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,13 @@ def get_release_dates(package, support_time=plus24):
return releases


def shift_drop_dates(p):
versions = list(p.keys())
for i in range(len(versions) - 1):
p[versions[i]]["drop_date"] = p[versions[i + 1]]["drop_date"]
return p


package_releases = {
"python": {
version: {
Expand All @@ -111,6 +118,11 @@ def get_release_dates(package, support_time=plus24):
for package, releases in package_releases.items()
}

# FIXME: This should appear before the above line, but it is temporarily here.
package_releases = {
package: shift_drop_dates(releases)
for package, releases in package_releases.items()
}

# Save Gantt chart

Expand Down
205 changes: 104 additions & 101 deletions spec-0000/chart.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,133 +4,136 @@ axisFormat %m / %Y
title Support Window

section python
3.10 : 2021-10-04,2024-10-03
3.11 : 2022-10-24,2025-10-23
3.12 : 2023-10-02,2026-10-01
3.10 : 2021-10-04,2025-10-23
3.11 : 2022-10-24,2026-10-01
3.12 : 2023-10-02,2027-10-07
3.13 : 2024-10-07,2027-10-07

section numpy
1.24.0 : 2022-12-18,2024-12-17
1.25.0 : 2023-06-17,2025-06-16
1.26.0 : 2023-09-16,2025-09-15
2.0.0 : 2024-06-16,2026-06-16
2.1.0 : 2024-08-18,2026-08-18
1.24.0 : 2022-12-18,2025-06-16
1.25.0 : 2023-06-17,2025-09-15
1.26.0 : 2023-09-16,2026-06-16
2.0.0 : 2024-06-16,2026-08-18
2.1.0 : 2024-08-18,2026-12-08
2.2.0 : 2024-12-08,2026-12-08

section scipy
1.9.0 : 2022-07-29,2024-07-28
1.10.0 : 2023-01-03,2025-01-02
1.11.0 : 2023-06-25,2025-06-24
1.12.0 : 2024-01-20,2026-01-19
1.13.0 : 2024-04-02,2026-04-02
1.14.0 : 2024-06-24,2026-06-24
1.9.0 : 2022-07-29,2025-01-02
1.10.0 : 2023-01-03,2025-06-24
1.11.0 : 2023-06-25,2026-01-19
1.12.0 : 2024-01-20,2026-04-02
1.13.0 : 2024-04-02,2026-06-24
1.14.0 : 2024-06-24,2027-01-03
1.15.0 : 2025-01-03,2027-01-03

section matplotlib
3.6.0 : 2022-09-16,2024-09-15
3.7.0 : 2023-02-13,2025-02-12
3.8.0 : 2023-09-15,2025-09-14
3.9.0 : 2024-05-15,2026-05-15
3.6.0 : 2022-09-16,2025-02-12
3.7.0 : 2023-02-13,2025-09-14
3.8.0 : 2023-09-15,2026-05-15
3.9.0 : 2024-05-15,2026-12-14
3.10.0 : 2024-12-14,2026-12-14

section pandas
1.5.0 : 2022-09-19,2024-09-18
2.0.0 : 2023-04-03,2025-04-02
2.1.0 : 2023-08-30,2025-08-29
1.5.0 : 2022-09-19,2025-04-02
2.0.0 : 2023-04-03,2025-08-29
2.1.0 : 2023-08-30,2026-01-19
2.2.0 : 2024-01-20,2026-01-19

section scikit-image
0.20.0 : 2023-02-28,2025-02-27
0.21.0 : 2023-06-02,2025-06-01
0.22.0 : 2023-10-03,2025-10-02
0.23.0 : 2024-04-10,2026-04-10
0.24.0 : 2024-06-18,2026-06-18
0.20.0 : 2023-02-28,2025-06-01
0.21.0 : 2023-06-02,2025-10-02
0.22.0 : 2023-10-03,2026-04-10
0.23.0 : 2024-04-10,2026-06-18
0.24.0 : 2024-06-18,2026-12-13
0.25.0 : 2024-12-13,2026-12-13

section networkx
3.0 : 2023-01-08,2025-01-07
3.1 : 2023-04-04,2025-04-03
3.2 : 2023-10-19,2025-10-18
3.3 : 2024-04-06,2026-04-06
3.0 : 2023-01-08,2025-04-03
3.1 : 2023-04-04,2025-10-18
3.2 : 2023-10-19,2026-04-06
3.3 : 2024-04-06,2026-10-10
3.4 : 2024-10-10,2026-10-10

section scikit-learn
1.2.0 : 2022-12-08,2024-12-07
1.3.0 : 2023-06-30,2025-06-29
1.4.0 : 2024-01-18,2026-01-17
1.5.0 : 2024-05-21,2026-05-21
1.2.0 : 2022-12-08,2025-06-29
1.3.0 : 2023-06-30,2026-01-17
1.4.0 : 2024-01-18,2026-05-21
1.5.0 : 2024-05-21,2026-12-09
1.6.0 : 2024-12-09,2026-12-09

section xarray
2022.6.0 : 2022-07-22,2024-07-21
2022.9.0 : 2022-09-29,2024-09-28
2022.10.0 : 2022-10-13,2024-10-12
2022.11.0 : 2022-11-04,2024-11-03
2022.12.0 : 2022-12-02,2024-12-01
2023.1.0 : 2023-01-18,2025-01-17
2023.2.0 : 2023-02-07,2025-02-06
2023.3.0 : 2023-03-22,2025-03-21
2023.4.0 : 2023-04-14,2025-04-13
2023.5.0 : 2023-05-19,2025-05-18
2023.6.0 : 2023-06-23,2025-06-22
2023.7.0 : 2023-07-17,2025-07-16
2023.8.0 : 2023-08-20,2025-08-19
2023.9.0 : 2023-09-26,2025-09-25
2023.10.0 : 2023-10-19,2025-10-18
2023.11.0 : 2023-11-17,2025-11-16
2023.12.0 : 2023-12-08,2025-12-07
2024.1.0 : 2024-01-17,2026-01-16
2024.2.0 : 2024-02-19,2026-02-18
2024.3.0 : 2024-03-29,2026-03-29
2024.5.0 : 2024-05-13,2026-05-13
2024.6.0 : 2024-06-13,2026-06-13
2024.7.0 : 2024-07-30,2026-07-30
2024.9.0 : 2024-09-11,2026-09-11
2024.10.0 : 2024-10-24,2026-10-24
2024.11.0 : 2024-11-22,2026-11-22
2025.1.0 : 2025-01-03,2027-01-03
2025.3.0 : 2025-03-20,2027-03-20
2022.6.0 : 2022-07-22,2024-09-28
2022.9.0 : 2022-09-29,2024-10-12
2022.10.0 : 2022-10-13,2024-11-03
2022.11.0 : 2022-11-04,2024-12-01
2022.12.0 : 2022-12-02,2025-01-17
2023.1.0 : 2023-01-18,2025-02-06
2023.2.0 : 2023-02-07,2025-03-21
2023.3.0 : 2023-03-22,2025-04-13
2023.4.0 : 2023-04-14,2025-05-18
2023.5.0 : 2023-05-19,2025-06-22
2023.6.0 : 2023-06-23,2025-07-16
2023.7.0 : 2023-07-17,2025-08-19
2023.8.0 : 2023-08-20,2025-09-25
2023.9.0 : 2023-09-26,2025-10-18
2023.10.0 : 2023-10-19,2025-11-16
2023.11.0 : 2023-11-17,2025-12-07
2023.12.0 : 2023-12-08,2026-01-16
2024.1.0 : 2024-01-17,2026-02-18
2024.2.0 : 2024-02-19,2026-03-29
2024.3.0 : 2024-03-29,2026-05-13
2024.5.0 : 2024-05-13,2026-06-13
2024.6.0 : 2024-06-13,2026-07-30
2024.7.0 : 2024-07-30,2026-09-11
2024.9.0 : 2024-09-11,2026-10-24
2024.10.0 : 2024-10-24,2026-11-22
2024.11.0 : 2024-11-22,2027-01-03
2025.1.0 : 2025-01-03,2027-03-20
2025.3.0 : 2025-03-20,2027-04-29
2025.4.0 : 2025-04-29,2027-04-29

section ipython
8.5.0 : 2022-09-06,2024-09-05
8.6.0 : 2022-10-30,2024-10-29
8.7.0 : 2022-11-28,2024-11-27
8.8.0 : 2023-01-03,2025-01-02
8.9.0 : 2023-01-27,2025-01-26
8.10.0 : 2023-02-10,2025-02-09
8.11.0 : 2023-02-28,2025-02-27
8.12.0 : 2023-03-30,2025-03-29
8.13.0 : 2023-04-28,2025-04-27
8.14.0 : 2023-06-02,2025-06-01
8.15.0 : 2023-09-01,2025-08-31
8.16.0 : 2023-09-29,2025-09-28
8.17.0 : 2023-10-30,2025-10-29
8.18.0 : 2023-11-24,2025-11-23
8.19.0 : 2023-12-22,2025-12-21
8.20.0 : 2024-01-08,2026-01-07
8.21.0 : 2024-01-31,2026-01-30
8.22.0 : 2024-02-22,2026-02-21
8.23.0 : 2024-03-31,2026-03-31
8.24.0 : 2024-04-26,2026-04-26
8.25.0 : 2024-05-31,2026-05-31
8.26.0 : 2024-06-28,2026-06-28
8.27.0 : 2024-08-30,2026-08-30
8.28.0 : 2024-10-02,2026-10-02
8.29.0 : 2024-10-25,2026-10-25
8.30.0 : 2024-11-29,2026-11-29
8.31.0 : 2024-12-20,2026-12-20
8.32.0 : 2025-01-31,2027-01-31
8.33.0 : 2025-02-28,2027-02-28
8.34.0 : 2025-03-08,2027-03-08
8.35.0 : 2025-04-07,2027-04-07
9.0.0 : 2025-02-28,2027-02-28
9.1.0 : 2025-04-07,2027-04-07
8.5.0 : 2022-09-06,2024-10-29
8.6.0 : 2022-10-30,2024-11-27
8.7.0 : 2022-11-28,2025-01-02
8.8.0 : 2023-01-03,2025-01-26
8.9.0 : 2023-01-27,2025-02-09
8.10.0 : 2023-02-10,2025-02-27
8.11.0 : 2023-02-28,2025-03-29
8.12.0 : 2023-03-30,2025-04-27
8.13.0 : 2023-04-28,2025-06-01
8.14.0 : 2023-06-02,2025-08-31
8.15.0 : 2023-09-01,2025-09-28
8.16.0 : 2023-09-29,2025-10-29
8.17.0 : 2023-10-30,2025-11-23
8.18.0 : 2023-11-24,2025-12-21
8.19.0 : 2023-12-22,2026-01-07
8.20.0 : 2024-01-08,2026-01-30
8.21.0 : 2024-01-31,2026-02-21
8.22.0 : 2024-02-22,2026-03-31
8.23.0 : 2024-03-31,2026-04-26
8.24.0 : 2024-04-26,2026-05-31
8.25.0 : 2024-05-31,2026-06-28
8.26.0 : 2024-06-28,2026-08-30
8.27.0 : 2024-08-30,2026-10-02
8.28.0 : 2024-10-02,2026-10-25
8.29.0 : 2024-10-25,2026-11-29
8.30.0 : 2024-11-29,2026-12-20
8.31.0 : 2024-12-20,2027-01-31
8.32.0 : 2025-01-31,2027-02-28
8.33.0 : 2025-02-28,2027-03-08
8.34.0 : 2025-03-08,2027-04-07
8.35.0 : 2025-04-07,2027-04-25
8.36.0 : 2025-04-25,2027-02-28
9.0.0 : 2025-02-28,2027-04-07
9.1.0 : 2025-04-07,2027-04-25
9.2.0 : 2025-04-25,2027-04-25

section zarr
2.13.0 : 2022-09-22,2024-09-21
2.14.0 : 2023-02-10,2025-02-09
2.15.0 : 2023-06-14,2025-06-13
2.16.0 : 2023-07-20,2025-07-19
2.17.0 : 2024-02-14,2026-02-13
2.18.0 : 2024-05-07,2026-05-07
2.13.0 : 2022-09-22,2025-02-09
2.14.0 : 2023-02-10,2025-06-13
2.15.0 : 2023-06-14,2025-07-19
2.16.0 : 2023-07-20,2026-02-13
2.17.0 : 2024-02-14,2026-05-07
2.18.0 : 2024-05-07,2027-01-09
3.0.0 : 2025-01-09,2027-01-09
18 changes: 16 additions & 2 deletions spec-0000/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ All versions refer to feature releases (i.e., Python 3.8.0, NumPy 1.19.0; not Py

Specifically, we recommend that:

1. Support for Python versions be dropped **3 years** after their initial release.
2. Support for core package dependencies be dropped **2 years** after their initial release.
1. Support for Python versions be dropped **3 years** after the next version of Python is released.
Copy link

Choose a reason for hiding this comment

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

I am a bit confused about this. This seems like one more year of support for the non-LTS recommendation but I may be missing some context ...

For Python (yearly release cadence), "3 years after the next version is released" means "4 years since the initial release".

The changes in chart.md seem to agree with this "one more year of Python support".

Copy link
Contributor

@mdhaber mdhaber May 15, 2025

Choose a reason for hiding this comment

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

Good point. When talking about this correction of the logic, we've discussed only support for core package dependencies like NumPy. Since the time between releases is typically 6 months, we've actually discussed that we could drop support for an old version 18 months after the next version release. Since the release cadence of Python is annual, we could keep the same nominal time by making this two years after the next release and still keep the same nominal schedule.

So one option is to change these numbers to 1.5 and 2. We could make both 2 years for simplicity, but indeed, that would change the nominal support time for core dependencies.

2. Support for core dependency versions be dropped **2 years** after the next version of the dependency is released.

{{< admonition note >}}
Core packages may or may not decide to provide bug fix releases during the full 2 year period after release.
Expand All @@ -42,6 +42,16 @@ For instance, if a newer minimum version of a core package is needed by a projec
which is not backported to older versions.
{{< /admonition >}}

{{< admonition note >}}
Certain projects (e.g., projects that have more resources) may wish to provide long-term support (LTS) of an additional year.

Specifically, for projects wishing to provide LTS we recommend that:
Copy link
Contributor

@mdhaber mdhaber May 14, 2025

Choose a reason for hiding this comment

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

The first sentence is that all projects should adopt a common policy. This goes against that, so I think we should acknowledge the discrepancy in some way. If we do not recommend one over the other, the first sentence might change to be "adopt one of two time-based poicies...". If we have a preference for the first but recognize the need for the other, we might say something to that effect here.


1. Support for Python versions be dropped **4 years** after the next version of Python is released.
2. Support for core package dependencies be dropped **3 years** after the next version of the package is released.

{{< /admonition >}}

### Core Project Endorsement

<!--
Expand Down Expand Up @@ -84,6 +94,10 @@ The situation has since improved due to improved installations via binary wheels

### Support Window

{{< admonition note >}}
For LTS, add 1 year to the support window.
{{< /admonition >}}

```mermaid
{{< include-raw "chart.md" >}}
```
Expand Down
Loading