Most projects have a version number. Even smaller units like files or functions may have their own version numbers. Which version numbering schemes do exist and what are their pros and cons? '''Common Version Number Format''' Many projects use a version like ''major[.minor[.micro[.build]]]'', where ''major'', ''minor'', ''micro'', and ''build'' are nonnegative integers. The ''micro'' component is sometimes called the ''patchlevel''. Some projects append a string like "rc", "alpha", "beta", all followed by a small positive integer, to the last component they use to indicate versions that are "almost" finished. '''Meaning of the Version Number Components''' The Linux kernel (http://www.kernel.org/) uses even ''minor'' numbers for release versions, and odd ''minor'' numbers for development versions. The development version ''major.minor'' evolves from ''major.(minor-1)'' and leads to ''major.(minor+1)'' or ''(major+1).0''. The Wine project (http://www.winehq.com/) uses the release date as a single component version number. '''Version Numbers for Shared Libraries''' Every shared library should have a version number. This number may be different from the version number of the project, in which the library is distributed. * The ''major'' number should be increased whenever the API changes in an incompatible way. * The ''minor'' number should be increased whenever the API changes in a compatible way. * The ''micro'' number should be increased whenever the implementation changes, while the API does not. ---- '''Alternative Version Number Format''' An alternative version number format proposed by David Tanzer (http://davidtanzer.net/node/75) is ''v[major][qualifier][revision]'' where "major" and "revision" are positive integers and "qualifier" is one of the following: * "ds": Development snapshot * "be": Beta * "rc": Release Candidate * "pr": Production * "mr": Maintenance Release Example: "libfoo-v01ds05". --David Tanzer