Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-19 Thread Anton Vodonosov
I have posted the problem description together
with possible solutions to the moptilities and closer-mop projects:
https://github.com/gwkkwg/moptilities/issues/1
http://sourceforge.net/p/closer/mailman/message/31656992/



Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-18 Thread Anton Vodonosov
OK, so we clarified what happened with :version dependencies semantics.

Now we can think what should we do with the failures, if we should.

Note, the load failures do not happen with the most
recent version of ASDF. Only with elder versions
(which are still deployed together some Lisps,
including the last releases of ECL, CLISP, CCL).

The ASDf systems depending on moptilities:
"hu.dwim.perec" "hu.dwim.perec+hu.dwim.quasi-quote.xml"
"hu.dwim.perec+iolib" "hu.dwim.perec+swank" "hu.dwim.perec.all"
"hu.dwim.perec.oracle" "hu.dwim.perec.postgresql" "hu.dwim.perec.sqlite"
"metacopy" "metacopy-test" "metacopy-test-with-contextl" 
"metacopy-with-contextl"
"metatilities" "metatilities-test" "moptilities-test" "simple-blog" "tinaa"
"tinaa-test" "weblocks" "weblocks-clsql-demo" "weblocks-demo" 
"weblocks-demo-popover"
"weblocks-elephant" "weblocks-elephant-demo" "weblocks-memory" 
"weblocks-postmodern"
"weblocks-prevalence" "weblocks-s11" "weblocks-store-test" "weblocks-stores"
"weblocks-test" "weblocks-tree-widget" "weblocks-util" "weblocks-utils"
"weblocks-yarek" "weblocks-yui"

I wonder, what exactly the moptilities author meant when declared
:depends-on ((:version :closer-mop "0.55")))

- did he mean moptilities should only load with closer-mop 0.55?
- or he meant only with closer-mop version >= 0.55?
- or he meant moptiltiies should only load with closer-mop
  version "API compatible with 0.55"
- or he didn't want to affect the asfd:load-op at all
  and just meant the declaration as a hint for the user?

I must say I am surprised ASDF implements some
dependency version management. It is not a widely known feature.

I have even checked ASDF manual from 2009-08
http://web.archive.org/web/20090801104323/http://common-lisp.net/project/asdf/manual.html
, 7 month after moptilities introduced the :version dependency.

The manual says:
"the :version, :author, description and other [defsystem] fields are not 
required but they provide documentation and information for people that want to 
use this system.
It also says in the section about asdf:operate:
"If a version argument is supplied, then operate also ensures that the system 
found satisfies it using the version-satisfies method."

>From some other places in the manual we can even guess how version-satisfies 
>work.

Still, I think it was too much to expect from closer-mop to encode
API compatibility information in the version identifier.
Note also, in 2009 ASDF didn't consider version "0.6" as satisfying
requirement for "0.55":
http://lists.common-lisp.net/pipermail/moptilities-devel/2009-December/date.html

So, I think maybe the best fix is to remove :version from the
dependency specification in metatilities.asd

Also, as we speak about versioning, I have been trying to use semantic
versioning as described at http://semver.org/ and I don't think it is
a silver bullet - it doesn't solve all problems.

Best regards,
- Anton



Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-18 Thread Pascal Costanza


> On 18 Nov 2013, at 16:45, Faré  wrote:
> 
> On Mon, Nov 18, 2013 at 10:21 AM, Pascal Costanza  wrote:
>>> ASDF is not going to hard code an
>>> exception for your library.
>> 
>> Closer to MOP already existed before asdf imposed anything on version 
>> numbers, so asdf has to provide a way to define exceptions for such cases. 
>> The versioning scheme of Closer to MOP was ad hoc, because nothing existed 
>> that could have been adhered to. It must be possible for libraries to move 
>> from non-adhering to adhering in a smooth way. Frankly, I don't care how 
>> that's achieved. If I can solve this by adding something to the system 
>> definition, that's fine with me...
> Did your library exist on 20/02/2002? Because that's when
> version-satisfies appeared with its ldo.so-like versioning semantics.

The it was my mistake that I didn't pay attention, and just got lucky that it 
only created a problem two times in almost ten years...

Pascal
> .
> 
> —♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
> Everyone hates a martyr. It's no wonder martyrs were burnt at a stake.
>— E.W. Howe, "Country Town Sayings", p.7



Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-18 Thread Faré
On Mon, Nov 18, 2013 at 10:21 AM, Pascal Costanza  wrote:
>> ASDF is not going to hard code an
>> exception for your library.
>
> Closer to MOP already existed before asdf imposed anything on version 
> numbers, so asdf has to provide a way to define exceptions for such cases. 
> The versioning scheme of Closer to MOP was ad hoc, because nothing existed 
> that could have been adhered to. It must be possible for libraries to move 
> from non-adhering to adhering in a smooth way. Frankly, I don't care how 
> that's achieved. If I can solve this by adding something to the system 
> definition, that's fine with me...
>
Did your library exist on 20/02/2002? Because that's when
version-satisfies appeared with its ldo.so-like versioning semantics.

To go back to actually looking for a solution (which I understand you
don't care for), we could either have subclasses of system with
different methods on version-satisfies, or we could have a
:version-satisfies slot in system, that defaults to one of
'version-compatible-p or 'version<= (for the old and new behavior
respectively), and asdf itself would specify the current version<=
behavior for itself if it isn't the default.

Note however that using either :class system-using-version<= or
:version-satisfies version<= is not itself backward-compatible with
old versions of ASDF, and so will have be protected with #+asdf3.1 or
some such.

Personally, I wouldn't go through that trouble, and would stick to the
current lexicographic-only version comparison, because I think the
ld.so semantics don't really apply to source compatibility. But doing
something is Robert's prerogative now.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Everyone hates a martyr. It's no wonder martyrs were burnt at a stake.
— E.W. Howe, "Country Town Sayings", p.7



Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-18 Thread Pascal Costanza


> On 18 Nov 2013, at 15:54, Faré  wrote:
> 
>> On Mon, Nov 18, 2013 at 2:34 AM, Pascal Costanza  wrote:
>> The 0.xy versions of Closer to MOP were not based on semantic versioning, 
>> but on an ad hoc versioning scheme. 1.0.0 did not change any API at all, so 
>> is definitely compatible with the last 0.xy versions. 1.0.0 is supposed to 
>> acknowledge the maturity of the library, that's it.
>> 
>> The FAQ section at http://semver.org seems to suggest that exceptions to the 
>> rules are acceptable, and I believe that a change from ad hoc version 
>> numbers to semantic versioning is such an exception.
>> 
>> I'm open to suggestions for a better solution.
> You're not proposing a solution.

Indeed, because I don't know what a good solution could be.

> ASDF is not going to hard code an
> exception for your library.

Closer to MOP already existed before asdf imposed anything on version numbers, 
so asdf has to provide a way to define exceptions for such cases. The 
versioning scheme of Closer to MOP was ad hoc, because nothing existed that 
could have been adhered to. It must be possible for libraries to move from 
non-adhering to adhering in a smooth way. Frankly, I don't care how that's 
achieved. If I can solve this by adding something to the system definition, 
that's fine with me...

Pascal

> 
> —♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
> Thinking is the hardest work there is, which is probably the reason why
> so few engage in it. — Henry Ford



Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-18 Thread Anton Vodonosov
18.11.2013, 08:02, "Robert P. Goldman" :
> Anton Vodonosov wrote:
>
>>  18.11.2013, 07:50, "Robert P. Goldman" :
>>>  Are you saying now that version 1.0.0 of Closer-MOP will satisfy the
>>>  requirement of 0.55, and that Anton should *not* be having this build
>>>  failure.
>>  Robert, build failures happen on older ASDF, and not happen on newer ASDF.
>
> Well this certainly was not an ASDF change I was consulted about or approved 
> of.

It has happened right before ASDF maintenance was transferred to you,
maybe even during the transition. See the mailing thread mentioned by Xach:
http://thread.gmane.org/gmane.lisp.asdf.devel/3062/focus=3066

>From this thread I understand that ASDF uses the same version-satisfies
for determining compatibility between ASDF versions, and for
determining if an ASDF system satisfies the :depends-on ((:version ...)).




Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-18 Thread Faré
On Mon, Nov 18, 2013 at 2:34 AM, Pascal Costanza  wrote:
> The 0.xy versions of Closer to MOP were not based on semantic versioning, but 
> on an ad hoc versioning scheme. 1.0.0 did not change any API at all, so is 
> definitely compatible with the last 0.xy versions. 1.0.0 is supposed to 
> acknowledge the maturity of the library, that's it.
>
> The FAQ section at http://semver.org seems to suggest that exceptions to the 
> rules are acceptable, and I believe that a change from ad hoc version numbers 
> to semantic versioning is such an exception.
>
> I'm open to suggestions for a better solution.
>
You're not proposing a solution. ASDF is not going to hard code an
exception for your library. Though it's possible to override the ASDF
default behavior, the library itself would have to do it, and there
still needs to be an ASDF default, and the question is which.

The ASDF default changed in 3.0.1, for practical reasons having to do
with an issue with ASDF itself, and making the smallest change during
a crisis. It can change back (in which case a non-default class or
initarg would be used for ASDF itself). The discussion is about what
the default should be, and what should be the means to override it if
necessary.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Thinking is the hardest work there is, which is probably the reason why
so few engage in it. — Henry Ford



Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-17 Thread Pascal Costanza
The 0.xy versions of Closer to MOP were not based on semantic versioning, but 
on an ad hoc versioning scheme. 1.0.0 did not change any API at all, so is 
definitely compatible with the last 0.xy versions. 1.0.0 is supposed to 
acknowledge the maturity of the library, that's it. 

The FAQ section at http://semver.org seems to suggest that exceptions to the 
rules are acceptable, and I believe that a change from ad hoc version numbers 
to semantic versioning is such an exception.

I'm open to suggestions for a better solution.

Pascal

Sent from my iPad

> On 18 Nov 2013, at 04:50, "Robert P. Goldman"  wrote:
> 
> Wait, what?
> 
> Are you saying now that version 1.0.0 of Closer-MOP will satisfy the
> requirement of 0.55, and that Anton should *not* be having this build
> failure.
> 
> Because I don't think it *is* a bug.
> 
> If someone releases version 2.0 of a software package, and I have a
> library that relies on version 1.x, I *want* to be warned that the API
> has moved under me.
> 
> For that matter, if a library has been unmaintained for three years (I'm
> talking about you, moptilities!) while its dependencies have moved under
> it, I would like to be warned that it's likely not to be working.
> 
> I'm willing to see some special-purpose kludge to break this for the
> ASDF upgrade case, because we have set things up so that ASDF upgrades
> should work whenever one version is greater than another.
> 
> Even for ASDF, code that relied on old versions of the ASDF API should
> not be fooled into thinking that it will be forward compatible.  That's
> why I insisted on bumping to ASDF 3 to reflect the fact that the API had
> changed.
> 
> MOPTILITIES *should* break under the current circumstances; that's not a
> bad thing.  Either someone should look and see if it's compatible with a
> new version of Closer-MOP and take the 2.4 seconds required to bump the
> :VERSION dependency, or if it's not worth anyone's time to do that,
> maybe it's not a library that people should be using, and it should get
> garbage-collected from the community.
> 
> Best,
> r
> 



Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-17 Thread Anton Vodonosov
18.11.2013, 07:50, "Robert P. Goldman" :
> Are you saying now that version 1.0.0 of Closer-MOP will satisfy the
> requirement of 0.55, and that Anton should *not* be having this build
> failure.

Robert, build failures happen on older ASDF, and not happen on newer ASDF.



Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-17 Thread Robert P. Goldman
Wait, what?

Are you saying now that version 1.0.0 of Closer-MOP will satisfy the
requirement of 0.55, and that Anton should *not* be having this build
failure.

Because I don't think it *is* a bug.

If someone releases version 2.0 of a software package, and I have a
library that relies on version 1.x, I *want* to be warned that the API
has moved under me.

For that matter, if a library has been unmaintained for three years (I'm
talking about you, moptilities!) while its dependencies have moved under
it, I would like to be warned that it's likely not to be working.

I'm willing to see some special-purpose kludge to break this for the
ASDF upgrade case, because we have set things up so that ASDF upgrades
should work whenever one version is greater than another.

Even for ASDF, code that relied on old versions of the ASDF API should
not be fooled into thinking that it will be forward compatible.  That's
why I insisted on bumping to ASDF 3 to reflect the fact that the API had
changed.

MOPTILITIES *should* break under the current circumstances; that's not a
bad thing.  Either someone should look and see if it's compatible with a
new version of Closer-MOP and take the 2.4 seconds required to bump the
:VERSION dependency, or if it's not worth anyone's time to do that,
maybe it's not a library that people should be using, and it should get
garbage-collected from the community.

Best,
r



Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-17 Thread Faré
> Anton Vodonosov wrote:
>> So, my question is: how :depends-on ((:version ...))
>> should work, and is the change in the behavior intentional?
>
The change of behavior in VERSION-SATISFIES is from ASDF 3.0.1, 2013-05-16.

Since even before VERSION-SATISFIES was introduced on 20/02/2002, ASDF
had been considering that different major version number signified
incompatibility. I lifted that restriction, and made the check be the
simple lexicographic order comparison it otherwise was, after parsing.
Parsing is still separating the version into a list of non-negative
integers; leading zeroes don't count.

The reason for the change is that when releasing ASDF 3.0.0, we found
that this caused an issue with ASDF itself considering that it was not
compatible with ASDF 2; therefore Quicklisp considered ASDF 3.0.0 was
not an adequate replacement for ASDF 2.26, and tried to load ASDF 2.26
on top of ASDF 3.0.0, with catastrophic results. Therefore, after
briefly consulting the ASDF user base, and checking that not one of
the quicklisp projects was positively relying on the old behavior, I
quickly released a new ASDF 3.0.1, where a greater major version
number only means more awesomeness in a compatible way.

It seems that the old behavior had never been documented, except for
the source code itself, and its being mentioned on this mailing list
when the semantics of versions was previously discussed. Hence no one
relying on it.

Apologies for the breakage.


On Sun, Nov 17, 2013 at 9:01 PM, Robert P. Goldman  wrote:
> There are two different version requirements.
>
> :version is supposed to be "this is the version I need."  It treats
> changes in the highest version component as API-changing modifications
> that don't satisfy requirements for mismatching major components.
>
> When we advertise Closer-MOP 1.0.0, we are saying that we have made
> changes to the API, so it's different from 0.x.  Hence a :VERSION
> dependency of 0.55 is not satisfied by 1.0.0, although it IS satisfied
> by 0.61
>
> If major changes are going on in a library's API, then they should be
> noted by the library developer, and people who use this library have to
> think about those changes.  This is unavoidable and better than dealing
> with versioning systems like where you never know when a library's API
> has changed, and your code may break at the slightest version bump.
>
> Actually I think that the code may have changed to be more permissive at
> some point.  I believe that originally a requirement of, e.g., 0.0.7
> would not be satisfied by 0.1.0 (although it would be satisfied by 0.0.9).
>
> The good news is that ASDF's version numbering scheme has a semantics
> that can provide useful support to programmers.  The bad news is that
> not enough people know about this semantics, so it doesn't provide as
> much value as it might.
>
Robert correctly describes the old behavior of ASDF 1 & 2, that was
discontinued in ASDF 3.

Dan Barlow was obviously inspired by the number versioning of Linux
shared object libraries. It seems this wasn't how the CL community
started using these version numbers. And the match was probably not
that great: Linux .so's involve object-level compatibility, whereas
ASDF dynamic loading involves source-level compatibility, where
compatibility if desired can be handled with #+ and #. and
conditionals with find-symbol or fboundp. Meanwhile, we use
output-translations to deal with object-level incompatibilities.
Overall, the old behavior of version-satisfies is not to be regretted,
and the new maintainer may once again consider adopting (or not) the
rpm or debian or whatever other version comparison mechanism (in which
case I can submit code I once wrote). But hey, Dan Barlow was a great
experimenter; some of his experiments failed, others succeeded
brilliantly; thanks Dan.

> One thing that might make everyone's lives easier would be making the
> MISSING-DEPENDENCY-OF-VERSION error a continuable error instead of a
> fatal one.  What would you think about this?
>
That can do it. On the other hand, if the author inserted a :version
requirement, he probably had a good reason, and it's therefore vain to
try to override it, rather than upgrade the library.

PS: unrelatedly, there has been a lot of action on ASDF since 3.0.3:
* There is my package-system one-package-one-system-per-file support,
compatible with quick-build and similar to faslpath.
* A lot of UIOP fixes, notably as it's now being used in the Google
build system (short-circuiting the asdf/defsystem itself, instead
using a converter from ASDF to the native system to which Lisp support
was added).
* ASDF will soon support GCL (Camm Maguire has released 2.6.8 and
2.6.9 and is now actively fixing the bugs in GCL that prevented ASDF
from running, while I've been modifying ASDF itself).

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Never explain. Your friends do not need it and your enemies will
never believe you anyway.
— Elb

Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-17 Thread Robert P. Goldman
Anton Vodonosov wrote:
> So, my question is: how :depends-on ((:version ...))
> should work, and is the change in the behavior intentional?

There are two different version requirements.

:version is supposed to be "this is the version I need."  It treats
changes in the highest version component as API-changing modifications
that don't satisfy requirements for mismatching major components.

When we advertise Closer-MOP 1.0.0, we are saying that we have made
changes to the API, so it's different from 0.x.  Hence a :VERSION
dependency of 0.55 is not satisfied by 1.0.0, although it IS satisfied
by 0.61

If major changes are going on in a library's API, then they should be
noted by the library developer, and people who use this library have to
think about those changes.  This is unavoidable and better than dealing
with versioning systems like where you never know when a library's API
has changed, and your code may break at the slightest version bump.

Actually I think that the code may have changed to be more permissive at
some point.  I believe that originally a requirement of, e.g., 0.0.7
would not be satisfied by 0.1.0 (although it would be satisfied by 0.0.9).

The good news is that ASDF's version numbering scheme has a semantics
that can provide useful support to programmers.  The bad news is that
not enough people know about this semantics, so it doesn't provide as
much value as it might.

One thing that might make everyone's lives easier would be making the
MISSING-DEPENDENCY-OF-VERSION error a continuable error instead of a
fatal one.  What would you think about this?

Cheers,
r







Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-17 Thread Zach Beane
This is caused because in older ASDF, a version of 1. was not
considered to satisfy a version requirement of 0.. This was
changed because ASDF updated to 3.0 but was not considered satisfying
2. as required by Quicklisp.

http://thread.gmane.org/gmane.lisp.asdf.devel/3062/focus=3066 has some
info about when and why this was changed.

Zach


Pascal Costanza  writes:

> Hi,
>
> I’m the maintainer of Closer to MOP, and I have just updated the version 
> numbers as you describe below. If I made a mistake and chose a numbering 
> scheme that confuses ASDF, please let me know, and I will fix this. However, 
> I believe what I chose is in line with the ASDF documentation.
>
> Previously, the version numbers for Closer to MOP lacked a third entry 
> (“patch version”), maybe this is a confusing change?
>
> Pascal
>
> On 17 Nov 2013, at 10:34, Anton Vodonosov  wrote:
>
>> Hello.
>> 
>> Has the semantics of :depends-on with :version
>> specified for the dependency changed recently?
>> 
>> I am asking, because I observe problems in several libraries.
>> 
>> For example, moptilities. 
>> 
>> moptilities.asd has :depends-on ((:version :closer-mop "0.55"))
>> 
>> In Quicklisp 2013-11-11 closer-mop is updated, now its ASDF
>> system has :version "1.0.0"
>> 
>> Now moptilities fails to load on many lisps
>> (clisp, ccl-1.8, ccl-1.8, ecl, sbcl-1.1.0.36).
>> 
>> The error is MISSING-DEPENDENCY-OF-VERSION:
>> Component :CLOSER-MOP does not match version 0.55, required by #> "moptilities">
>> 
>> But on sbcl-1.1.11 moptilities load OK.
>> This is a relatively recent SBCL, so I assume
>> it has newer ASDF than many other lisps.
>> And probably that's why it it can load moptilities.
>> 
>> Also interesting, that in the previous Quicklisp
>> closer-mop version was "0.61". And moptilities,
>> which depend on closer-mop "0.55" was loaded successfully
>> by many lisps which now fail.
>> 
>> Test results for moptilities for the current and previous
>> Quiclisp may be found here:
>> http://common-lisp.net/project/cl-test-grid/library/moptilities.html
>> 
>> Moptilities is only on example, there are other libraries
>> affected by this problem.
>> 
>> So, my question is: how :depends-on ((:version ...))
>> should work, and is the change in the behavior intentional?
>> 
>> Best regards,
>> - Anton
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>
> --
> Pascal Costanza



Re: [asdf-devel] has ":depends-on ((:version ...))" semantics changed?

2013-11-17 Thread Pascal Costanza
Hi,

I’m the maintainer of Closer to MOP, and I have just updated the version 
numbers as you describe below. If I made a mistake and chose a numbering scheme 
that confuses ASDF, please let me know, and I will fix this. However, I believe 
what I chose is in line with the ASDF documentation.

Previously, the version numbers for Closer to MOP lacked a third entry (“patch 
version”), maybe this is a confusing change?

Pascal

On 17 Nov 2013, at 10:34, Anton Vodonosov  wrote:

> Hello.
> 
> Has the semantics of :depends-on with :version
> specified for the dependency changed recently?
> 
> I am asking, because I observe problems in several libraries.
> 
> For example, moptilities. 
> 
> moptilities.asd has :depends-on ((:version :closer-mop "0.55"))
> 
> In Quicklisp 2013-11-11 closer-mop is updated, now its ASDF
> system has :version "1.0.0"
> 
> Now moptilities fails to load on many lisps
> (clisp, ccl-1.8, ccl-1.8, ecl, sbcl-1.1.0.36).
> 
> The error is MISSING-DEPENDENCY-OF-VERSION:
> Component :CLOSER-MOP does not match version 0.55, required by # "moptilities">
> 
> But on sbcl-1.1.11 moptilities load OK.
> This is a relatively recent SBCL, so I assume
> it has newer ASDF than many other lisps.
> And probably that's why it it can load moptilities.
> 
> Also interesting, that in the previous Quicklisp
> closer-mop version was "0.61". And moptilities,
> which depend on closer-mop "0.55" was loaded successfully
> by many lisps which now fail.
> 
> Test results for moptilities for the current and previous
> Quiclisp may be found here:
> http://common-lisp.net/project/cl-test-grid/library/moptilities.html
> 
> Moptilities is only on example, there are other libraries
> affected by this problem.
> 
> So, my question is: how :depends-on ((:version ...))
> should work, and is the change in the behavior intentional?
> 
> Best regards,
> - Anton
> 
> 
> 
> 
> 
> 
> 

--
Pascal Costanza