avalon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leo Sutic" <leo.su...@inspireinfrastructure.com>
Subject Versioning scheme
Date Fri, 20 Feb 2004 20:08:07 GMT
All,

since I'll be doing some releasing, I started thinking 
about what goes into a version number. The Apache
Portable Runtime says this:

(http://apr.apache.org/versioning.html)

= The Basics =
Versions are denoted using a standard triplet of 
integers: MAJOR.MINOR.PATCH. The basic intent is that 
MAJOR versions are incompatible, large-scale upgrades 
of the API. MINOR versions retain source and binary 
compatibility with older minor versions, and changes 
in the PATCH level are perfectly compatible, forwards 
and backwards.

It is important to note that a library that has not 
reached 1.0.0 is not subject to the guidelines 
described in this document. Before a 1.0 release 
(version 0.x.y), the API can and will be changing 
freely, without regard to the restrictions detailed
 below.
 
== Source Compatibility ==
We define "source compatible" to mean that an 
application will continue to build without error,
 and that the semantics will remain unchanged.

Applications that write against a particular version
 will remain source-compatible against later versions,
 until the major number changes. However, if an 
application uses an API which has become available 
in a particular minor version, it (obviously) will
 no longer build or operate against previous minor 
versions.
 
== Binary Compatibility  ==
We define "binary compatible" to mean that a compiled 
application can be linked (possibly dynamically) 
against the library and continue to function properly.

Similar to source compatibility, an application that 
has been compiled against a particular version will 
continue to be linkable against later versions (unless
 the major number changes). It is possible that an
 application will not be able to successfully link 
against a previous minor version.
 
= Examples =
Here are some examples to demonstrate the compatibility:

|| Original Version |||| New Version |||| Compatible? || 
|| 2.2.3            |||| 2.2.4       |||| Yes Compatibility across patch
versions is guaranteed. ||
|| 2.2.3            |||| 2.2.1 Yes   |||| Compatibility across patch
versions is guaranteed.  ||
|| 2.2.3            |||| 2.3.1 Yes   |||| Compatibility with later minor
versions is guaranteed. ||  
|| 2.2.3            |||| 2.1.7 No    |||| Compatibility with prior minor
versions is not guaranteed. ||
|| 2.2.3            |||| 3.0.0 No    |||| Compatibility with different
major versions is not guaranteed. ||
|| 2.2.3            |||| 1.4.7 No    |||| Compatibility with different
major versions is not guaranteed. ||

Note: while some of the cells say "no", it is 
possible that the versions may be compatible, 
depending very precisely upon the particular 
APIs used by the application.
 
----------------------------------


Should we adopt this?

/LS


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Mime
View raw message