Switch to PEP 639 license metadata #325
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Conform with PEP 639 by adding links to our license files, using a SPDX license expression to declare our licenses, and dropping the deprecated license Trove classifier.
The new syntax for
project.license
requires setuptools ≥ 77, so this change breaks compatibility with setuptools 61-76. Users installing from source will be unaffected because the build frontend automatically updates setuptools if required, but Linux distro packaging disallows such updates, so this change breaks package builds for many current distro versions, including all stable versions of Debian, Fedora, and Ubuntu as well as Debian testing.setuptools' deprecation warning claims that the old syntax will be removed on 2026-Feb-18. If setuptools sticks to this plan, they will cause ecosystem-wide packaging disruption. I intend to maintain the status quo as long as possible in the hope that PyPA opts to extend the deprecation period. If they do not, and setuptools drops support for the old syntax (and does not reinstate it within a few weeks), we'll probably need to drop the license fields for a few years until distros with setuptools < 77 reach EOL.