Monotonic Versioning Manifesto
blog.appliedcompscilab.com
blog.appliedcompscilab.com
If you were in a middle of a philosophy book and have previously defined what you mean by "naturalistic fallacy" that would be fine, but you are literally throwing the term in an isolated sentence.
We're all reading this on the internet - if you don't know what a term means it only requires a tiny hand movement and a few seconds to fix that. That way we can have discussions that build on previous abstractions and move on to more complex ideas.
It's a shame that the "arrogant ivory-tower egghead" narrative sticks so easily. It's true that some people use words to obscure, but just as often it's someone trying to say something that's difficult to explain in any other way without ending up with a wall of text.
With that said, that post about the "naturalistic fallacy" could just as easily been written "Your intuition is not an argument. What are you really saying about this?" There would have been no wall of text nor any deep explanation. It would have been strictly simpler and clearer.
But if he'd said that, I wouldn't have learned about the naturalistic fallacy, and that would have been a loss. The real problem on the internet is not ivory-tower eggheads, but techies who say the adult equivalent of "I don't like green beans" and expect that to be of general interest or benefit.
Bringing up Hume's guillotine [1] to show someone that version numbers is not what it seems to be to that individual is a bit of an overkill, don't you think?
If we start to see everything as Kant's golden rule [2], Sartre's existence problem [3], Wittgenstein's private language [4] and Marx's worker struggle [5] is going to be very hard at all to communicate simple ideas, most of time those are arguments that raises more questions than answers.
To make a programming analogy, is a bit like design patterns, sometimes is nice to say "it's just a factory" without having to go throughout the concept of factory, but if you overuse it and start talking only in patterns it all becomes a mess.
If it's complex, suite yourself. If it ain't, don't make it so.
[1]: https://www.youtube.com/watch?v=eT7yXG2aJdY
[2]: https://www.youtube.com/watch?v=x_uUEaeqFog
[3]: https://www.youtube.com/watch?v=qpXNRrtuo38
Precisely my point.
I hope that by "deliberate tactic" you didn't try to imply as being "mean" or "bad" or not "benign".
As for the "benign use" you mentioned, it is clearly your opinion on it, but where are your reasons, your arguments in favour of it?
(welcome to the conversation)
Ambiguity is not only a problem, it also has significant advantages.
Useful comment!
- releasing features separately from bugfixes
- releasing backwards-compatible new features
- releasing bugfixes for older releases (this one is more optional)
This versioning scheme seems to remove all of that just for the sake of simplicity - I don't see the benefits.
The difference here with Monotonic is that such changes does not have a special meaning in the version number (nothing on the encouragment side IMO).
releasing bugfixes for older releases
Good point. The "manifesto" should mention this.
The best you can do in those situations is to advertise as publicly as possible that version 2.3 should never be used.
1.1 -> 2.2 -> 3.3 -> 1.4 -> 2.5 -> 3.6
And in fact I kind of like this. 1.4 is rather obviously compatible with 1.1 (and 2.5 with 2.2), but also clearly denotes a new release. You're still always using the most recent release, within a compatibility number.
Even better, it avoids crap like: "Affected users should upgrade to OpenSSL 1.0.1g. 1.0.2 will be fixed in 1.0.2-beta2." Instead, the fix is announced simply "Bug fixed in release 4 and later".
The Release Number SHALL NOT be decremented.
Which would break exactly this us case if you followed to a T.This also increased cognitive load: if I have 5 versions to care about I actually have better understanding of what went where, why, etc. With hundreds of versions institutional memory wasn't as strong.
I feel that if we were to push minor updates (ones only team B cared about) to a separate portion, everyone would be better off. This changed for later projects and simplified workflow (you could actually remember things).
It seems that your project was misusing version management.
Despite the name, version management is not actually taking care of managing your software versions for your project. It takes care of the bit level versions, you still need people to manage the semantics and human side of it.
If different groups can push an pull things without anyone accepting, rejecting and deciding what is release branch and development branch, you are doing it wrong.
He did call it a manifesto. That's the whole point.
* One, stated in the manifesto itself, is that we don't have the minor and patch distinction anymore. Let's be honest, most of us (but not all) simply doesn't care if the library update is a minor or a patch, we are only scary of the major number.
* The second is that with Monotonic you have a sense of ordering of the whole project (note that I'm saying order, not progress). If I give you two different SemVer version numbers are you able to say which one was released first or how old they are? With Monotonic you can answer that, the RELEASE number is common to all COMPATIBILITY "branches".
I have to say, I liked it. But I guess it won't be adopted by many since SemVer is somewhat ubiquitous and is entrenched in the how we think version numbers.
Eg: releases 2.4.0.0, 2.4.1.4, and 2.4.0.3, are all equally compatible and have the same API. They are all version 2.4, and any software that uses them only needs to express a dependency on v2.4. But they're all different builds with internal changes (that don't alter the API), and if you report a bug I need to know which of those builds you're using.
If they were numbered 2.4, 2.5, and 2.6, I guess I'd know the build, but I'd lose some flexibility in expressing the API compatibility. I like being able to say that anything which works with 2.x will also work with 2.x+, where 2.x+ might add features but will not remove them. However, 3.0 might remove API methods or alter the semantics of existing methods. A single compatibility number doesn't let you express that.
Also a small note on the name, I don't see how `4.7944+beta7` is "MonoVer/MVer/MoVer" since it's not quite... mono (http://www.dictionary.com/browse/mono-). It has between two and three components.
If, as is the case for BOSH, you are meant to totally replace the previous version, then the numbers advance rapidly. Note that stemcell versions are into the low 3000s.
[0] http://bosh.io/