How can build backends avoid breaking users when they make backwards incompatible changes?

I think it’s hard to speculate right now because we don’t know which users and why. Most users and packages should be using wheels and not encounter this, there are some legitimate use cases for requiring sdists, but perhaps this will encourage many packages that just haven’t got around to building wheels to start build wheels.

Advanced users will be able to suppress build warnings without any need to additional UX from pip, with something like setting PYTHONWARNINGS=ignore::BuildBackendWarning or calling pip like python -W ignore::BuildBackendWarning -m pip ... (it might need the fully qualified location of the warning?). I would be in favor of including this in the release notes and/or docs.