Replacing "when" by "when and only when"#619
Conversation
ljharb
left a comment
There was a problem hiding this comment.
This should not land. The only thing that needs preventing is breaking changes in a non-major. It is always perfectly acceptable to bump the major even when there are no changes whatsoever.
|
Hello @ljharb thanks for your comment. Following your reaction, as well as the ones from the issue #475, I was wondering if I should continue or just close this PR/issue. If I understand you correctly, you are OK with:
but, you are not OK with the opposite proposition:
In order words, you are not OK with the equivalence between the presence of a breaking change and the increment of the MAJOR:
Personally, I still believe that the equivalence is key if you take the point of view of the consumer. From the consumer point of view, while she/he is not interested by new features, she/he wants the interface (and its behavior) to be stable. So, the key information is the increment of the MAJOR. If the MAJOR has not been incremented, she/he can be quite confident that the interface (and its behavior) will remain stable from her/his point of view, and consequently she/he does not have to plan a costly upgrade. I don't know if that resonates with your experience, maybe I am missing other use cases, but let me try one more time to sell the equivalence between breaking change and MAJOR increment... |
|
If the major is incremented, they have no choice but to read the changelog and plan the upgrade, which might be costly, or may even have no cost at all. Majors don’t implicitly carry any cost - breaking changes do. Majors just warn of a potential breakage, and then the user has to figure out what it is, if it exists. I’m not a maintainer here, but if i were I’d suggest the issue/PR be closed. |
|
@ljharb thanks again for your comment. I have read again the https://semver.org/ and it is clear that the point 8 gives an only-one-way-implication:
It clearly looks OK to you, and many others, but I still can't stop thinking that a two-way equivalence would be way better:
which would mean:
setting an additional constraint on the producer. I am also realizing that I use semantic versioning not only for packages that are statically linked (imported) to other packages, but also for software that are accessed via the network. And, within this latest use case, I plan to use semantic versioning in order to take run-time routing decision. It might be why I found the two-way equivalence more appealing... In addition to that, I am now also wondering if the sentence "packages you integrate into your software" and in particular the word "into" exclude the situations in which the package/software is accessed via the network (or simply via an inter-process communication) from the semantic versioning scope... |
|
Considering the 1:4 like:dislike ratio on #475 I think this PR should be closed due to lack of support. This is too major a change to implement while controversial. |
|
Let me try one more time ;-) Let's focus on the first sentence only:
Let's re-write this sentence as an implicational relationship between two statements: Therefore, the core of our discussion is about the validity of the reciprocal relationship: This second implicational relationship would then lead to an equivalence relation: Following the comments I received, I do realize that a lot of people disagree on the validity of (2). Still, I may have found another way to explain the relation (2), starting for the original text. Let's start from the following paragraph of the section "Why Use Semantic Versioning?".
I would naturally complement this paragraph by:
And, this new sentence could be expressed as the following implicational relationship between two statements: |
|
However, that is false - because you CAN upgrade to it if you know that your usage of it isn't the breaking part. In other words, even with your nonexistend-but-desired restriction, the breaking change in a package's major bump still might not be used by a particular consumer, thus, to that consumer, the major bump contains no breaking change. |
|
@patricekrakow Is there anything anyone could say to you that would have you accept that you have been heard and understood, but not agreed with? If so, please consider it said. You don't need to keep trying to be understood. |
|
@sheldonh I am afraid I will continue trying to be understood... For instance, you wrote: "Ask yourself why you would want to prevent me from arbitrarily bumping the MAJOR version number for reasons you haven't considered." in #475. And, I am trying to say that you can't (from a logical point of view) say something like that since we are talking about a "semantic version" and not any kind of "version". The idea behind having a "semantic version" is to have a "version" that convey "semantics", i.e. meaning. When you talk about "arbitrarily bumping the MAJOR version", you do not respect the semantics, i.e. the meaning, of your "semantic version". Having a "semantic version" means that I can get some semantics, i.e. meaning, out of it, if you increment the "semantic version" arbitrarily, without taking into account its semantics, that's not a "semantic version" anymore. I do acknowledge that I am also taking the point of view of the consumer. For me, a "semantic version" is there to convey semantics, i.e. meaning, to the consumer and that, naturally, put more constraints on the producer. But, again, what's the value of "semantic version" that allows the producer to arbitrarily increment the "version"... the consumer can't learn anything from it. If you say to your consumer I have incremented the MAJOR because I have made incompatible API changes, or because I wanted to, you have said nothing. On the other hand, if you say to your consumer I have incremented the MAJOR because I have made incompatible API changes, (and not just because I wanted to) then you send a clear message that can be used to make a decision. I will stop for now, but I have the impression this is not over... I am still looking for a better - maybe more formal - way to explain my point... |
It is supremely arrogant to conclude that you are not being understood when people do not agree with you.
This is what you are wrong about. The semantics allow arbitrary bumping of the major version. They do this by failing to forbid it. You are saying that the semantics should forbid it and we are disagreeing with you.
This is nonsense. It does mean something. The semantics simply do not mean what you want them to mean. It means "this release is a big deal, see the release notes." We have had a practical example at work where it has made sense to bump the major version even though the API itself is backward compatible (ops concerns).
Indeed. I understand that there is consumer value in the revised definition that you would like the spec to adopt. But a consequence of your revised definition is a restriction that producers do not want.
My suggestion is that you stop before you do your reputation harm. You have been very clear with your point and it's insulting to continue to argue as if you are not being understood. The implication is that your perspective trumps everyone else's and you must be right. |
|
@sheldonh - I am super sorry that you perceived the fact that I was thinking I am not able to explain myself properly as supremely arrogant. I do appreciate your comment:
And, then, conclude that what I am looking for is something else than semantic versioning, and therefore defines it as another versioning scheme. |
Fixes #475