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.