# deb-version

## NAME



           deb-version - Debian package version number format
    


## SYNOPSIS



           [_epoch_**:**]_upstream-version_[**-**_debian-revision_]
    


## DESCRIPTION



           Version numbers as used for Debian binary and source packages
           consist of three components.  These are:
    
           _epoch_
               This is a single (generally small) unsigned integer.  It may
               be omitted, in which case zero is assumed.  If it is omitted
               then the _upstream-version_ may not contain any colons.
    
               It is provided to allow mistakes in the version numbers of
               older versions of a package, and also a package's previous
               version numbering schemes, to be left behind.
    
           _upstream-version_
               This is the main part of the version number.  It is usually
               the version number of the original (“upstream”) package from
               which the _.deb_ file has been made, if this is applicable.
               Usually this will be in the same format as that specified by
               the upstream author(s); however, it may need to be reformatted
               to fit into the package management system's format and
               comparison scheme.
    
               The comparison behavior of the package management system with
               respect to the _upstream-version_ is described below.  The
               _upstream-version_ portion of the version number is mandatory.
    
               The _upstream-version_ may contain only alphanumerics
               (“A-Za-z0-9”) and the characters **. + - : ~**(full stop, plus,
               hyphen, colon, tilde) and should start with a digit.  If there
               is no _debian-revision_ then hyphens are not allowed; if there
               is no _epoch_ then colons are not allowed.
    
           _debian-revision_
               This part of the version number specifies the version of the
               Debian package based on the upstream version.  It may contain
               only alphanumerics and the characters **+ . ~**(plus, full stop,
               tilde) and is compared in the same way as the _upstream-version_
               is.
    
               It is optional; if it isn't present then the _upstream-version_
               may not contain a hyphen.  This format represents the case
               where a piece of software was written specifically to be
               turned into a Debian package, and so there is only one
               “debianization” of it and therefore no revision indication is
               required.
    
               It is conventional to restart the _debian-revision_ at ‘1’ each
               time the _upstream-version_ is increased.
    
               Dpkg will break the version number apart at the last hyphen in
               the string (if there is one) to determine the _upstream-version_
               and _debian-revision_.  The absence of a _debian-revision_
               compares earlier than the presence of one (but note that the
               _debian-revision_ is the least significant part of the version
               number).
    
       **Sorting algorithm**
           The _upstream-version_ and _debian-revision_ parts are compared by the
           package management system using the same algorithm:
    
           The strings are compared from left to right.
    
           First the initial part of each string consisting entirely of
           non-digit characters is determined.  These two parts (one of which
           may be empty) are compared lexically.  If a difference is found it
           is returned.  The lexical comparison is a comparison of ASCII
           values modified so that all the letters sort earlier than all the
           non-letters and so that a tilde sorts before anything, even the
           end of a part.  For example, the following parts are in sorted
           order: ‘~~’, ‘~~a’, ‘~’, the empty part, ‘a’.
    
           Then the initial part of the remainder of each string which
           consists entirely of digit characters is determined.  The
           numerical values of these two parts are compared, and any
           difference found is returned as the result of the comparison.  For
           these purposes an empty string (which can only occur at the end of
           one or both version strings being compared) counts as zero.
    
           These two steps (comparing and removing initial non-digit strings
           and initial digit strings) are repeated until a difference is
           found or both strings are exhausted.
    
           Note that the purpose of epochs is to allow us to leave behind
           mistakes in version numbering, and to cope with situations where
           the version numbering scheme changes.  It is **not** intended to cope
           with version numbers containing strings of letters which the
           package management system cannot interpret (such as ‘ALPHA’ or
           ‘pre-’), or with silly orderings.
    


## NOTES



           The tilde character and its special sorting properties were
           introduced in dpkg 1.10 and some parts of the dpkg build scripts
           only gained support for it later in the 1.10.x series.
    


* * *