One possible workaround (unless we find 1-way-fits-all technical interpretation of a spec) would be to use notion of major vs. minor releases.
We can guarantee backward compatibility within major releases (any osmo-bts 1.x.y works with any osmo-bsc 1.a.b) but not between them (osmo-bts 1.x.y might not work with osmo-bsc 2.m.n).
On a related note, we can follow the same principle with our libraries: any minor libosmocore 1.k.l. release preserve backward compatibility while moving to libosmocore 2.q.w. might require some porting efforts.
That would match general expectations set by other free software projects like GTK for example - nobody expects application written for GTK2.x to work effortlessly with GTK3.y