From: Edward Diener (eldiener_at_[hidden])
Date: 2007-06-07 11:05:29
Gennadiy Rozental wrote:
> Following David A. recommendation I put up a wiki page that presents initial
> version of my proposal for boost development environment, testing and
> release procedures.
> It's still missing one key piece - version selection algorithm. I just don't
> have time to complete it now and won't until weekend. But it should be
> complete enough to explain all the key points (and some more). I shamelessly
> stole couple statements from Beman's objective section. Well, we do have
> similar objectives ;)
> Any comments are welcome.
I like the idea of allowing individual libraries and their dependencies
being released between full Boost versions when deemed necessary.
However, from an end user's point of view, allowing a version of some
library to be released with an earlier dependency version than a version
of another library with a later dependency version, where the first
library no longer works with the later dependency version, will be a
nightmare. Because of that I believe that any individual library needs
to be co-ordinated with its dependencies so that changes in a dependency
library, which may be released on its own or with another library, does
not break the original individual library.
When I say "break" the original individual library I am not speaking
about a bug which may occur in a dependency but rather a change to the
public ( or protected ) programming interface of the dependent, which I
will call, perhaps erroneously, the ABI.
The reason I think such a situation will be a nightmare to end-users is
because an end-user may then have more than one version of the same
dependency library within the structure of using a general Boost
release, and pointing to a different set of header files, with possibly
the equivalent libraries files for non-header-only libraries, for each
different use of the libraries, will create great logistical
difficulties to the smooth use of Boost.
As an example, suppose I use library A and library B, both of which have
library C as a dependency. Library A uses version 1 of library C and
library B uses version 2 of library C. Library A is broken, ABI-wise,
with version 2 of library C. Now I want to use both library A and
library B in my program ( or module ), often from within the same source
file compilation. How in the world do I have library A pointing to its
own version of library C's header files while library B points to its
own version of library C's header files ?
This can be complicated further if library C has lib files which either
statically are added to my module or are linked to dynamically through a
shared library. This situation just increases the nightmare of trying to
use both the libraries.
As I suggested in another post on this thread, I think it is certainly
possible for an individual library to be released between full Boost
releases, but only if the Boost developer of that library makes sure
that his library is always co-ordinated ABI-wise with any of its
dependencies. Likewise if a dependency of a library is going to be
released itself, it is imperative that any libraries for which that
library is a dependency, and for which the change to the dependency will
create an ABI problem, also be released with an update at the same time
which fixes the ABI problem.
It is nice to think that any Boost library should be able to be released
at any time to work with any version of a dependency, but the reality of
such a plan will often lead to chaos from the end-user's point of view.
I am not saying this can not be done for unique individual situations,
since I have done it myself using the Boost regex++ library, but it
needs very careful consideration so as not to create a nightmare for the
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk