mlpack uses semantic versioning for its versioning conventions (http://semver.org). Because of the complexity and huge API of mlpack, it is worth elaborating on precisely when and how backwards compatibility will be broken. This will, of course, happen, as mlpack developers settle on increasingly effective abstractions for machine learning algorithms. * The command-line programs, bindings, and top-level classes for each machine learning algorithm, as well as the code in core/, are considered the "public API". So, for instance, the mlpack_linear_regression program, LinearRegression<>, and any bindings for LinearRegression<> are considered the "public API"; additionally, core utilities like data::Load() and data::Save() are considered "public". * Support classes for machine learning algorithms are considered the "private API". An example might be the mlpack::kmeans::MaxVarianceNewCluster class. This is a support class for mlpack::kmeans::KMeans<> and generally isn't used by end users. Thus, with this relatively simple definition of "public API" and "private API", we can provide a simple versioning scheme based completely on the semantic versioning guidelines: ---- Given a version number MAJOR.MINOR.PATCH, increment the: MAJOR version when you make incompatible public API changes, MINOR version when you add public API functionality in a backwards-compatible manner or make incompatible private API changes, and PATCH version when you make backwards-compatible bug fixes or documentation updates. ----