Idk how you'd be able to tell anything about a commit from its hash tbh.
You're right though, I primarily create/work on SaaS products and this versioning is perfect for it.
Simply moving from YEAR.MONTH.DAY.CHANGE_ID to YEAR.MONTH.DAY.UPDATE.CHANGE_ID, with UPDATE being a mandatory monotonically-increasing integer, would make this scheme more attractive to a wider variety of users.
I don't see what is here to misunderstand.
If someone wants to take just a subset of the changes between 2 and 3 (say just one fix) and backport it over version 1, they are on their own.
That's a downstream problem that the project doesn't have to cater to in its versioning scheme. The project issued a bugfix, and that bugfix was applied when version 2 was superseded with 3; end of story.
Another example is python 2 and python 3, where python 2 was getting updates form 5+ years after python 3 released.
Two completely independently developed C compilers, or independent implementations of Common Lisp are much more compatible with each other than are Python 2 and Python 3.
They could as well have different names (think Perl vs. Rakudo).
Racket is more compatible with Scheme than Python 3 is with Python 2, yet has a different name, for good reasons.
Both Python 2 and Python 3 could respectively use a simple versioning numbering scheme. Python 3 version 1, version 2, version 3, ...
- Does not support multiple release tracks. What if you have 'version 1' and 'version 2' with both receiving updates?
- Cannot visually guarantee that any version is greater than, less than, or equal to another. If you're using git, mercurial, or any other VCS with hash-based commit IDs, how can a user tell which release for a particular day is the latest?
This is probably fine for SaaS stuff where you only support one version at a time and the version number is more important to you than your users.