Require packing wheels without files in the root directory

:person_shrugging: Pretty much anything non-trivial that we want to add to wheels will be incompatible to some extent. If we split the world into just the two cases ā€œcompatibleā€ and ā€œbig scary rolloutā€, weā€™re going to end up unable to do anything.

Iā€™d assumed that a change which included a new incompatible feature that some projects might use, but was otherwise compatible, would be a good test here. In most cases, the new feature isnā€™t used and users can safely ignore a ā€œversion is newer than I recogniseā€ warning. In the few cases where the new feature does get used, and hence the warning signals a genuine issue, we learn how best to manage the transition.

With a totally-compatible version bump we learn very little, because users can legitimately just ignore the warning, because 1.1 wheels will always be installable with existing installers.

But if you think differently, thatā€™s OK. Assuming you go ahead with the idea and write a PEP, I wouldnā€™t reject it solely because I donā€™t think weā€™ll learn anything from the exercise. I will reject it if everyone thinks that, and thereā€™s no consensus in favour of the change, of course :wink:

If some wheels contain symlinks and are incompatible, and some donā€™t contain symlinks and are compatible, then we should put Wheel-Version: 2.0 in the ones that contain symlinks and Wheel-Version: 1.0 in the ones that donā€™t contain symlinks.

I canā€™t think of any situation where a minor version increase + warning is actually useful. IMO thatā€™s just a vestigial feature of the format ā€“ harmless but useless.

I admit Iā€™m confused about the versioning rules here. And for that matter about what we mean by ā€œcompatibilityā€. If all 1.0 wheels are also valid 1.1 wheels, is that ā€œforward compatibleā€? If all 1.1 wheels are valid 1.0 wheels, is that ā€œbackward compatibleā€? If so, which is it we want to achieve? Forward or backward compatibility? And why?

My assumption was that minor version bumps were for forward compatible changes, and major version bumps were for completely incompatible changes. I donā€™t see what useful changes we can make that would warrant a new version, and are also backward compatible - they would basically be invalidating some previously valid wheels for no corresponding benefit (hence this thread!)

Skipping the terminology questionā€¦

If we want to add functionality to the wheel format, we need a new major version bump. If we want to remove functionality from the wheel format, we need a minor version bump.

So far, this is the only proposed change that Iā€™ve seen to remove functionality from the format. :slight_smile:

Cool. If thatā€™s the definition, then (on a purely personal basis) I see no benefit in ever having a minor version bump. That is, I generally donā€™t think the benefits of removing functionality outweigh the cost of a version increment.

I guess Iā€™m just a little bit uncomfortable with semver-style versioning in general, and in particular for standards. But as long as it all makes sense to everyone else, and we can get consensus on whether a given change is ā€œmajorā€ or ā€œminorā€ and we can agree transition processes as needed, then Iā€™m happy to go along with the majority.