Mark Versioning


Semantic Versioning is better than most Versioning systems today, but because it means different things to different people, it remains more of a Social Versioning system than a semantic one.

I propose a new Versioning Scheme named Mark Versioning, which aims to separate and preserve both social and semantic aspects of versioning.

A Mark is a specific version of a software. This number is decided by social consensus, and represents major iterations / changes to a software. It starts at 0 and is incremented by 1 whenever appropriate.

A Revision is similar to a Mark, but it represents a strict change in API. This may be a breaking or a no breaking change. Reversions start at 0 for each mark, and are incremented by one whenever an API change is detected. This should be done automatically by package management software.

A Hash is the particular SHA-3 hash (in hex form, truncated to 8 characters) of a the source code of a software version. A Revision may have multiple different hashes. Alternatively, one can start from 0 with each Revision and automatically increment by 1 with each change. This should be done automatically.

Mark Versioning can be written out in two forms: long and short.

Long form:

Mark <X> Revision <Y> Hash <zzzzzzzz>

Short form:

m<X>r<Y>#<zzzzzzzz>

Here are some examples:

Mark 3 Revision 16 Hash ae473ff6

Same in short form:

m3r16#ae473ff6

Optionally, one can leave off Hash or Hash and Revision (if Hash is present, Revision must be present):

Mark 0
Mark 0 Revision 0
Mark 0 Revision 0 Hash 0

m0
m0r0
m0r0#0

That's all.