Cargo-semver-checks: Scan your Rust crate for semver violations
I&#x27;m waiting for the day when we will finally admit to ourselves that the Semantic Versioning experiment has failed.<p>The purpose of Semver is to allow software and people to determine, <i>from the version number alone,</i> whether and what has changed. But even though many projects claim adherence to the Semver standard nowadays, the ecosystem as a whole isn&#x27;t, and never has been, anywhere close to the point where a reasonable engineer would actually <i>rely</i> on version numbers to decide whether to upgrade.<p>Imagine you see that one of your library dependencies, which professes adherence to Semver, has released version 1.2.3, up from version 1.2.2 which your project currently uses. Would you feel comfortable doing the update, <i>without checking whether the project still compiles and passes its test suite afterwards?</i><p>If you answered &quot;no&quot;, then you are basically admitting that Semver is worthless in practice. If you are going to test everything anyway, version numbers might as well be a simple incrementing integer, or a date, or a random string. Upgrading will still consist of trying the new version, and, on failure, rolling back – which is exactly what you are probably already doing anyway.<p>Semver doesn&#x27;t work because you can&#x27;t actually trust that all your dependencies have verified their claimed Semver compliance to the extent that would be necessary for your project to rely on it. You have to do that verification yourself, which makes the Semver version number at best an occasionally useful hint. And that&#x27;s not even talking about all the other problems, such as different projects having different interpretations of what constitutes a &quot;breaking&quot; change, and almost none of the older, established libraries even claiming to follow Semver in the first place.