Versioning scheme

This is versioning scheme used in all Michalis' software on these pages. This versioning scheme is of course inspired by versioning schemes of many other programs and libraries, so you don't have to search far to find software with similar or just plainly the same versioning scheme.

Also some thoughts about "what good versioning scheme should look like" are given at the bottom of this page.

Major number:
  1. Final programs: incremented on some major achievement (like VRML 97 conformance in view3dscene).
  2. Libraries or programs that are meant to be used by other programs (in "batch" mode, like std UNIX programs): incremented on incompatible changes. This should be connected with "some major achievement", since there really must exist a good reason to do some "incompatible change".
Minor number:
Incremented when some improvements that are really noticeable to all users are done. Incrementing this means "all users should really upgrade, because it's really significantly better than last version".

This doesn't concern my programs on these pages for now, but it is generally good idea and known convention : If program maintains some sort of stable and unstable branches, then it's a good idea to distinguish them by odd and even minor numbers.

Release number:
Incremented each time I upload new compiled version to these pages. Sometimes new release fixes only some minor problems (that are significant only for a very small amount of users), or implement some minor functionality that isn't so significant to increment minor number.

This doesn't concern my programs on these pages for now, but it is generally good idea and known convention : If program has public CVS (or SVN, or similar "live" code repository), then it's a good idea to increment release number right before and right after each "official" public release. This means that even release numbers indicate some real, "fixed" version of the program, and odd release numbers indicate CVS-version, that has no guarantee about stability, and changes on every commit.

What IMHO good versioning scheme should look like ?

Things to avoid in good versioning scheme (IMHO, as usual):