The meaning is this that versions change according to the changes in semantics of the code. A any minor change indicated by changing the lowest (least significant) number, any change in the implementation result in the change of the middle number of, and incompatible changes in API results in an increment of the most significant number.
Moreover, a package system of the language (and a build system) must explicitly specify versions everywhere for any package used.
Declarative DSL could include
== exact version,
>= no-less-than version, etc.