PEP 815: Deprecate `RECORD.jws` and `RECORD.p7s`

In PEP 815, we propose to deprecate RECORD.jws and RECORD.p7s. These in-archive signatures have never seen any widespread support or usage, notably they aren’t supported in pip nor uv. Users looking to verify wheel provenance should instead use index hosted attestations, which are more modern, out-of-archive and supported by tooling.

The PEP is written under the assumption that these files aren’t used. If you are a user of them or know a tool that uses them, please share!

Usage data

To add some data to the unused claim, we can use the GitHub search:

Thanks to users (accidentally) committing venvs or unpacked wheels, we get additional data from GitHub:

We also checked Tom Forbes’ PyPI Data with the following query:

select    
    project_name,
    max(toYear (uploaded_on)) as year,
    countIf(endsWith(path, '.dist-info/RECORD.jws') OR endsWith(path, '.dist-info/RECORD.p7s')) as total_files
from      pypi
group by project_name with rollup
having total_files > 0 or project_name is null
order by year desc, total_files desc;

This yields the following table, where year means “most recent year there has been a release with one of the files”: signature_files.csv · GitHub

Closing words

We usually take great care around deprecations, but unless there is usage of these signature files we have missed, I’d like to keep this as simple as possible for a deprecation with no affected tools or users.

9 Likes

Thanks for writing this @konstin! I’m registering my strong support for this PEP: I think the downsides are marginal (= effectively zero), and that formally deprecating these two signature accommodations will make explicit the informal deprecation that’s already in place.

2 Likes

I don’t argue against the PEP, but I’m interested what the intended outcome of this is? Are there people pressuring tools to add support for these because they aren’t officially deprecated? Do we want tools to detect and scream about them? Do we want PyPI to block uploads with these files?[1]

Without an intended outcome, it seems like there’s nothing gained or lost? So… why?


  1. For the record, my answers are: “nothing”, “ignore them”, “no”, “hell no!”. ↩︎

3 Likes

My assumption is that @konstin is trying to be a good steward by writing fully spec-compliant tooling, but has (IMO, correctly) deduced that this one is not worth the effort for them or anyone else, and rather than just ignoring it, has gone a step above to attempt to bring our standards up to date with reality.

The outcome here is that there is one less PEP that new (and old) tools need to contend with, I think that alone is worth doing.

19 Likes

I’d like to add my support of this reasoning.

I’ve done a lot of spec reading over the past year or so and when you find that tools aren’t following the spec it can be hard to deduce if it was missed on purpose, forgotten about, misunderstood, or the wording doesn’t correctly convey the intentions

Having a clearly deprecated part of the spec would save time trying to understand if the ecosystem supports it or not, and if not why.

6 Likes

Yeah, this was the source of the pre-PEP thread: we observed that these signatures were basically nonexistent in practice and that standard tooling had long stopped supporting them (or more accurately, even noticing them), so updating the standards to reflect the “ground truth” is IMO a useful part of ensuring that consumers of the standards have an accurate view of what is and isn’t actually used by the ecosystem :slightly_smiling_face:

7 Likes

Let’s do this.

Thanks @konstin for writing this into a PEP (and @emmatyping for sponsoring it)! AFAICT, the only actual change this needs is a PR to packaging.python.org as well, which would be good to file too.

5 Likes

Ideally, this would have been a PR against packaging.python.org that removes this outdated part from the living spec, likely with an announcement for due diligence, but substantially it’s maintenance ensuring that our documentations and our implementations align. As the process requires a full PEP for this change, I wrote a PEP.

I put up a draft PR for packaging.python.org: PEP 815: Deprecate `RECORD.jws` and `RECORD.p7s` by konstin · Pull Request #1996 · pypa/packaging.python.org · GitHub

I think this is ready for pronouncement?

5 Likes

I don’t think this is controversial, so I’m happy to approve the PEP. Thanks @konstin for doing the admin to make this happen!

6 Likes