I think we can go around and around on ideas for versions.  However,
given that we're stuck with a bunch of legacy decisions, here is my
attempt at proposing a (hopefully) simple, pragmatic standard that
should work pretty well with what we've already got today.

(We're programmers -- this just shouldn't be so hard!)

RECOMMENDATION FOR A VERSION NUMBER STANDARD

A "Version Number" may be expressed in one of two forms:

(a) A tuple of at least three integers, prefixed with a leading "v".
Tuples may be separated by either periods (".") or underscores ("_").
Examples: "v1.2.3", "v3.14.0", "v1.2.3.4", "v1.2.3_4".

(b) A non-negative decimal number.  The number may contain one or more
underscores as per the rules for numeric literals.

Form (a) is recommended for all new version numbers.  Form (b) is
allowed for compatibility with legacy version numbering.

The presence of an underscore in either (a) or (b) indicates a
"development" release.  The use of underscores will eventually be
deprecated when other means for marking a "development" release are
well established.

For version comparison, Version Numbers of type (b) are converted to
type (a) by removing underscores and converting according to the
3-digit Perl version number convention.  Example:  "1.02" is 1.020 and
becomes "v1.20.0", "1.02_03" is 1.020300 and becomes "v1.20.300".

Modules that are changing from type (b) to type (a) must convert the
current version number according to the convention described above
before incrementing a component of the tuple.

Any version that does not appear in the form of type (a) or type (b)
is considered invalid.  The behavior of modules encountering invalid
versions is undefined.

Reply via email to