Email or username:

Password:

Forgot your password?
Niki Tonsky

I propose we replace semantic versioning with pride versioning

Diagram with large number: 2.7.123
First “2” is commented: Proud version. Bump when you are proud of the release
Second “7” is commented: Default version. Just normal/okay releases
Third “123” is commented: Shame version. Bump when fixing things too embarrassing to admit
134 comments
Christian Tietze

@nikitonsky love it, is this post the canonical URL for quoting? :)

Luk

@j_j @nikitonsky yeah, looks very much like how I number releases at work. Still on v2.x.x :(

Adam Millerchip

@j_j the proud version also jumps up to a large round number significantly different from the previous one when the marketing team gets involved, even if there's nothing to be proud of.

Martin Ueding

@nikitonsky
Guess, Chrome, Firefox and Systemd are very proud of every change that they made?

jelte

@martin_ueding @nikitonsky With those in mind I'd like to propose shifting the semantics. From last to first:
3rd number (bugfix release): Default. We fixed an issue or improved a feature slightly.
2nd number (Minor release): Proud. We added Cool New Stuff, and all Cool Existing Stuff still works, just the way you like it!
1st number (Major release): Shame. We couldn't be arsed to make new things compatible with existing stuff. Your plugins, scripts, and linked things no longer work. Good luck.

0xC0DEC0DE07E8

@jelte @martin_ueding @nikitonsky this is just reframing semantic versioning in pride-shame language, and I love it

Jean-Baptiste "JBQ" Quéru

@c0dec0dec0de @jelte @martin_ueding @nikitonsky I had been thinking shame/pride/shame. Major shame is when you knowingly break something, patch shame is when you had unknowingly broken something.

I once had a team at work will into triple-digit major versions. They sometimes broke compatibility several times a day. It was a struggle to convince them how much of an issue that was, and how no amount of monorepo was going to make people happy with them.

0xC0DEC0DE07E8

@jbqueru @jelte @martin_ueding @nikitonsky we have static versions because we hate ourselves, I guess

:neocat__w: kbity...

@jbqueru @c0dec0dec0de @jelte @martin_ueding @nikitonsky I'm proud when my software doesn't need new features anymore (therefore it's finished) and only requires some maintainence once a year or so.

so shame/shame/normal for me

0xC0DEC0DE07E8

@cybertailor is like to make the suggest making the bugfix/patch level in semver humility
And for kbity, I guess minor version is humility
@jbqueru @jelte @martin_ueding @nikitonsky

Martin Ueding

@jbqueru @c0dec0dec0de @jelte @nikitonsky
With a monorepo you can also go without version numbers altogether. Everything is at always at head.

0xC0DEC0DE07E8

@martin_ueding @jbqueru @jelte @nikitonsky this can break down a little at runtime if you’re deploying components in a distributed manner - but you can always embed the VCS reference as a proxy for version in that case.

Martin Ueding

@c0dec0dec0de @jbqueru @jelte @nikitonsky
That's how I've seen it done. No versions, just git hashes.

0xC0DEC0DE07E8

@martin_ueding @jbqueru @jelte @nikitonsky sorry, work with people in a monopod with absolutely no tracking and they just smack themselves in the forehead regularly and go “oh no, these two components were built from different code and couldn’t figure it out because they talk in our unversioned binary interface language! Better not change anything about our process.”

Average Alegreya Afficionado

@jelte @martin_ueding @nikitonsky Well, I had to edit it a little bit to make the text fit better, but I like this version (hehe) better.

Title: Shame Versioning
Diagram with large number: 2.7.123
First “2” is commented: Shame version. We couldn't be arsed to make Cool New Stuff work with Old Stuff. Your plugins and scripts no longer work. Good luck.
Second “7” is commented: Proud version. We added Cool New Stuff, and Old Stuff still works, just the way you like it!
Third “123” is commented: Default version. We fixed an issue or improved a feature.
Diane 🕵

@martin_ueding @nikitonsky

or alternatively they just left off the first two numbers since they will forever be zero.

Jess👾

Ubuntu only becomes proud of their releases every January 1. @martin_ueding @nikitonsky

Martin Ueding

@JessTheUnstill @nikitonsky
Black (Python) also uses these "year.month" versions which surely confuses Poetry because it is a new major version which doesn't automatically get bumped.

cicciofritz

@nikitonsky I hope to never use the third digit of shame :D

Raccoon at TechHub :mastodon:

@cicciofritz @nikitonsky
You will. Everyone does. This is just a thing with software development: you cannot test every use case on every computer in the world. Eventually, someone is going to have a file or process or computer that hits that one function that wasn't made to handle that one thing.

The best you can do is write inherently stable code that checks itself for exceptions and is made to fail gracefully: people are a lot more forgiving of "it said there was an error opening the file and wouldn't open it" than "it crashed without warning or explanation in the middle of my workflow".

The best software developers push stability improvements as part of the efficiency improvements in those small numbers

@cicciofritz @nikitonsky
You will. Everyone does. This is just a thing with software development: you cannot test every use case on every computer in the world. Eventually, someone is going to have a file or process or computer that hits that one function that wasn't made to handle that one thing.

The best you can do is write inherently stable code that checks itself for exceptions and is made to fail gracefully: people are a lot more forgiving of "it said there was an error opening the file and...

cicciofritz

@Raccoon
oh sure, I actually have a lot of "shame versions" in my curriculum. But till now I haven't reached the "hundreds" of fix before increasing the default version. I know I will, I hope not, but I know I will :)
@nikitonsky

hazelnot :yell:

@nikitonsky isn't this how it already works for most things

Ivy :fire_trans:

@hazelnot @nikitonsky I honestly have no idea how versioning works and just assumed this is how it works lmfao

Nemo_bis 🌈

@hazelnot Yes. The most devastating breaking changes are typically in a "patch" release.

l'empathie mécanique

@nikitonsky And compatible versioning with eaks versioning:
x.0 - [0] versions since API breakage, x breaks so far
1.y - [y] versions since API breakage

aburka 🫣

@nikitonsky how about the metric versioning system?

X.Y.Z

Rules:
- Start at 0.0.0
- Increment Z when you tag a release
- When Z reaches 9, the next version is X.(Y+1).0
- When Y and Z both reach 9, the next version is (X+1).0.0

That's it! Always 10 releases between minor versions and 100 releases between major versions. None of the confusing counting methods of imperial versioning. What could be simpler?

draNgNon has VOTED

@aburka @nikitonsky

Year and build number. That's what infinite kind uses iirc.

Your metric proposal is bad. I'm sorry, I don't like to say that on a non work discussion. It means there will be huge pressure against doing patch releases from marketing folks. The resulting conversations can be... High energy.

Which is why I boosted the spot-on original post

Dominik

@aburka @nikitonsky Nah, most system work on the assumption that a major version is incompatible. So while it's more or less safe to update to latest minor and patch, major version upgrades don't happen that often.

Tyrion 🐧🏴‍☠️

@nikitonsky

I've added an extra one at the end, for extra shame.

jsled

@TyrionTargaryen @nikitonsky That's why Big Companies use 4+ schemes, indeed.

Phil Ashby :marmite: 🍵

@jsled @TyrionTargaryen @nikitonsky Heh, came here to mention the 4th digit, sometimes extra shame, often 'effort to create shame' (build numbers) 👀

Raccoon at TechHub :mastodon:

@nikitonsky
This is a really good way to explain it outside of "major addition"."minor feature"."bugfix"

Jack Linke 🦄

@nikitonsky Exciting news everyone!

Release 0.0.6853 is out. Upgrade today (or don't).

enot

@nikitonsky new version scheme for all my projects

Darth Hideout 🏳️‍🌈

@nikitonsky

I worked for a software company in the 90s/around the millennium that shipped "point" releases, not "patch" releases, because the word "patch" connotes a problem.

#truestory

Rachel Greenham

@nikitonsky insta-coding this into my current project's version class. i'll use this post as a credit url until you get a better one ;-)

DeepBlue V7.X

@nikitonsky@mastodon.online Oh, that's why all my projects are still 0 as the first segment!

Richard W. Woodley NO THREADS 🇨🇦🌹🚴‍♂️📷 🗺️

@nikitonsky

Or this interpretation

- Enough changes/upgrades that you can justify it being a paid upgrade
- Significant things that should have been included/fixed in the current version, free upgrade
- Changes that 99% of users won't notice

Szymon Bęczkowski

@nikitonsky Current #XeTeX is 0.999992. That is 999992 shameful releases.

dxpack

@owiecc @nikitonsky … or the 2nd version of the 5th really-final-I-mean-it-this-time pre v1 release?

Szymon Sokół 🇵🇱🇪🇺🇺🇦

@nikitonsky "My faith! For more than forty years I have been speaking prose while knowing nothing of it, and I am the most obliged person in the world to you for telling me so."

Steven Deobald

@nikitonsky all my software will be versioned the way it was when i was in university, though

0.0.0.52317

Ripp_

@nikitonsky might unironically start using this

Eskuero

@nikitonsky The version number should be a single integer that gets bumped by one on every change :abloblamp:

Alan Langford

@nikitonsky With the invisible fourth number, the "this was so embarrassing you need to diff the code to discover the fix" element. Also useful for fixing typos in comments.

bison ✅

@nikitonsky a git-repo will come soon ^^" pridever.org/
also: can I use your image?

UPDATE: git repo: github.com/bison--/pridever

:neocat__w: kbity...

@bison @nikitonsky can you add pride flags to this website? for reasons

GolfNovemberUniform

@nikitonsky now that is the kind of definition of pride we need to use and support. Very nice.

LiquidParasyte

@nikitonsky I just assumed we already did this :drgn_woozy:

Etam

@nikitonsky Semantic versioning is essential for libraries exposing APIs. But apps can use any versioning and this is what usually happens anyway.

Pxl Phile

@nikitonsky Nanoversions be like: uwu we're rly sowwy 🥹👉🏾👈🏾

Li

@nikitonsky nah automatically generate the version number based on total commits since the last build,

sleepy lesbian
@nikitonsky What do you mean replace, this is already how it works
Solarbird :flag_cascadia:

@nikitonsky we used to have letters

x.y[l]

x - major new feature(s)

y - minor new feature(s) (or refinement of major(s))

l - fuckups, which unofficially were:

a: again
b: bloody hell
c: crap
d: godt-DAMMIT
f: fucking hell
g: GODT-dammit
h: holy shit this release
i: (unused)
j: just kill me

pretty sure j was as far as we ever got xD

mleku
i prefer datestamps

semver is stupid because to have semantics it would need to have a decoder list to tag each feature and its version state lol or whatever

i noticed this nonsense like in the meme when i was reading the flatbuffers repo on github... they just use a lexically sortable date, like 24.12.21 and if you drop more than one version tag you put a .1, .2 etc, and i'm adopting this policy in my own work now

keeping the first one though, that is about API stability, so my versions look like v0.24.12.21 now

to be honest, i have a repo that got bumped to a 1, the whole point of the version zero is the API is still unstable and there's no promises yet
i prefer datestamps

semver is stupid because to have semantics it would need to have a decoder list to tag each feature and its version state lol or whatever
Weasel

@nikitonsky 2.7.123b - where the "b" means "please forget the previous release ever happened and pretend this is the one i gave you instead"

Alysson Bruno

@nikitonsky Today and ever will be my default version semantic. Thanks.

Schroedinger

@nikitonsky I am not sure I would ever update the first part.

Import Antifascist

@SteveClough @nikitonsky 0.3.83625 would be a typical number for me in this system.

Botahamec

@nikitonsky This is what I'm often tempted to use, but I always have to stop myself.

divVerent

@nikitonsky@mastodon.online Almost what I did for AAAAXY. Except that I also bump the last number for mere changes to upstream dependencies that should not impact anything.

kriφm :unverified:

@nikitonsky for libraries, : "Proud version" with lot of breaking changes :blobsob:

Joshua M. Clulow

@nikitonsky It occurs to me that depending on your feelings about backwards compatibility it could actually be SHAME.pride.shame

Handler Skyler

@nikitonsky I'm like 95% sure that is the current system. "Minor fixes" "Fixes"

aburka 🫣

@vwbusguy @nikitonsky I mean seriously. This is how Linux kernel versioning works, isn't it?

Stylus

@aburka not exactly? The leading number is incremented, and the middle number set to 0, when "the middle number is too big" (in Linus's sole opinion). Also I think it turned out there were problems if the last number exceeded 255, but maybe that was fixed.

zrzz

@stylus Another reason we get more frequent major version bumps on the kernel nowadays is that 2.* lasted so long that many tools became dependent on checking for majorver == 2. When 3.* first came out we had to internally patch 3.x to 2.6.4x for a few months to keep things working until everything could be fixed. Lessons were learned..

Michael Baudis

@nikitonsky How about “don’t ask, don’t tell” versions, the ones where you count up internally but don’t go public?

Destiny Hailstorm

@nikitonsky@mastodon.online This is literally how my company does product versioning lmao

Schaf

@nikitonsky too bad Mozilla stuck to the third one

indigo
I think this would be the most humane way to version software. You might ask, yeah but what about API's and contracts? My very strange opinion on this is that, if project developers empathize with people using and operating their software, the API contract problem is solved and won't have to be reflected in the version number.
dey

@nikitonsky counter proposition for x.y.z:

X: i'll break all the things you're used to (and I don't give a shit)
Y: i'll make it better
Z: i'll make it stronger

entronid

@nikitonsky all my code will forever be stuck at 0.x.x

ansible42

@nikitonsky left my current company two years ago, and was convinced to come back last month.

I came back to the last revision I released being the gold standard despite the big number going up four times.

__Miguel_

@nikitonsky
So, does that mean if you're not proud of a release, you should decrement the first digit?

I see *some* issues arising from negative version numbers... :neocat_think: ::P

Christian Rickert

@nikitonsky

2. - the number of rewrites
7. - the number of failed fixes
123 - the number of broken features

Sr. Estegosaurio 🦕

@nikitonsky I only feel shame because I can never drive an idea into the state that it needs versioning…

lucamason

@nikitonsky@mastodon.onlineGet a $750 Roblox Gift Card!
New event, for our players all over the world we have launched some
Roblox gift cards for 10 hours only, , Just Submit Your E-mail & Zip Code, Good luck
👇👇👇👇👇👇👇👇
Click here: mdshamiul.com/Robloxgiftcardco

Nath

@nikitonsky At first I thought it was a proposal for a versioning system for your gender identity.

enoch_exe_inc

@nikitonsky Or mathematical constant reasoning. LaTeX versions are just asymptotically approach the game of π; the current version of LaTeX is 3.141592653. Likewise, Metafont versions approach e, with the current version being 2.7182818.

I have adopted this idiosyncratic version numbering system for a number of non serious projects mainly for my own amusement.

ity

@nikitonsky wait is that *not* what semver means ?

mj

@nikitonsky @george saving this to show my team. Love it.

Sid Sun

@nikitonsky can we have both? v<pride version >-<semantic version>-<final/pink_promise_final/>-<(optional) curse>

DJ Cthulhu

@nikitonsky Versioning is for idiots. Just write it bug free in the first place. Then stop adding pointless features.

Fabio

@nikitonsky isn’t this already exactly what’s happening? Hehe

Тр3тий Сергеевич

@nikitonsky This is the most comprehensive non-IT explanation for semantic versioning if I ever saw one.

Jumile

@nikitonsky I wonder what this says about PuTTY. 😄

It's been around for 25 years, gets regular updates, and is currently at 0.82 (updated last month). I always assumed Simon was trolling the conventional semantic system in his own way.

Scaalp

@nikitonsky
Really nice idea and point of view. Good for self-rewards (?). I'll share this to my team once back from vacation.
@nixCraft

Ela - TechnicalOtter

@nikitonsky The problem here is anything I make will be 1.0.7439 because I hate my projects after 1.0...

Bracken :verified:

@nikitonsky Semantic version can just drop the major number. If you ever increment that you've actually created a fork.

Bentok :godot:

@nikitonsky

The most scrupulous devs will be on 0.0.100, and the most prideful being on version 100.0.0 - perhaps both with comparable quality to their products. 😆

gunstick

@nikitonsky I think this has already happened for most open source projects.

Mathias af Jochnick

@nikitonsky not joking: this has been my strategy since i started making programs.

Go Up