Semantic Versioning – What Does Backwards Compatible Mean If There Are Breaking Changes?

open sourcesemantic-versioning

I've noticed something strange in a few open source projects that use Semantic Version. In React 15, the React team switched to semver. Similarly, the Angular team switched to semver in Angular 2.0.0.

Semver declares that a major version bump will happen "when you make incompatible API changes". In React 16 and Angular 4 breaking changes occur but I noticed that both projects made statements like that they "will be backward compatible, though as with all major updates, there will be a few small breaking changes". I notice this with more than those two projects.

It seems strange to functionally say it is backwards compatible except for the parts that aren't backwards compatible. Why would a project choose to make such a redundant statement? This makes me wonder if there are plural definitions for backwards compatibility that I'm simply not aware of (and one that Semver does not acknowledge).

Best Answer

It sounds like they just mean "mostly backward compatible".

The definition of "backward compatible" pretty much is "not breaking stuff". But if there are some small changes to rarely used things, that only affect a very small portion of users, it may still be accurate to describe a new version as backward compatible overall.

Related Topic