Backward compatibility is an important design goal of a software system that says that a new version of the software should play nice with the old version. As an example, Microsoft Windows has done a remarkably good job (in my opinion) of achieving backward compatibility over the years, while seemingly not planning ahead to any reasonable degree. Yes, that’s a compliment disguised as a criticism, or visa versa.
It seems that developing standards for a technology help make backward compatibility much easier to achieve in the future. This is probably due to the fact that getting a bunch of intelligent egos to agree on a standard requires a lot of discussion of the future, in the process helping clear out the cloud of uncertainty that is the cutting edge of tomorrow.
That’s why it’s always surprising to me when a well-established C++ library officially breaks backward compatibility as in this latest example from Boost. It’s certainly easier to fix a design flaw by starting over. Whether this is the right approach for the long term success of a project is another question. In this case, I just smile, nod, and go back to update the old code to the new API.