I prefer the SemVer Major.Minor.Patch
approach so I can tell at a glance if the update breaks compatibility or is just bug fixes. Technically the Patch
part can be any number as long as it increases each update of that same Minor
version, so one could write the versions as AA.BB.YYMMXX
where AA
is the Major
version, BB
is the Minor
, YY
is the two digit year, MM
is the month, and XX
is just an incrementing number.
I think this approach has the best of both systems.
I would never trust a dev defined SemVer as more than a relatively useless indicator of compatibility. I make sure there’s proper unit and integration testing to prevent external dependencies breaking production. If it’s a major dependency I check the release notes every version.
That works for libraries, but applications? What is the interface you’re looking at for backwards compatibility? Towards websites, towards workflows, towards CLI arguments, towards ABI, or something else?
There’s also the disadvantage of being perceived as moving slower than the competition. If Chrome is at v162 and you’re at v3, people perceive the version numbers to reflect the quality and development. Shouldn’t be the case, but it is.
Yes, especially for applications, and especially for Firefox. The Major version in SemVer increases with any interface change public or private (or it’s supposed to). This is important to communicate to users who rely on any 3rd party plugins, or who need to open files created with prior versions of the software, including configuration profiles.
Using Firefox as an example, I use the Firefox UI Fix. If Firefox changes their browser userchrome/layout, this mod breaks. But it is nice that I can tell at a glance when a new Minor version or Patch version releases that it contains no changes that break this mod. Any breaking changes in these versions are bugs in Firefox.
As for higher number versioning. I’m not advocating that Firefox restarts their Major versioning number back to 0. They could skip Major versions and call the next Major version 200 for all I care. The only thing my comment advocated for was including the date in the patch version number.
I think you have a misconception about what Semver is. No, changing private interfaces does NOT increase major version - why do you think that Semver specifies that you must declare a public API? This would also mean any bugfixes would result in major bumps, but they don’t, because not every interface change is treated equally.
You also skipped the actual question. What are all of Firefoxes interfaces? Is user flow itself an interface?
If Chrome is at v162 and you’re at v3, people perceive the version numbers to reflect the quality and development.
I don’t think it is the case. Ask some random person what version their browser is and they probably won’t even know how to check.
It doesn’t matter for the vast majority of people, the only people who care are power users. And what do power users appreciate? Clear communication. If there’s a major UI change or something, bump the major version. If there’s a new feature, bump the minor version. If it’s just bug fixes, bump the patch version. Or even simpler, since Firefox has the ESR build, bump the major version whenever an ESR build is cut, bump the minor version every regular release (4 weeks?), and bump the patch version every patch release like we do now. That way I know how much the ESR build has deviated from the regular build, which is valuable information (just look at the minor version for the latest Firefox).
How you manage versions doesn’t matter to the vast majority of people, so it should be tuned for the minority who actually kind of care, so make it mean something. A year would be fine and useful, a number that increases w/ the ESR refresh would be useful, an ever-increasing number isn’t useful. Pick one of the useful options…