The dictatorship of versioning

Faré fahree at
Tue Jun 16 13:05:11 UTC 2015

On Tue, Jun 16, 2015 at 7:39 AM, Pascal J. Bourguignon
<pjb at> wrote:
> Didier Verna <didier at> writes:
>>   Hi,
>> in general, I don't like the way ASDF tries to force you to comply with
>> its own design choices and policy. This is especially true for component
>> versioning. ASDF complains that it doesn't like my version numbers
>> (which, in fact, are not only numbers ;-), but I'm not ready to give up
>> on them. They're much more informative than ASDF's simplistic 1.2.3.
> Alternatively, we could have:
> (defsystem :foo
>    :version-major 1
>    :version-minor 0
>    :version-release 42
>    :human-readable-version-string "1.0.gamma.XLII/pescadero:whasaaaaa")
> or:
> (defsystem :foo
>    :version (1 0 42)
>    :human-readable-version-string "1.0.gamma.XLII/pescadero:whasaaaaa")
First, the restriction on version format comes straight out of ASDF 1,
that itself lifted it from Linux .so "semantic versioning" — even to
the point of declaring that a major number change makes things not
compatible anymore, which was reverted in ASDF 3 for going against
practice in the CL community in addition to breaking version
compatibility for ASDF itself.

What I did with ASDF 2 then ASDF 3 was "just" to fix bugs, tweak the
semantics as above, and make the restrictions explicit rather than
fail silently when they aren't followed.

One constraint of ASDF 1 was to remain minimal, which explains the
design. Let's just say that ASDF 3 was based on a different idea of
what the spec was for ASDF to be minimal at implementing, and ended up
10 times bigger than ASDF 1. Would implementing, e.g. Debian or RedHat
version comparison be possible? Sure, but, having implemented them (in
a different project, see e.g. in lisp my rpm package), I can tell they
are butt-ugly and not necessarily better than ASDF's algorithm in
addition to not being as minimal.

I kind of like the general idea of Pascal's proposal: separate a
human-readable-version-string from an asdf-comparable-version-string.
The exact names are to be determined. Maybe, by analogy with name and
long-name, description and long-description, we could make that
version (used by ASDF) and long-version (used by humans).

In any case, this change won't happen before 3.2 (at least) and using
it will have to be conditional on #+asdf3.2 until it becomes
ubiquitous (estimated delay: 2 years after release). In the meantime,
all code has to make do with what ASDF can handle, or do without asdf
version at all (not recommended).

NB: To define new methods, you'd have to define a new system class
first, with methods on it, in a defsystem-depends-on.

> __Pascal Bourguignon__       
> “The factory of the future will have only two employees, a man and a
> dog. The man will be there to feed the dog. The dog will be there to
> keep the man from touching the equipment.” -- Carl Bass CEO Autodesk
This is a recycled old joke about airplane cockpits. I don't know how
things go for factories, but in the case of airplanes, it also refers
to the effects of regulations that force upon everyone antiquated
unsafe technologies (i.e. human pilots) in the name of "safety" and
actually as the result of protectionist lobbying.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics•
Solipsism is a lonely place. Psychopaths crave love, but can't get no
satisfaction: even elected by millions, it's still non-people voting for them.

More information about the asdf-devel mailing list