-
Notifications
You must be signed in to change notification settings - Fork 196
Document Qiskit versioning and stability policy #366
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
Changes from 1 commit
77481cd
e4d48cf
7482b50
d1926d9
7d522c3
2a48e8e
343209c
fa8b7db
b58790a
af369ce
c2ba710
ac12590
ba91939
8472c60
15b2e65
86f791f
44a8b7d
af6d49d
f7ff76c
7b153fa
797434a
789fa79
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,126 @@ | ||
| --- | ||
| title: Qiskit Versioning and Support Policy | ||
| description: The versioning and support policy for Qiskit. | ||
|
|
||
| --- | ||
| <span id="qiskit-version"></span> | ||
|
mtreinish marked this conversation as resolved.
Outdated
mtreinish marked this conversation as resolved.
Outdated
|
||
| # Qiskit Versioning | ||
| Qiskit version numbers follow [Semantic Versioning](https://semver.org/). | ||
| The version number is comprised of 3 primary components, the major, minor, and | ||
| patch versions. For a version number `X.Y.Z` where `X` is the major version, | ||
| `Y` is the minor version, and `Z` is the patch version. | ||
|
|
||
| Breaking API changes are reserved for major version releases. The **minimum** | ||
| period between major version releases is one year. Minor versions will be | ||
| periodically (currently every three months) published for the current major | ||
| version which add new features and bug fixes. For the most recent minor version | ||
|
mtreinish marked this conversation as resolved.
Outdated
|
||
| there will also be new patch versions published as bugs are identified and fixed | ||
| on that release series. A tentative release schedule is included below: | ||
|
|
||
|  | ||
|
mtreinish marked this conversation as resolved.
Outdated
|
||
|
|
||
| For an up-to-date release schedule you should refer to the Qiskit Github project's | ||
| [milestones list](https://github.com/Qiskit/qiskit/milestones) which will always | ||
|
mtreinish marked this conversation as resolved.
Outdated
|
||
| contain the current release plan. | ||
|
|
||
| With the release of a new major version, the previous major version is supported | ||
| for at least 6 months; only bug and security fixes will be accepted during this | ||
| time and only patch releases will be published for this major version. A final | ||
| patch version will be published when support is dropped and that release will | ||
| also document the end of support for that major version series. A longer | ||
| support window is needed for the previous major version as this gives downstream | ||
| consumers of Qiskit a chance to migrate not only their code but also their | ||
| users. It's typically not recommended for a downstream library that | ||
| depends on Qiskit to bump its minimum Qiskit version to a new | ||
| major version release immediately because its user base also needs a chance | ||
| to migrate to the new API changes. Having an extended support window | ||
| for the previous major Qiskit version gives downstream projects time to fix | ||
| compatibility with the next major version. Downstream projects can provide | ||
| support for two release series at a time to give their users a migration path. | ||
|
|
||
|
|
||
|
|
||
|
|
||
|
mtreinish marked this conversation as resolved.
Outdated
|
||
|
|
||
| For the purposes of semantic versioning, the Qiskit public API is considered | ||
| any documented module, class, function, or method that is not marked as private | ||
| (with a `_` prefix). However, there can be explicit exceptions made in the case | ||
| of specific documented APIs. In such cases these will be clearly documented as | ||
| either not being considered stable interfaces yet and a warning will be actively | ||
| emitted on the use of these unstable interface. In some situations an interface | ||
| marked as private will be considered part of the public API, these | ||
| Typically this only occurs in two cases, either an abstract interface definition | ||
| where subclasses are intended to override/implement a private method as part of | ||
| defining an implementation of the interface, or advanced-usage low-level methods | ||
| that have stable interfaces but are not considered safe to use as the burden | ||
| is on the user to uphold the class/safety invariants themselves (the canonical | ||
| example of this is the `QuantumCircuit._append` method) | ||
|
|
||
| The supported Python versions, minimum supported Rust version (for building | ||
| Qiskit from source), and any Python package dependencies (including the minimum | ||
| supported versions of dependencies) used by Qiskit are not part of the backwards | ||
| compatibility guarantees and may change during any release. Only minor or major | ||
| version releases will raise minimum requirements for using or building Qiskit | ||
| (including adding new dependencies), but patch fixes might include support for | ||
| new versions of Python or other dependencies. Usually the minimum version of a | ||
| dependency is only increased when older dependency versions go out of support or | ||
| when it is not possible to maintain compatibility with the latest release of the | ||
| dependency and the older version. | ||
|
|
||
| <span id="upgrade"></span> | ||
|
mtreinish marked this conversation as resolved.
Outdated
mtreinish marked this conversation as resolved.
Outdated
|
||
| ## Upgrade Strategy | ||
|
|
||
| Whenever a new major version is released the recommended upgrade path | ||
|
mtreinish marked this conversation as resolved.
Outdated
|
||
| is to first upgrade to use the most recent minor version on the previous major | ||
| version. Immediately preceding a new major version a final minor version will | ||
| be published. This final minor version release `M.N+1.0` is equivalent to | ||
| `M.N.0` but with warnings and deprecations for any API changes that are | ||
| made on the new major version series. | ||
|
|
||
| For example, on the release of Qiskit 1.0.0 a 0.46.0 release was published | ||
|
mtreinish marked this conversation as resolved.
Outdated
|
||
| immediately proceeding the 1.0.0 release. The 0.46.0 release was equivalent | ||
| to the 0.45.0 release but with additional deprecation warnings that document | ||
| the API changes that were made as part of the 1.0.0 release. This pattern | ||
| will be used for any future major version releases. | ||
|
|
||
| As a user of Qiskit it's recommended that you first upgrade to this final minor | ||
|
mtreinish marked this conversation as resolved.
Outdated
|
||
| version first, so you can see any deprecation warnings and adjust your Qiskit | ||
| usage ahead of time before trying a potentially breaking release. The previous | ||
| major version will be supported for at least 6 months to give sufficient time | ||
| to upgrade. A typical pattern to deal with this is to pin the max version to | ||
| avoid using the next major release series until you're sure of compatibility. | ||
| For example, specifying in a requirements file `qiskit<2` when the current | ||
| major Qiskit version is 1 will ensure that you're using a version of Qiskit | ||
| that won't have breaking API changes. | ||
|
|
||
| Pre-emptively capping the version less than the next major version is neccessary | ||
| to ensure you get a chance to see deprecation warnings before a | ||
| major version release. The normal release schedule means the last minor | ||
| version release which includes any final deprecation warnings will be released | ||
| at the same time as the next major version and `pip` will default to using | ||
| the newest version available unless the version cap is set. | ||
|
|
||
| <span id="pre-releases"></span> | ||
|
mtreinish marked this conversation as resolved.
Outdated
|
||
| ## Pre-releases | ||
|
|
||
| For each minor and major version release Qiskit will publish pre-releases that | ||
| are compatible with `PEP440 <https://peps.python.org/pep-0440/>`__. Typically | ||
|
mtreinish marked this conversation as resolved.
Outdated
|
||
| these are just release candidates of the form `1.2.0rc1`. The `rc` releases | ||
| will have a finalized API surface and are used to test a prospective release. | ||
|
|
||
| If another PEP440 pre-release suffix (such as `a`, `b`, or `pre`) are | ||
| published these do not have the same guarantees as an `rc` release, and are | ||
| just preview releases. The API likely will change between these pre-releases | ||
| and the final release with that version number. For example, `1.0.0pre1` has | ||
| a different final API from `1.0.0`. | ||
|
|
||
| <span id="post-releases"></span> | ||
|
mtreinish marked this conversation as resolved.
Outdated
|
||
| ## Post-releases | ||
|
|
||
| If there are issues with the packaging of a given release a post-release may be | ||
| issued to correct this. These will follow the form `1.2.1.1` where the fourth | ||
| integer is used to indicate it is the 1st post release of the `1.2.1` release. | ||
| For example, the qiskit-terra (the legacy package name for Qiskit) 0.25.2 | ||
| release had some issue with the sdist package publishing and a post-release | ||
| 0.25.2.1 was published that corrected this issue. The code was identical, and | ||
| 0.25.2.1 just fixed the packaging issue for the release. | ||
|
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This was generated via the following python script: import pandas as pd
import plotly.express as px
data = [
["0.44.0", "2023-07-27", "2023-11-03", "0.x"],
["0.45.0", "2023-11-03", "2024-01-18", "0.x"],
["0.46.0", "2024-01-18", "2024-08-15", "0.x"],
["1.0.0", "2024-01-31", "2024-05-17", "1.x"],
["1.1.0", "2024-05-17", "2024-08-15", "1.x"],
["1.2.0", "2024-08-15", "2024-11-21", "1.x"],
["1.3.0", "2024-11-21", "2025-02-06", "1.x"],
["1.4.0", "2025-02-06", "2025-08-28", "1.x"],
["2.0.0", "2025-02-20", "2025-05-29", "2.x"],
["2.1.0", "2025-05-29", "2025-08-28", "2.x"],
["2.2.0", "2025-08-28", "2025-11-27", "2.x"],
]
release_schedule = pd.DataFrame(
data, columns=["Release", "Release Date", "End of Support", "Major version"]
)
fig = px.timeline(release_schedule, x_start="Release Date", x_end="End of Support", y="Release", color="Major version", title="Tentative Qiskit Release Schedule")
fig.update_yaxes(autorange="reversed")Plotly is a javascript library under the covers and generates a web interactive version of this plot (you can zoom in and hover over the releases to get more details) we should be to embed this more natively into the documentation in the future. For example, I just used the plotly api to generate a minified js version of the plot embedded in a standalone html file here: https://gist.githubusercontent.com/mtreinish/18cde5e482b5315b1b2fb09f048276a6/raw/f1a399be8d12ded44f49ecae4295844d48392162/gistfile1.txt But in the interest of time I just opted to use a static png file for this first commit. |
Uh oh!
There was an error while loading. Please reload this page.