[Distutils] Simple idea to resolve versioning problems

David Cournapeau david at ar.media.kyoto-u.ac.jp
Tue Apr 15 04:04:28 CEST 2008


Greg Ewing wrote:
> David Cournapeau wrote:
>> what is needed is a stable API for the used packages.
>
> That's a nice ideal to aim for, but it's only achievable
> for old and mature packages.
>

Yes, many packages can't have a stable API, at least for some time. But 
then, should you rely on them  for deployment ? I am really not 
convinced that you can have both stable systems and packages which keep 
changing whenever they want. I don't believe that library versioning 
will give you that, that's just a really minor part of it.

When you think about it for a second, what is library versioning ? A 
convention to track API changes. Library versioning without API 
stability just does not make sense to me. What would happen if with 
apt-get you could install gtk 2.0, 2.2, etc... up to gtk-2.12, and gtk 
broke some API between minor versions ? Nothing would work, because you 
would quickly have one package B which work with gtk 2.8 but not above, 
package C which needs gtk 2.10, and package D which needs B and C. 
That's why you have gtk-2.n, and debian project put huge effort to be 
sure that with some n, many projects will work on it. If gtk is not 
stable, this cannot happen.

I am not aware of a single big open source project which have many 
dependencies without strong API versioning policies (which means not 
breaking between minor changes). For small projects, it is no problem. 
For big ones, you need either to rely on strongly versioned api, or to 
cut dependencies (by copying a private copy: see mozilla/firefox which 
embed their own gecko, ardour which embeds its own gtk, sndfile which 
embeds its own copy of ogg, etc...)

>
> If we all follow this convention, we will be able to
> install and use multiple versions of a package side-by-side
> just as easily as we can Python versions, with no need
> for setuptools or any other fancy technology -- just
> plain standard Python the way it currently is!

I don't see how this could work. How do you do if you have a package D 
which depends on both C and B, and C needs one version of one package A, 
and B another one ? If you cannot use a common A, this cannot work (how 
one python instance would use different versions of the same package ?)

cheers,

David



More information about the Distutils-SIG mailing list