gratitude

Chip 2023-08-29T19:52:52.176309Z

This https://youtu.be/oyLBGkS5ICk?si=BlQUw9GtV3tRrhsQ&t=4099 thing changes the world. It deserves a book. It deserves a PhD program.

9
Chip 2023-09-04T12:16:29.528699Z

cjohansen 2023-09-05T05:30:22.244839Z

> 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.

šŸ‘ 1
cjohansen 2023-08-29T20:09:33.701159Z

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.

Chip 2023-08-29T20:11:35.473419Z

Yeah. It adds relationship to what is so often disconnected and insular.

Colin (fosskers) 2023-09-04T02:07:46.173879Z

So then what are the version numbers even for? Even Clojure has three version segments

Colin (fosskers) 2023-09-04T02:08:12.519239Z

Does this imply that Clojure isn't semver'd?

cjohansen 2023-09-04T04:28:55.571799Z

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.

Colin (fosskers) 2023-09-04T04:29:38.148899Z

Oh that's interesting

cjohansen 2023-09-04T04:29:42.554699Z

Personally I just use dates as versions on all my libraries, e.g. 2023.09.04.

Colin (fosskers) 2023-09-04T04:29:50.958199Z

Ah, calver eh

cjohansen 2023-09-04T04:30:04.571359Z

šŸ˜‚

cjohansen 2023-09-04T04:30:07.083949Z

Right

Colin (fosskers) 2023-09-04T04:30:51.033789Z

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

cjohansen 2023-09-04T04:31:00.548339Z

Yep

Colin (fosskers) 2023-09-04T04:31:11.010039Z

It's then up to the developer to decide what that increase means. So... dates or commit counts or what-have-you

Colin (fosskers) 2023-09-04T04:31:36.639399Z

Why not just a single number then?

Colin (fosskers) 2023-09-04T04:31:42.000539Z

Version 1! Version 2!

cjohansen 2023-09-04T04:31:44.910879Z

It means "new version" šŸ˜… can still have a changelog

cjohansen 2023-09-04T04:32:20.658209Z

Well, maven makes some assumptions about version numbers. Not sure if it's necessary to use multiple parts.

Colin (fosskers) 2023-09-04T04:32:34.070679Z

Ah

cjohansen 2023-09-04T04:32:58.629879Z

But you could use a single number. Even though it's not semver you could still communicate something with the number though.

cjohansen 2023-09-04T04:33:31.677749Z

Like the number of commits, which can give a quick impression of the amount of change/additions

cjohansen 2023-09-04T04:33:50.841109Z

I guess it's also a little bit of optics to it. People have expectations.

Colin (fosskers) 2023-09-04T04:34:18.524069Z

Without semver then there's no difference between the major and minor either

cjohansen 2023-09-04T04:34:35.272669Z

No

Colin (fosskers) 2023-09-04T04:34:35.866719Z

Honestly calver is tempting

cjohansen 2023-09-04T04:35:00.764529Z

I like it 😊

Colin (fosskers) 2023-09-01T09:48:18.470279Z

> I went into that talk a big fan of semantic versioning, came out completely disillusioned. My interest is piqued šŸ¤”

Chip 2023-09-01T15:40:49.993399Z

The continuity is everything. It’s relationship. It makes coding a function of relationship instead of relationship a function of coding.

Chip 2023-09-05T17:17:30.254719Z

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.