This is a discussion thread on the official Python forums. The original title (too long for submission) is "How can build backends avoid breaking users when they make backwards incompatible changes?".
For context, yesterday Setuptools 78.0.1 was released, which made a change incompatible with many packages which use `setup.cfg` to specify Setuptools configuration data. Specifically, they removed functionality to normalize a key in the config data, and made it an error to use a non-normalized version of the name; the normalization was deprecated in 2021.
Because of the "build isolation" features found in tools like pip, Poetry and uv, and because package metadata often doesn't specify upper version constraints for the package's build dependencies, this ended up impacting a huge number of people, such that the change was rolled back (in 78.0.2) within less than 6 hours (still too slow for many of the people commenting on GitHub).
For context, yesterday Setuptools 78.0.1 was released, which made a change incompatible with many packages which use `setup.cfg` to specify Setuptools configuration data. Specifically, they removed functionality to normalize a key in the config data, and made it an error to use a non-normalized version of the name; the normalization was deprecated in 2021.
Because of the "build isolation" features found in tools like pip, Poetry and uv, and because package metadata often doesn't specify upper version constraints for the package's build dependencies, this ended up impacting a huge number of people, such that the change was rolled back (in 78.0.2) within less than 6 hours (still too slow for many of the people commenting on GitHub).