On 30.09.2015 09:51, Vladimir Ozerov wrote: > Igniters, > > Normally we are trying to maintain backward compatibility with previous > versions. But it is not always possible. > > E.g. we are about to release portable protocol. There are lots suggestions > how to optimize it, but all of them are relatively hard to implement. It > would not be a problem if are able to improve it iteratively from release > to release while still allowing for different versions (e.g. 1.5 and 1.6) > to communicate. > > What if we add a top-level property "*compatibility level*" allowing user > to "downgrade" some parts of the system to communicate with earlier > versions?
That's likely to be a huge pain to maintain. The problem is that it doesn't force you to think about compatibility too much, and you'll end up having any number of incompatible protocols that you'll have to maintain simultaneously. There's an IMO better way: define the protocol to be natrually extensible, and introduce a capability exchange step. Map protocol extensions to capabilities (these can represented as simple tokens, or whatever), then make the client and server use any capabilities that are common to both. We do this in Subversion; that's how a 1.9 server can work with a 1.0 client but the same server will work much better (with more features available) with a 1.9 client. And the other way around, of course. -- Brane
