-
Notifications
You must be signed in to change notification settings - Fork 299
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
Proposition: switching to semantic versioning #404
Comments
I didn't use semantic versions because I didn't see how to objectively judge the difference between the numbers e.g. patches are objective, but one person's 1.0.X is another person's 0.1.X Another example: you mention "does it have breaking features"? What numeric designator consistently indicates that in "semantic" versioned apps? Are minor version changes never incompatible? Anyways, I'm open to changing it if you recommend it and it won't break Io's releases via the package managers that currently support it. |
To avoid such confusions we could follow this convention: |
@stevedekorte I'm going to do some Io and Eerie job on the weekend and one thing I'd like to do is updating the version in the interpreter (and everywhere else). Besides from the points I'd said in this issue, I'd add to semantic versioning the fact that it is dominating versioning system and using it would make simpler integration with possible libraries and package managers. I suggest to start with Io version 1.0.0. The API is quite stable and it's been a long in development so Io deserves it. Eerie already uses semantic versioning and its version is 0.2.0 now. Are you ok with it? |
Will this cause any issues with existing package systems thinking the newer version is an older version because the numbers are lower? |
Yeah... This is a problem. But while we can fix it saying here and there in README and the docs "use this not that" there's a worse issue with the current versioning system. For example, I'd like to depend on Io. And I don't want any breaking API changes in this dependency and I'm fine with the current feature set or implementation details. With semantic versioning I'd write something like "^1.0" in my package manager's manifest file or something alike. This way I'd get updates on it with all patch releases (1.0.1, 1.0.2, etc.) until Io updates to 1.1.0. And it is a clear intention of a version. I get what I want. And If I'd also like to include new features, for example, or I'm fine with small refactoring I'd write "^1". So the package would be updated until new version with some breaking API changes released. With current versioning system the intentions are unclear. It's unknown which changes a version has: is it a patch, small change or something breaking? Also, we depend on time. We could make a patch release in the next few months, for example, but for a major part of package managers this would look like we did a breaking API change. And things get even worse at scale. For example Io becomes so successful some company considers using it for their microservice. But they can't. Because not only the command, which would work on this microservice, but dependents on this microservice too, can't rely on a specific Io version. They forced continuously update with each new version of Io. Semantic versioning would make Io easier to depend on. |
Good points. I agree :) |
It would be simpler to understand the state of a release with the semantic versioning instead of the current one (does it has breaking changes? new features? or is it a bugfix release?).
The text was updated successfully, but these errors were encountered: