I propose embracing a common versioning scheme across all Logging Services
projects; log4j, log4cxx, etc. This will make it clear for maintainers
which version number to choose for the upcoming release, and ease for users
to what to expect from each release. If we have a consensus, we can
document this in logging.apache.org.

I propose adhering to the semantic versioning <https://semver.org/> (aka,
"semver"), plus some extra constraints for simplification. For one, judging
from the content in archive.apache.org/dist/logging, all our recent
releases follow the `major.minor.patch` scheme, which is in line with
semver. Though I suggest augmenting semver from two aspects.

*Limit `patch` pattern*

The definition of `patch` is pretty liberal. For instance, this is a valid
semver: `1.0.0-beta+exp.sha.5114f85`. Maybe we should limit the `patch` to
match the `[0-9]+(-(alpha|beta)[1-9]+)?` That is, only the following will
be valid: `1.2.3`, `1.2.3-alpha4`, `1.2.3-beta4`, etc.

*Refine semantics*

Semver has the following official definition:

*Given a version number `MAJOR.MINOR.PATCH`, increment the:*


   - *MAJOR version when you make incompatible API changes*
      - *MINOR version when you add functionality in a backward compatible
      manner*
      - *PATCH version when you make backward compatible bug fixes*

I think we all agree on what warrants a major version bump. The definition
of what constitutes an API, etc. are all open to interpretation, but we
have a common sense of it in the PMC.

We mostly have a problem whether the next release needs a minor or patch
version bump. I propose to refine the official semantics as follows:

Are we making a release to *only* address a set of particular issues? That
is, does the following hold?

[next release] = [last release] + [fix1] + [fix2] + ... + [fixN]

If so, this needs a patch version bump. Otherwise, this is a minor version
bump.

Reply via email to