Comment by rswail

Comment by rswail 6 hours ago

2 replies

The original reasoning behind Semver was that it described the changes from the point of view of the consumer of the interface. If the interface didn't change, then the semver didn't change.

So yes, I am arguing it should not be used beyond that.

Horses for courses... semver is about semantic meaning to the consumer of an interface, release versioning is about configuration and SRE, user versioning is about functionality and (for a client app) security.

As for proposing the "One True Way", no, I'm not proposing that, I'm saying that I use 3 different versioning strategies for 3 different use cases.

In a production system that I am involved with, the current production is:

API: v5.0.0 (yes we just introduced major breaking changes, however, we have an endpoint for older semvers)

Release: v2025-10-30 (with release notes saying which API Semvers were available and which versions of the user app)

User app: v3.5.1 (there was a security patch to v3.5)

necovek 5 hours ago

But very similar versioning schemes have been used by different software for a long time before SemVer was formalized as such: again, if you accept any user interface as the interface, vs API interface (or interfaces for developers) as you originally proposed, I have no issue with that.

Eg. GNU coding standards[1] said the following at least 18 years ago:

  You should identify each release with a pair of version numbers, a
  major version and a minor.  We have no objection to using more than
  two numbers, but it is very unlikely that you really need them.
I'd also note that your user app versioning seems to use the same approach.

[1] https://cvs.savannah.gnu.org/viewvc/gnustandards/gnustandard...

  • rswail 5 hours ago

    I don't accept that "any user interface as the interface, vs API interface". API has a specific meaning, it is for "Application Programmers", which implies that it is for developers of other systems/applications that interface with the system.

    What I'm saying is that there are 3 different "users" (actors/use-cases/your-word-of-choice) for a system and each of them need different information about a system that can be expressed in a specific format and implementation of a versioning schema:

    1. Other systems, connecting via a documented API (Semver tells devs when they need to be concerned about changes in a particular release to production).

    In this case, the users (other developers) are specifically concerned with changes in meaning of an interface, including new information, changes in existing formats, or removal of information.

    By definition, this is semantic and Semver provides a schema to support that. Each digit/component of the semver has a specific meaning associated with it.

    2. SRE and operations managing the system in production (a calendar based version tells them when a system was released into production, potentially any hotfixes applied, and what SBOM to consult when operating)

    It doesn't have to be calendar based, the release version is an arbitrary label. As long as the interpretation of that label is clear between the development and operations teams, it is fine.

    Calendar based labelling is usually appropriate for changes to configuration of a system in production.

    3. End users of any UX/UI, noting that some systems do not have end users, only other systems. My example was just one of many different "end user version" schemes. Just look at any iOS apps you have installed and what their latest "release" is.

    The versioning here can be anything that is clear to the users. A financial system might be versioned by the financial year, or the release of tax and other codes on a regular basis.

    Consumer applications might add arbitrary buzzwords like "ai" or "e" or anything else created by the marketing teams.