How big a problem is the possible breakage of C extensions for new code? Is there currently some standard "future proofed for multi-thread" way of writing them that will reduce the odds of the C extension breaking? And maybe also being compatible with PyPy? Or do developers today need to write a separate version for each interpreter that they want to support?

There are projects[1] that are abstracting away the C extension interface in order to standardize C extensions across implementations and prevent breaking changes.

[1] https://github.com/hpyproject/hpy