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.