ⓘ Software versioning
Software upgrade versioning is the process of assigning either unique version names or unique version numbers to unique states of computer software. Within a given version number category, these numbers are generally assigned in increasing order and correspond to new developments in the software. At a fine-grained level, revision control is often used for keeping track of incrementally different versions of information, whether or not this information is computer software.
Modern computer software is often tracked using two different software versioning schemes - internal version number that may be incremented many times in a single day, such as a revision control number, and a released version that typically changes far less often, such as semantic versioning or a project code name.
A variety of version numbering schemes have been created to keep track of different versions of a piece of software. The ubiquity of computers has also led to these schemes being used in contexts outside computing.
1.1. Schemes Sequence-based identifiers
In sequence-based software versioning schemes, each software release is assigned a unique identifier that consists of one or more sequences of numbers or letters. This is the extent of the commonality; schemes vary widely in areas such as the quantity of sequences, the attribution of meaning to individual sequences, and the means of incrementing the sequences.
1.2. Schemes Change significance
In some schemes, sequence-based identifiers are used to convey the significance of changes between releases. Changes are classified by significance level, and the decision of which sequence to change between releases is based on the significance of the changes from the previous release, whereby the first sequence is changed for the most significant changes, and changes to sequences after the first represent changes of decreasing significance.
Depending on the scheme, significance may be assessed by lines of code changed, function points added or removed, potential impact on customers in terms of work required to adopt a newer version, risk of bugs or undeclared breaking changes, degree of changes in visual layout, quantity of new features, or almost anything the product developers or marketers deem to be significant, including marketing desire to stress the "relative goodness" of the new version.
Semantic versioning aka SemVer, currently the best known and most widely adopted version scheme in this category, uses a sequence of three digits Major.Minor.Patch, an optional pre-release tag and optional build meta tag. In this scheme, risk and functionality are the measures of significance. Breaking changes are indicated by increasing the major number high risk, new non-breaking features increment the minor number medium risk and all other non-breaking changes increment the patch number lowest risk. The presence of a pre-release tag -alpha, -beta indicates substantial risk, as does a major number of zero 0.y.z, which is used to indicate a work-in-progress that may contain any level of potentially breaking changes highest risk.
Developers may choose to jump multiple minor versions at a time to indicate significant features have been added, but are not enough to warrant incrementing a major version number; for example Internet Explorer 5 from 5.1 to 5.5, or Adobe Photoshop 5 to 5.5. This may be done to emphasize the value of the upgrade to the software user, or, as in Adobes case, to represent a release halfway between major versions although levels of sequence based versioning are not limited to a single digit, as in Blender version 2.79.
A different approach is to use the major and minor numbers, along with an alphanumeric string denoting the release type, e.g. "alpha" a, "beta" b, or "release candidate" rc. A software release train using this approach might look like 0.5, 0.6, 0.7, 0.8, 0.9 → 1.0b1, 1.0b2 with some fixes, 1.0b3 with more fixes → 1.0rc1 which, if it is stable enough, 1.0rc2 if more bugs are found → 1.0. It is a common practice in this scheme to lock-out new features and breaking changes during the release candidate phases and for some teams, even betas are lock-down to bug fixes only, in order to ensure convergence on the target release.
Other schemes impart meaning on individual sequences:major.minor death)" will be to change the version number to π, at which point all remaining bugs will become permanent features.
In a similar way, the version number of METAFONT asymptotically approaches e.
1.3. Schemes Apple
Apple has a formalized version number structure based around the NumVersion struct, which specifies a one- or two-digit major version, a one-digit minor version, a one-digit "bug" i.e. revision version, a stage indicator, and a one-byte i.e. having values in the range 0–255 pre-release version, which is only used at stages prior to final. In writing these version numbers as strings, the convention is to omit any parts after the minor version whose value are zero with "final" being considered the zero stage, thus writing 1.0.2 rather than 1.0.2b12, 1.0.2 rather than 1.0.2f0, and 1.1 rather than 1.1.0f0.
1.4. Schemes Microsoft Windows
The Microsoft Windows operating system was first labelled with standard version numbers for Windows 1.0 through Windows 3.11. After this Microsoft excluded the version number from the product name. For Windows 95 version 4.0, Windows 98 4.10 and Windows 2000 5.0, year of the release was included in the product title. After Windows 2000, Microsoft created the Windows Server family which continued the year-based style with a difference: For minor releases, Microsoft suffixed "R2" to the title, e.g., Windows Server 2008 R2 version 6.1. This style had remained consistent to this date. The client versions of Windows however did not adopt a consistent style. First, they received names with arbitrary alphanumeric suffixes as with Windows ME 4.90, Windows XP 5.1 and Windows Vista 6.0. Then, once again Microsoft adopted incremental numbers in the title, but this time, they were not version numbers; the version numbers of Windows 7, Windows 8 and Windows 8.1 are respectively 6.1, 6.2 and 6.3. In Windows 10, the version number leaped to 10.0 and subsequent updates to the OS only incremented build number and update build revision UBR number.
1.5. Schemes Other schemes
Some software producers use different schemes to denote releases of their software. The Debian project uses a major/minor versioning scheme for releases of its operating system, but uses code names from the movie Toy Story during development to refer to stable, unstable and testing releases.
BLAG Linux and GNU features very large version numbers: major releases have numbers such as 50000 and 60000, while minor releases increase the number by 1 e.g. 50001, 50002. Alpha and beta releases are given decimal version numbers slightly less than the major release number, such as 19999.00071 for alpha 1 of version 20000, and 29999.50000 for beta 2 of version 30000. Starting at 9001 in 2003, the most recent version as of 2011 is 140000.
2. Internal version numbers
Software may have an "internal" version number which differs from the version number shown in the product name and which typically follows version numbering rules more consistently. Java SE 5.0, for example, has the internal version number of 1.5.0, and versions of Windows from NT 4 on have continued the standard numerical versions internally: Windows 2000 is NT 5.0, XP is Windows NT 5.1, Windows Server 2003 and Windows XP Professional x64 Edition are NT 5.2, Windows Server 2008 and Vista are NT 6.0, Windows Server 2008 R2 and Windows 7 are NT 6.1, Windows Server 2012 and Windows 8 are NT 6.2, and Windows Server 2012 R2 and Windows 8.1 are NT 6.3, however the first version of Windows 10 was 10.0 10.0.10240. Note, however, that Windows NT is only on its fifth major revision, as its first release was numbered 3.1 to match the then-current Windows release number and the Windows 10 launching made a version leap from 6.3 to 10.0.
3. Pre-release versions
In conjunction with the various versioning schemes listed above, a system for denoting pre-release versions is generally used, as the program makes its way through the stages of the software release life cycle.
Programs that are in an early stage are often called "alpha" software, after the first letter in the Greek alphabet. After they mature but are not yet ready for release, they may be called "beta" software, after the second letter in the Greek alphabet. Generally alpha software is tested by developers only, while beta software is distributed for community testing.
Some systems use numerical versions less than 1 such as 0.9, to suggest their approach toward a final "1.0" release. This is a common convention in open source software. However, if the pre-release version is for an existing software package e.g. version 2.5, then an "a" or "alpha" may be appended to the version number. So the alpha version of the 2.5 release might be identified as 2.5a or 2.5.a.
An alternative is to refer to pre-release versions as "release candidates", so that software packages which are soon to be released as a particular version may carry that version tag followed by "rc-#", indicating the number of the release candidate; when the final version is released, the "rc" tag is removed.
4.1. Modifications to the numeric system Odd-numbered versions for development releases
Between the 1.0 and the 2.6.x series, the Linux kernel used odd minor version numbers to denote development releases and even minor version numbers to denote stable releases; see Linux kernel § Version numbering. For example, Linux 2.3 was a development family of the second major design of the Linux kernel, and Linux 2.4 was the stable release family that Linux 2.3 matured into. After the minor version number in the Linux kernel is the release number, in ascending order; for example, Linux 2.4.0 → Linux 2.4.22. Since the 2004 release of the 2.6 kernel, Linux no longer uses this system, and has a much shorter release cycle.
The same odd-even system is used by some other software with long release cycles, such as Node.js up to version 0.12.
4.2. Modifications to the numeric system Apple
Apple had their own twist on this habit during the era of the classic Mac OS. Unlike traditional version numbering, Apples classic Mac OS minor versions rarely went beyond point-1. When they did, they twice jumped straight to point-5, suggesting the release was "more significant". The complete sequence of classic Mac OS versions not including patches is: 1.0, 1.1, 2.0, 2.1, 3.0, 3.2 skipping 3.1, 4.0, 4.1, 5.0, 5.1, 6.0, 7.0, 7.1, 7.5, 7.6, 8.0, 8.1, 8.5 jumped, 8.6, 9.0, 9.1, 9.2. Thus, "8.5" became its own marketed release to mean "eight and a half", and 8.6 effectively "8.5.1".
Mac OS X since renamed to macOS departed from this trend, in large part because "X" the Roman numeral for 10 is in the name of the product. As a result, all versions of OS X begin with the number 10. The first major release of OS X was given the version number 10.0, but the next major release was not 11.0. Instead, it was named version 10.1, followed by 10.2, 10.3, and so on for each subsequent major release.
In this system, the third number instead of the second denotes a minor release, and a fourth number instead of the third denotes bug-fix/revision releases. Because the first number is always 10, and because the subsequent numbers are not decimal, but integer values, the 11th major version of OS X is labeled "10.10" rather than 11.0. This number scheme continues above point-10, with Apple releasing macOS 10.14 in 2018.
5.1. Political and cultural significance of version numbers Version 1.0 as a milestone
The free-software and open source communities tend to release software early and often. Initial versions are numbers less than 1, with these 0.x version used to convey that the software is incomplete and remains a work in progress.
Version 1.0 is used as a major milestone, indicating that the software is "complete", that it has all major features, and is considered reliable enough for general release. A good example of this is the Linux kernel, which was first released as version 0.01 in 1991, and took until 1994 to reach version 1.0.0.
The developers of the arcade game emulator MAME do not ever intend to release a version 1.0 of the program because there will always be more arcade games to emulate and thus the project can never be truly completed. Accordingly, version 0.99 was followed by version 0.100.
Some commercial software vendors bypass the 1.0 release or quickly release a release with a subsequent version number because 1.0 software is considered by many customers too immature to trust with production deployments.
5.2. Political and cultural significance of version numbers Version numbers as marketing
A relatively common practice is to make major jumps in version numbers for marketing reasons. Sometimes, as in the case of dBase II, a product is launched with a version number that implies that it is more mature than it is; but other times version numbers are increased to match those of competitors.
This can be seen in many examples of product version numbering by Microsoft, America Online, Sun Solaris, Java Virtual Machine, SCO Unix, WordPerfect. Microsoft Access jumped from version 2.0 to version 7.0, to match the version number of Microsoft Word.
Microsoft has also been the target of catch-up versioning, with the Netscape browsers skipping version 5 to 6, in line with Microsofts Internet Explorer, but also because the Mozilla application suite inherited version 5 in its user agent string during pre-1.0 development and Netscape 6.x was built upon Mozillas code base.
Another example of keeping up with competitors is when Slackware Linux jumped from version 4 to version 7 in 1999.
5.3. Political and cultural significance of version numbers Apple
Apple has a particular form of version number skipping, in that it has leveraged its use of the Roman numeral X in its marketing across multiple product lines. Both QuickTime and Final Cut Pro jumped from versions 7 directly to version 10. Like with Mac OS X, the products were not upgrades to previous versions, but brand new programs, branded as QuickTime X and Final Cut Pro X, but unlike Apples desktop operating systems, there were no major versions 8 or 9. As with OS X, however, minor releases are denoted using a third digit, rather than a second digit. Consequently, major releases for these programs also employ the second digit, as Apple does with OS X. In WWDC 2016, they announced that Mac OS X was renamed to macOS.
6. Dropping the most significant element
Suns Java has at times had a hybrid system, where the internal version number has always been 1. x but has been marketed by reference only to the x:
- JDK 1.0.3
- JDK 1.1.2 through 1.1.8
- Java 1.5.0, 1.6.0, 1.7.0, 1.8.0 "Java 5, 6, 7, 8"
- J2SE 1.2.0 "Java 2" through 1.4.2
Sun also dropped the first digit for Solaris, where Solaris 2.8 or 2.9 is referred to as Solaris 8 or 9 in marketing materials.
A similar jump took place with the Asterisk open-source PBX construction kit in the early 2010s, whose project leads announced that the current version 1.8.x would soon be followed by version 10.
This approach, panned by many because it breaks the semantic significance of the sections of the version number, has been adopted by an increasing number of vendors including Mozilla for Firefox.
6.1. Dropping the most significant element Superstition
- SUSE Linux Enterprise skipped version 13 and 14 after version 12 and directly released SLES 15 in July 2018.
- The Office 2007 release of Microsoft Office has an internal version number of 12. The next version Office 2010 has an internal version of 14, due to superstitions surrounding the number 13. Visual Studio 2013 is Version number 12.0 of the product, and the new version, Visual Studio 2015 has the Version number 14.0 for the same reasons.
- Corels WordPerfect Office, version 13 is marketed as "X3" Roman number 10 and "3". The procedure has continued into the next version, X4. The same has happened with Corels Graphic Suite i.e. CorelDRAW, Corel Photo-Paint as well as its video editing software "Video Studio".
- ABBYY Lingvo Dictionary uses numbering 12, x3 14, x5 15.
- Sybase skipped major versions 13 and 14 in its Adaptive Server Enterprise relational database product, moving from 12.5 to 15.0.
- Roxio Toast went from version 12 to version 14, likely in an effort to skip the superstitions surrounding the number 13.
6.2. Dropping the most significant element Geek culture
- Finnix skipped from version 93.0 to 100, partly to fulfill the assertion, "There Will Be No Finnix 95", a reference to Windows 95.
- The Tagged Image File Format specification has used 42 as internal version number since its inception, its designers not expecting to alter it anymore during their or its lifetime since it would conflict with its development directives.
- The SUSE Linux distribution started at version 4.2, to reference 42, "the answer to the ultimate question of life, the universe and everything" mentioned in Douglas Adams The Hitchhikers Guide to the Galaxy.
- A Slackware Linux distribution was versioned 13.37, referencing leet.
7. Overcoming perceived marketing difficulties
In the mid-1990s, the rapidly growing CMMS, Maximo, moved from Maximo Series 3 directly to Series 5, skipping Series 4 due to that numbers perceived marketing difficulties in the Chinese market, where the number 4 is associated with "death" see tetraphobia. This did not, however, stop Maximo Series 5 version 4.0 being released. The "Series" versioning has since been dropped, effectively resetting version numbers after Series 5 version 1.0s release.
8. Significance in software engineering
Version numbers are used in practical terms by the consumer, or client, to identify or compare their copy of the software product against another copy, such as the newest version released by the developer. For the programmer or company, versioning is often used on a revision-by-revision basis, where individual parts of the software are compared and contrasted with newer or older revisions of those same parts, often in a collaborative version control system.
In the 21st century, more programmers started to use a formalized version policy, such as the semantic versioning policy. The purpose of such policies is to make it easier for other programmers to know when code changes are likely to break things they have written. Such policies are especially important for software libraries and frameworks, but may also be very useful to follow for command-line applications which may be called from other applications and indeed any other applications which may be scripted and/or extended by third parties.
Versioning is also a required practice to enable many schemes of patching and upgrading software, especially to automatically decide what and where to upgrade to.
9. Significance in technical support
Version numbers allow people providing support to ascertain exactly which code a user is running, so that they can rule out bugs that have already been fixed as a cause of an issue, and the like. This is especially important when a program has a substantial user community, especially when that community is large enough that the people providing technical support are not the people who wrote the code. The semantic meaning of version.revision.change style numbering is also important to information technology staff, who often use it to determine how much attention and research they need to pay to a new release before deploying it in their facility. As a rule of thumb, the bigger the changes, the larger the chances that something might break. This is one reason for some of the distaste expressed in the "drop the major release" approach taken by Asterisk et alia: now, staff must or at least should do a full regression test for every update.
10. Version numbers for files and documents
Some computer file systems, such as the OpenVMS Filesystem, also keep versions for files.
Versioning amongst documents is relatively similar to the routine used with computers and software engineering, where with each small change in the structure, contents, or conditions, the version number is incremented by 1, or a smaller or larger value, again depending on the personal preference of the author and the size or importance of changes made.
11. Version number ordering systems
Version numbers very quickly evolve from simple integers 1, 2. to rational numbers 2.08, 2.09, 2.10 and then to non-numeric "numbers" such as 4:3.4.3-2. These complex version numbers are therefore better treated as character strings. Operating systems that include package management facilities such as all non-trivial Linux or BSD distributions will use a distribution-specific algorithm for comparing version numbers of different software packages. For example, the ordering algorithms of Red Hat and derived distributions differ to those of the Debian-like distributions.
As an example of surprising version number ordering implementation behavior, in Debian, leading zeroes are ignored in chunks, so that 5.0005 and 5.5 are considered as equal, and 5.5