[asdf-devel] In defense of ASDF & Semantic versioning

Faré fahree at gmail.com
Thu Nov 21 21:15:14 UTC 2013


On Thu, Nov 21, 2013 at 3:56 PM, Anton Vodonosov <avodonosov at yandex.ru> wrote:
> Fare, I do not understand how you think about versioning.
>
> Why do you say semantic versioning is for binary libraries?
>
Because that's what it was designed for: binary releases of C
libraries, such as /usr/lib/libmagic.1.0.0

The version string identifies the version of the API, not the version
of the source code. It is for use by the compiler, but by the linker.
By the time you link compiled C code, there can be no adaptation of
code API, it's all hardwired. Therefore, you need strict binary
compatibility, and that's what the linker version system tries to
enforce.

When you compile, you can detect API discrepancy, etc. In the C world,
you do that with autoconf, #ifdef, etc. A same piece of source code
will happily compile against a wide range of versions of the C
library, and usually doesn't check version numbers, only the
availability of given functions and CPP macros. Most of my C programs
can compile unmodified against linux libc4, libc5, libc6 and whichever
BSD libc, etc. Once compiled, though, the code can only link against
an ABI-compatible version of its dependencies.

The situation with CL is much more like the situation with C source
code: you load the code as either source or precompiled fasls, then
you introspect for functions and macros if needed, and compile your
own code. At no point is there distribution of precompiled provider
libraries that you load together precompiled consumer libraries that
were compiled with maybe different versions of the provider libraries.
Therefore, we don't care at all about linker versions.

> I even suppose you mean something different than
> me, Robert and others. Because semantic versioning
> as described at http://semver.org/ focuses on distinction
> between API compatible changes in libraries, and changes
> which break API.
>
This framework just isn't meaningful in the context of Lisp code, or
of any source code based code release system. And even in the context
of precompiled code release system, it is primitive and stupid as
compared to the one and only real solution, which is NixOS.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Pacifism is a shifty doctrine under which a man accepts the benefits of the
social group without being willing to pay — and claims a halo for his
dishonesty. — Robert Heinlein



More information about the asdf-devel mailing list