"For a well architect house, fires should occur very rarely. As such we should not install smoke alarms."
If it can happen it will happen and whatever you're designing should be built with that in mind. Say nothing of an entire language's package management semantics
That doesn't really matter. For a large enough code base "a breaking change every couple of years" for each library in your source tree could easily be a breaking change every every day.
When the surface you're looking at is "all open source code supporting this language" are you confident saying that there will only be 1 breaking change every 2 years for your tools?
Imagine you're making a GUI. I don't think there's any GUI lib in the mobile OS space that hasn't added or deprecated a major feature in the last 2 years. Android is very good at this and there's still large deprecation events (see Jetpack).
I picked up a Clojure project I wrote three-four years ago last month and upgraded it to all its latest dependencies.
No breaking changes.
The HTML-based applications I've written going back the last six years all still work on modern browsers.
The few apps I've written for Android didn't work across all Android versions even when in active development. Android really is the best example of how miserable development can be when backwards compatibility (or really, just compatibility) isn't taken seriously.
"For a well architect house, fires should occur very rarely. As such we should not install smoke alarms."
If it can happen it will happen and whatever you're designing should be built with that in mind. Say nothing of an entire language's package management semantics