Didn't the Swift people look at something like this with their work on ABI compatibility? I've looked at their docs though but couldn't find anything comprehensive about it… cc.
I'd be really interested if this could be done formally, and maybe even statically verified in the type system somehow… it'd be also really cool if it took account of stuff like conditional compilation.
I'd also be interested in this from a language implementors perspective - can you reason about changes you can make to a language that preserve backwards compatibility with a previous version of the language?
And maybe if a library uses only specific features of the language you could be guaranteed to be compatible between certain versions of the language… I dunno though. Language ecosystems are really weird distributed systems, hehe.