SemVer has failed us
jongleberry.com
SemVer has failed us
1–10 of 52 posts
Re: SemVer has failed us
#2You should be fast to get to 1.x.x. If your app breaks on a patch release (that was only a bugfix and provided that interfaces stayed consistent), maybe you shouldn't rely on buggy behavior and maybe you should fix your code.
This isn't a failing of semver--this is a failure of being responsible engineers.
EDIT:
The best example from the article is the bit talking about how people interpret 0.x vs 1.x vs 2.x. Folks, it's just a damned version number, and a number that only indicates you may have to refactor you application to handle changed interfaces. Any other psychological baggage you attach to it is just that, baggage. Aaaargh.
Re: SemVer has failed us
#3Re: SemVer has failed us
#4Re: SemVer has failed us
#5Unfortunately our software isn't well-specified enough to allow the computer to determine version numbers automatically yet. To make this a reality, you'd need Haskell-level type safety, along with specifying other constraints, like "this fn is O(log(n)) or better".
>If you're pinning versions, you're reducing the package manager to a glorified CURL
I'm actually quite happy with this. I realized it when a few weeks ago, bower broke for me. Turns out, a grandchild dependency of bower failed to follow semver. This means that it's not enough for you to follow semver, every single dependency of all of your dependencies have to follow semver as well.
Re: SemVer has failed us
#6As someone who hasn't been paying attention to semantic versioning orthodoxy, the author's suggested alternative of ferver[1] is what I thought semantic versioning already was. So yeah, do that. All I care about is breakage, not whether new features were added. [1] https://github.com/jonathanong/ferver
This is just more of the same marking of territory that Node is kinda famous for.
Re: SemVer has failed us
#7Semver hasn't failed anyone--web developers and the bozos in the Node community (of which I cheerfully count myself as a member) are lacking in discipline. You should be fast to get to 1.x.x. If your app breaks on a patch release (that was only a bugfix and provided that interfaces stayed consistent), maybe you shouldn't rely on buggy behavior and maybe you should fix your code. This isn't a failing of semver--this i…
Yes, people _should_ get over changes in version number, but in reality they don't. So library authors cater to reality, not how they wish things should be. That is the problem, and why semvar is broken. Not in principle it isn't, but in how it actually functions in the hands of humans.
Re: SemVer has failed us
#8- patch: forwards and backwards compatible – only bug fixes, no new features, no changing existing features.
- minor: backwards compatible – new features allowed, but old code should keep working.
- major: all bets are off.
This is pretty much what the SemVer spec says, and it's hard to imagine what else you could do. The significance of forwards compatibility for patch versions is that if you bump a patch version and find that it was problematic, you should be able to revert back to a lower patch version without breaking new code that's been written since the bump.
The thing is, it's still a judgement call what constitutes a bug fix. If you're fixing a segfault, that's a no brainer – no one (sane) was relying on something segfaulting. If you're changing a behavior from one potentially reasonable behavior to the one that was actually documented, then, yeah, that might not be "just a bug fix" – people might be relying on it. So we're super conservative about "fixing" even fairly bad behavior in patch releases. Still, the only way to make sure an application keeps working exactly the same is to use the same exact versions – down to the patch level.
The FerVer "spec" is barely coherent, I'm not sure how anyone could consider that something to follow. SlimVer basically just gets rid of things in SemVer that you don't have to use anyway. Pre-release versions – especially release candidates – are incredibly useful. You tag 1.2.3-rc1 and if no issues crop up in a week, then that becomes your 1.2.3 release (1.2.3-rc1 and 1.2.3 are exactly the same); if issues do crop up, then you fix them and tag 1.2.3-rc2 in a week and repeat.
I also think that pre-1.0 versions are useful: just treat the minor version like a major version. For 0.1.2 => 0.1.3 you only fix bugs but for 0.1.3 => 0.2.0 anything goes. There's no point in doing feature-only, backwards compatible releases while you're still working out the API for something, and 0.x releases are for precisely that kind of exploratory period.
Re: SemVer has failed us
#9Completely agree. For a long time, I've thought that humans shouldn't be in charge of version numbers at all. The main problem is that a human isn't reliable at determining "is this change breaking?". Unfortunately our software isn't well-specified enough to allow the computer to determine version numbers automatically yet. To make this a reality, you'd need Haskell-level type safety, along with specifying other cons…
Isn't this going to be impossible for the same reason the Halting Problem is unsolvable?
Re: SemVer has failed us
#10For example: https://github.com/bower/bower/issues/1404#issuecomment-4876...
I unfortunately can only complain, I have no solution to offer.