Only Trivial Extensions Work or Get it Right the First Time I've read a good amount of work on the topic of extending network protocols and the like in forwards and backwards compatible ways, and have been left unimpressed so far. Where I expected to see novel ideas for solving such problems, I instead saw descriptions of systems in which a single corporation ultimately controls every node and in which an ``update'' to the running state is deemed inevitable. A system in which a node may never ``upgrade'' itself can be extended only in trivial ways, for each extension must be ignorable. To ignore extensions is the only way I've seen for true compatibility, meaning all extensions must be ignorable and therefore trivial. I suppose this makes perfect sense, for if it were possible to build such a system iteratively through its changing mechanism, then each protocol would start with only that system and then be built up gradually so. This means there's no excuse for absence of forethought in protocol design, as protocols can be damned by poor beginnings. I'm not aware of how the Bitcoin network handles this problem in detail, but I'm to understand every running extension has been made to be ignorable, so that true Bitcoin nodes continue accepting them. One way, although a rather blunt way, to defend against most protocol changes is the version number. Every protocol probably can be designed around ever moving the version number. The Internet makes a fine example of how well version numbers work with encouraging use of the newer protocol, of course. A method related to version numbers is feature negotiation, wherein nodes send ignorable messages to show compatibility with some extensions, meaning extensions are used when both nodes both understand and agree to use them, and never otherwise. Depending on the protocol design, this can be simple or require multiple largely redundant implementations for each case. Still, there's an analog to human communication, so it clearly works to a certain degree, and better designs can make it better still. The only conclusion I can make is what follows: Proper protocol design requires careful forethought.