This https://youtu.be/oyLBGkS5ICk?si=BlQUw9GtV3tRrhsQ&t=4099 thing changes the world. It deserves a book. It deserves a PhD program.
https://github.com/dask/community/issues/100#issuecomment-704531301
https://jacobtomlinson.dev/posts/2023/sometimes-i-regret-using-calver/
> In my opinion, CalVer signals to your community that anything could happen at any time and that you have no interest in the effect that has on your users. Well, quite the opposite. I stopped using semver because I don't belive libraries should intentionally introduce breaking changes at all. Semver is just a way of communicating when you're breaking people. The difference between minor and patch has always felt arbitrary to me. In a project that takes backwards compatible seriously, a higher version number should indicate a more mature, stable and possibly more feature rich version.
Absolutely incredible stuff. I went into that talk a big fan of semantic versioning, came out completely disillusioned. Never used it since. I wish more people had this mindset.
Yeah. It adds relationship to what is so often disconnected and insular.
So then what are the version numbers even for? Even Clojure has three version segments
Does this imply that Clojure isn't semver'd?
Not exactly sure, but my impression is that Clojure is more or less semver, but you'll never see a 2.x. Most other libs have a version number that includes a number that increases for every release, and one that indicates the number of commits, which gives you some idea of the relative diff between two commits.
Oh that's interesting
Personally I just use dates as versions on all my libraries, e.g. 2023.09.04.
Ah, calver eh
š
Right
If we abandon the idea of semver and promise never to break anything, then the only real constraint on the number is that it increases
Yep
It's then up to the developer to decide what that increase means. So... dates or commit counts or what-have-you
Why not just a single number then?
Version 1! Version 2!
It means "new version" š can still have a changelog
Well, maven makes some assumptions about version numbers. Not sure if it's necessary to use multiple parts.
Ah
But you could use a single number. Even though it's not semver you could still communicate something with the number though.
Like the number of commits, which can give a quick impression of the amount of change/additions
I guess it's also a little bit of optics to it. People have expectations.
Without semver then there's no difference between the major and minor either
No
Honestly calver is tempting
I like it š
> I went into that talk a big fan of semantic versioning, came out completely disillusioned. My interest is piqued š¤
The continuity is everything. Itās relationship. It makes coding a function of relationship instead of relationship a function of coding.
Can we use āsemantic versioningā? Sure ā we just have to define what it means. āWeā here means the people releasing the code. We get tripped up by the ambiguities inherent in using someone elseās definitions. What, pray tell, is the meaning of ālifeā? Versioning is naming. Naming carries https://en.wikipedia.org/wiki/Semantics. Thus, all versioning is semantic ā numbers, dots, characters, whatever. The ideal to which https://en.wikipedia.org/wiki/Software_versioning#Semantic_versioning aspires is great ā and always industrially unfulfilled. It canāt be fulfilled at the level of an industry. > Other schemes impart meaning on individual sequences: > major.minor[.build[.revision]] (example: 1.2.12.102) > major.minor[.maintenance[.build]] (example: 1.4.3.5249) > Again, in these examples, the definition of what constitutes a āmajorā as opposed to a āminorā change is entirely subjective and up to the author, as is what defines a ābuildā, or how a ārevisionā differs from a āminorā change. We canāt get away from subjectivity. Itās not possible and arguably ridiculous. Our responsibility is to be clear about what we are doing, right here, right now. We can save time and energy by skipping appeals to The Truth. No one has time to haggle over the semantics of semantic (or any other) versioning. A release isnāt its name. Itās code. Itās a set of promises and an attempt to fulfill them. Keeping those commitments is good for everyone, developer and community alike. If one isnāt serious about the promises, donāt release. Rich is right: thereās only breakage or growth. Obviously, there are times when the code has its shoestrings tied together. That is, the code has internal inconsistencies, promises that arenāt kept when the code is shipped. The breaking code is in the release. It breaks itself. Itās a bug. It happens. In those situations, the developer has to be even more sensitive to the needs of those who rely on the parts of the code that do work. Hard situations are hard situations. There is no standardized way to handle them because each is as unique as the profile of the promises made, kept, the extent to which those promises are relied upon, and the impact of those vulnerabilities. ⢠How are people affected? ⢠How many are affected? ⢠How seriously are they affected? ⢠How well does the developer understand the how the community uses the code? ⢠How well does the community communicate with the developer? ⢠How well does the community communicate with itself? Many other questions may be situationally and systemically appropriate ā and none of them are easy to countenance. Any type of naming is an attempt to communicate something about the nature and number of the promises made. How versions are named or numbered makes no difference beyond the effectiveness of the communication. Thereās no place to hide. No naming syntax can compensate for broken promises or make broken promises somehow unbroken. Itās a matter of what can be done with the code and how it is being used. The name of the release means what the developer makes it mean through what he/she/they delivers. Itās on the developer to communicate in all things, including what release names mean. Period. Itās about the relationship. Rich points out that the etymology of āchangeā is rooted in exchange. Yes. Relationship. Weāre talking about our lives here. For me, ābreaking peopleā (thanks @christian767) isnāt as fun as watching them grow ā and breakage happens. Being human, parts of me are broken and that brokenness leaks into my code (and my Slack posts). May I be careful, productive, and clean up my messes responsibly. May we be better versions of ourselves through meaningful, deliberate service to our communities. Letās grow together.