Revisioning baked into the federation protocol and the api

Note: This discussion was imported from Loomio. Click here to view the original discussion.

As I understand it, one of the pain points for podmins is a changing and evolving federation protocol. One thing that might alleviate this would be to bake versioning into the protocol. In other words, part of the basic, stable federation handshake protocol could be a declaration of the versions of the full protocol a pod supports. This could also be applied to the client/mobile api (oauth) if/when that is developed. If the reference implementation were to be refactored to allow support for multiple revs of the protocol standard simultaneously, it would allow the protocol to evolve while still ensuring podmins time to continue interoperability while they update their pod to the latest code. In addition, this might help alternative pod implementations in the future, such as custom pods (for example, polyglot pods that implement multiple protocols - friendica/tent/ etc) stay in sync.

I think this would be doable, but I think the easiest way to get started is to find a way to de-couple federation from the app itself, so that we could have some kind of system that could load different federation backends. Perhaps major milestone releases can be released as an additional backend package?