Other meanings of Software versioning
Software Engineering
Software versioning is the process of assigning unique version names or numbers to distinct states of computer software. These identifiers allow developers and users to track changes, manage releases, and communicate compatibility. Version numbers typically follow a sequence, such as 1.0, 2.1.3, or 2024.1, and may include pre-release suffixes like alpha, beta, or rc. The practice is essential for software maintenance, dependency management, and user support, as it provides a clear reference for updates and bug fixes.
Versioning schemes vary widely, but most follow a numeric sequence with major, minor, and patch components. The major number increments for incompatible changes, minor for backward-compatible additions, and patch for bug fixes. This is formalized in Semantic Versioning (SemVer), a widely adopted specification that also allows pre-release identifiers like -alpha.1 or -rc.2.1 Other schemes include date-based versions (e.g., Ubuntu 24.04), sequential build numbers, and marketing-driven versions that may skip numbers for promotional reasons. Version numbers are often accompanied by release names, such as Ubuntu's animal adjectives or Android's dessert codenames, which serve as memorable aliases.
The practice of numbering software versions dates back to the early days of computing. Unix, for instance, used simple numbers like V6 and V7 in the 1970s. Later, the rise of personal computing popularized decimal versions, such as MS-DOS 3.3 or Windows 95, which used a year-based marketing name. The open-source movement brought more rigorous schemes: the Linux kernel uses a three-part number where the second digit indicates stability (even = stable, odd = development).2 The Python programming language famously used a similar odd/even minor version convention for development releases. These examples illustrate how versioning adapts to project needs, from simple sequential numbers to complex predictive indicators.
Beyond the common schemes, versioning has many niche practices. Some projects use epoch numbers in package managers like Debian's dpkg, allowing version sequences to reset when a new upstream scheme is adopted. Others use build metadata (e.g., +build.20240101) to identify exact builds without affecting precedence. The CalVer scheme (Calendar Versioning) uses dates, as seen in Ubuntu and Twisted. A notable edge case is the Windows 10 version, which was marketed as 10 but internally reported as 6.4 for compatibility reasons. Versioning also extends to data formats and APIs, where version numbers are embedded in URLs or headers to manage breaking changes. The ISO/IEC 19770-2 standard defines software identification tags, which include version information for asset management.3
Effective versioning requires clear communication and discipline. A common pitfall is version inflation, where numbers are incremented without meaningful changes, eroding trust. Another challenge is managing pre-release versions and release candidates, which must be clearly distinguished from stable releases. Tools like semver and calver provide automated validation, and many projects adopt a versioning policy documented in their contribution guidelines. For libraries and APIs, semantic versioning is crucial for dependency resolution, as seen in package managers like npm and pip, which rely on version ranges to install compatible versions.4 Ultimately, the goal is to make version numbers meaningful to both humans and machines, balancing simplicity with expressiveness.
Versioning is a fundamental practice in software engineering, enabling orderly evolution and collaboration.
Help improve the encyclopedia. Reports go straight to the site manager.