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?
Swift does not yet do a great job of preventing new API additions from interfering with existing code, though that’s an area of interest for us in the near future