VERSIONS.txt
  CalendarX 0.6.6(stable)  January 03 2006
  (last modified for CalendarX 0.4.0)
by +lupa+ (lupaz on sf.net, lupa at zurven dot com)
Released under the GPL (see LICENSE.txt)


Starting with CalendarX v0.1.8(stable), we are implementing a new four part 
version number system that we think you'll find sensible and easy to 
understand.  It offers several advantages over other systems for small to 
medium scale software projcts.  Here's how it works.

CalendarX version numbering scheme with four parts: V.B.F(C)

Version . Branch . Fix (Comment) 

Definitions:
  Version: significant code base difference from other major Versions
  Branch: new features beyond other branches (aka minor version)
  Fix: very little new functionality, mostly bug fixes
  Comment: added at the end to tell the user something about stability
    (exp)    - experimental release, definitely needs work, but it obviously
               has some functionality or it wouldn't have been released.
    (dev)    - development release, some bugs, but in a working state.
               Expect changes and new functionality to appear under (dev).
    (alpha)  - seems stable with NO identified critical bugs, requires more 
               testing and bugfixes.  Very minor new functionality, if any.
    (beta)   - candidate for stable release.  Beta is mostly for bugfixes and 
               minor feature adjustments, with essentially no API changes.
    (rcX)    - where X is a number (1, 2, etc.) Release candidate for a stable
               release.  No changes other than bug fixes.
    (stable) - well tested, serving in production capacity. additional stable
               releases in any branch will only be made for bugfixes.
  Critical bug: A bug that absolutely must be fixed before declaring a 
    branch to be in a stable form.
  Minor bug: Bugs that aren't critical.  Minor bugs are optional to fix before
    declaring a branch to be stable.

For example, the first stable release of CalendarX was that 0.1.8(stable) code
on June 13, 2004.  It represents the "0" Version (aka Trunk) of the code, and 
the "1" Branch of that code.  It went through several Fix stages (actually 
more than a dozen under the old version numbering system), and has been 
declared Stable as of this release: v0.1.8(stable).  

Once a branch reaches stable, it is very unlikely to have any further 
development of that branch of the code.  Once a branch reaches a stable state, 
the only future releases along that branch will be bugfix releases.

Any new features added to the code, other than very minor cosmetic changes, 
should cause the opening of a new code branch.  Several code branches may be 
active at one time, but should always specify in the HISTORY file what stable 
code branch it was started from.  

The major advantage of this approach is that fantastic new features
need not be held hostage to other, more difficult feature developments.  

Example 1: A particularly nasty coding problem is holding up development of 
  the 1.2.x(dev) branch, but a desirable new feature of that branch has been 
  completed, then it is entirely possible (and *desirable*) to release a 1.3 
  branch that builds on the stable 1.1 code base, but releases the desirable 
  new feature into the community without delay.  The 1.2 branch continues, or 
  it may jump ahead to 1.4 if other new features get added in.

Example 2: Some great new features added into the 0.9.x(dev) branch are very 
  desirable for 0.8.x(stable) users.  If these new features can be readily 
  backported into the 0.8.x(stable) code base, then a new branch called 
  0.10.0(dev) should be started to include those features.  This branch can 
  very rapidly be advanced to 0.10.x(stable) status because of the stability of  
  the 0.8.x branch code base and the small number of changes made.  Thus new 
  functionality can be released in a stable form without undo reliance on 
  CVS branches or other project managerial magic.  

Also, there is no upper limit on any of the numbers, so eventually 
one might reach v3.63.7(stable) or something like that.  It is unlikely to 
reach high numbers in the Fix part of the version number 
[i.e., v3.63.119(stable)] unless there were ridiculous difficulties in 
squashing bugs in that branch.

I think this numbering system, although truly insignificant (it is just a 
convention, after all), will help us produce a more reliable product more 
quickly.  Perhaps more importantly, it will definitely help us adhere to a 
philosophy of "Release Early, Release Often."

+lupa+
CalendarX.org

