A few notes about how openbsd does things.
First, openbsd always follows the version + 0.1 every six months version scheme. Sometimes the “minor” rolls over and the “major” goes up by one. This happens regardless of whether or to what extent changes are breaking. It’s not even clear what that would mean, though. Sometimes programs like bind or send mail will get deleted, which is a big deal if you use them, but the OS will otherwise appear functionally equivalent. Other times, like in 5.5, practically every system call will be reworked and nothing compiled for older versions will continue to run, but administrative knowledge will remain relevant.
Internally though, we’ve followed semver rather strictly since before semver was a thing. We’re practically the only OS to actually version libc nowadays, and the number goes up one minor for every addition and up one major for every deletion. Changes are batched when possible, but it’s not a big deal. But other things, like kernel ioctls, aren’t versioned at all. pfctl will work with one kernel, but not another.
To throw in a few personal remarks, I think the semver vision of auto updating to the best compatible version is a pipe dream. I’ve experienced nothing but misery with “give me the best” systems.
Trying to share this piece with as many people as possible as I think the discussion is a really healthy one.
I particularly enjoyed Mike Perham’s take on the issue.