Hi,
Launching a discussion about versionning is a really good idea...
actually we started some times ago, while releasing the version 0.5 of
Carob, and here is what got out:
1. yes, we do need to keep track of compatibilities between carob&friend
vs. sequoia.
2. but it will be confusing/'heavy' to carry this tracking in the
version numbering:
eg. if you take a notation like carob-1.0-sequoia-2.7, this quite a long
naming ! moreover, it is a bit confusing: next version will be
carob-1.0-sequoia-2.8, or carob-2.0-sequoia-2.7. It does *not* look like
any known version numbering convention and I think that users will be
lost with this
3. what appeared to us as a quite good solution is to maintain a
"version compatibility table" on carob's web page. We only keep carob's
numbering carob-x.y (x = major, y=minor), just like you suggested and
then, on the web page, we may have the following:
carob version | compatible sequoia version
-----------------------------------------------
carob-1.0 | sequoia-2.7
----------------+------------------------------
carob-1.1 | sequoia-2.8
----------------|
carob-1.2 |
================|
carob-2.0 |
----------------+------------------------------
carob-2.1 | sequoia-2.9
And same for libmysequoia/odbsequoia...
What do you think about that ?
4. About the version fall-back inside sequoia, I think yes, it would be
nice but.... :) it would make the code more and more heavy (and sequoia
really doesn't need that !), it is quite a big thing to do, especially
in these times of hurry. Sure, it is a good thing, but I think we should
not count on this before years...
Let's keep the discussion on going...
Gilles.
Csaba Simon a écrit :
Hi all,
This email is a call for discussion for Carob library versioning.
Currently Carob does not have one.
Some notions before we start.
A library has a MAJOR and a MINOR version number reflecting the
*interface* number.
* Major: every time the interface is changed (removing functions,
changing function calls, modifying structures) this number is
incremented by 1 and the minor number is resetted to 0.
* Minor: is incremented by 1 for adding new functions, bugfixes.
Applications linked to previous version will still work with this
version. Application linked to this version will not work with
previous version.
Binary and source compatibility:
* Binary: means that a compiled application can be linked dynamically
against the library and continue to function properly.
* Source: means that an application compiled against a particular
version will continue to be linkable against later versions.
We have binary compatibility when the major number is the same.
Example: 2.0, 2.1, 2.4 are ABI compatible. They have different minor
versions but the major version is the same.
The program version and the library version can be different. Example
for libpng:
program version interface version
libpng 1.0.x 1
libpng 1.2.5 2
libpng 1.2.6 3
But also can be the same. Example for gtk+:
program version interface version
gtk+ 1.2.0 1.2
gtk+ 2.0.0 2.0
gtk+ 2.2.1 2.2
Enough from the theory let's get back to why I started this mail.
We need to choose a library version strategy for Carob. First I was
tempted to have the same version numbers as Sequoia. For example Carob
2.7 for Sequoia 2.7, Carob 2.8 for Sequoia 2.8. This means that Carob
2.7 and Carob 2.8 are ABI compatible? Or between Carob 2.8 and Carob
3.0 their is a big ABI incompatible change? The answer is *no* so I
dropped the idea.
Now the brainstorming can start. The question is how can we make a
simple version schema:
* where we can follow the ABI compatibility
* where we can know exactly the version number(s) for Sequoia what
will work with our library (for example: this version of Carob will
work with Sequoia 2.6 and 2.7 but not with Sequoia 2.8)
We need to track the *interface* version (carob header files) and the
*protocol* version (communication between carob and the controller)
somehow in a simple and elegant way.
Any ideas?
Regards,
Csaba
PS:
1. the same applies also for libmysequoia. Currently libmysequoia is
following the MySQL client interface. (12:0 for MySQL 4.0, 14:0 for
MySQL 4.1 and 15:0 for MySQL 5.0)
2. the life will be easier if Sequoia can fall back to an older
protocol if sees that we trying to connect with an old protocol. This
raises a lot of work and a lot of questions also :-)
Documentation:
http://www.linuxshowcase.org/2000/2000papers/papers/browndavid/browndavid_html/
http://sources.redhat.com/autobook/autobook/autobook_91.html
http://apr.apache.org/versioning.html
_______________________________________________
Carob mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob
_______________________________________________
Carob mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob