-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Semantic Versioning NOT being followed #2588
Comments
No need to yell as if the world is ending ;-) I agree the texts you found are contradicting. We'll look into it. Thanks for noticing this! |
Oh, sorry about that. Feel free to edit my post so it’d be more graceful. @rawtaz |
No worries whatsoever, I understand you were just being clear 👍 |
Note that semver as it applies to restic is not about the internal restic API, but about the layout of the repository in storage. Restic's internal APIs may change at any time; there is no public API (aside from the command-line interface). So the primary question you've asked:
Is actually totally irrelevant. This should be asking about the repository format and not the API. |
@cdhowie
So that's what I mean when I'm asking about stability of API (along with CLI commands). |
Are there any updates on this? The compatibility page still states that restic is following semver (therefore being unstable), although the website suggests otherwise (even if it never explicitly asserts stability). Is there any assurance of stability? |
Since the software isn't versioned 1.0 yet, presumably you should in the end be prepared that things might change. That said, as you have seen the maintainers and developers do their utmost to keep backwards compatiblity and stability. It's not always doable, but in general I would say it's working quite well :) |
I also recommend considering restic as a stable software and marking it according to the SemVer as 1.0. When it comes to the API – stability concerns chiefly the public API, both the repository format and CLI interface. The latter in restic had breaking change in the version In my opinion, it should be replaced gradually, e.g., by introducing a feature flag first to turn on the new behavior. After some time, we'll finally replace it, but with the ability to use the old behavior by using some feature flag. I know, since the restic is not yet in |
To those that are concerned about this, I have two questions:
|
For the first question: there isn't an actual practical problem, in the sense that the program will work equally whichever the tag. If the website said "this program might break any backups on any update", there wouldn't be any actual practical problem, but you can see why that would be a problem for a user. The problem is that the user is supposed to rely on a program the developer has made clear is not reliable. By having having a 0.x.y version you are saying (quote from https://semver.org/#spec-item-4): "Anything MAY change at any time. The public API SHOULD NOT be considered stable." For the second question: The current text is:
Which I think would be great if you had already released 1.0.0 (the second paragraph talks about changes made after 1.0.0), however, in this situation, it is very misleading. Indeed, if I didn't know about Semantic Versioning, I would think that until 1.0.0 is released (the next major version), no breaking changes will be applied. In reality, nearly none of the rules of SemVer have started to apply, because they only do after 1.0.0. I understand that even in a 0.x.y version, there are efforts to not make breaking changes, so I would change the following: I would explicitly write that the second paragraph only applies after 1.0.0 and I would add another paragraph talking about the efforts made to not break anything during initial development. For example:
I hope this helps understand the point of view :) |
@oscarbenedito Would you like to make a PR with those text changes (in the restic.net repository)? Otherwise I'll do it, either way is fine by me :) |
Sure! I'll do that. |
Closing as it's fixed with restic/restic.net#22, thanks @oscarbenedito! |
Contradicting documentation
Let's explore what the documentation says about this question:
Is the API of Restic
0.10.0
guaranteed to be compatible with the version version0.9.6
?Documentation, page Home paragraph Compatibility says:
This suggests, that you are making a commitment NOT to make any breaking changes while only updating the MINOR version. The answer is YES.
However, just two sentences above documentation says:
And the Semantic Versioning specification says:
This suggests that API can change at any time. The answer is NO.
So what's right? Is the API stable or not?
Proposed solution
If API is currently considered stable, the version should be changed to
1.0.0
as soon as possible, to avoid any confusion.Until then, this needs to be made clearer in the documentation, explicitly mentioning that API is stable from version
0.x
and won't change in version1.0.0
.The text was updated successfully, but these errors were encountered: