A referência oficial para o formato da versão do pacote Debian está no Manual de Políticas Debian . O formato é projetado para permitir números de versão “razoáveis” com uma relação de comparação bem definida (se um tanto complexa) para decidir quando uma versão é mais recente que outra.
Na maior parte, a comparação é uma comparação lexicográfica da string. Por exemplo, 1foo
é classificado antes de 1ga
. No entanto, as sequências de dígitos são comparadas em ordem numérica, portanto, foo10bar
é classificado após foo9bar
.
Com uma ordem lexicográfica, uma string é sempre classificada antes de seu prefixo. O caractere til permite um desvio disso: foo~bar
é sempre classificado antes de foo
, bem como antes de qualquer versão que comece com foo
seguida por um caractere diferente de ~
. Isso geralmente é usado para versões beta: 8u60~b22
é classificado antes de 8u60
. Eu não sei porque os pacotes do OpenJDK 8 parecem alternar entre os sufixos -b
e ~b
.
Sufixos Til também são usados para backports de todos os tipos. Por exemplo, se a mesma versão de um pacote estiver presente tanto no Debian stable quanto no testing, e uma correção de segurança precisa ser estável, o pacote stable terá um sufixo como -2~deb1
enquanto a versão em teste (compilada com mais bibliotecas recentes) terão -2
; Dessa forma, o pacote é uma atualização para a versão -1
, mas se um sistema for atualizado de estável para teste, a versão -2~deb1
stable será atualizada para a versão de teste -2
. Backports oficiais usam ~bpoNUMBER
para o mesmo propósito, desta forma uma versão 4.2~bpo7
será atualizada para 4.2
se isso aparecer na distribuição principal.