Para uma leitura bastante longa, consulte: link
foo
e tem a versão 2009 e de repente eles decidem mudar a versão e a próxima versão será 10. E agora seu caminho de atualização deve ser de foo-2009 para foo-10, mas o rpm trata foo-2009 > foo-10 e não irá atualizá-lo. Então, mantenedor tem que bater epoch e rpm irá comparar foo-2009 == 0: foo-2009 < 1: foo-10.
A versão deve começar com 1 e toda vez que você lançar um novo pacote - mas com o mesmo tar.gz da mesma versão - você deve aumentar o lançamento. Isso pode ser alterado no scriptlet pós-instalação. Alteração do requisito de tempo de execução. Reconstrua por causa da mudança na ABI da biblioteca requerida. Ou porque maintaner adiciona patch. Geralmente consertando algum motivo de segurança. O formato do campo de liberação não é padronizado, portanto, você pode apenas imaginar por que o mantenedor usou este formato. E, de fato, você não precisa adivinhar como você pode ler o changelog do rpm, onde a mudança deve ser descrita.