Por que os nomes dos pacotes contêm números de versão?

15

Ao trabalhar com o Ubuntu e outras distribuições baseadas no Debian, notei que os pacotes nos repositórios de software geralmente contêm o maior número de versão.

Por exemplo,

  • Apache: apache2
  • Tomcat: tomcat7
  • PHP: php5
  • Vinho: wine1.4
  • MySQL: mysql-server-5.5

No entanto, noto que não há pacote apache1 disponível e semelhante para o restante. Se o nome do pacote for alterado com atualizações para o software, isso não atrapalha um dos principais objetivos do gerenciamento de pacotes (upgrades fáceis)?

Se o Apache 3 for lançado amanhã, terei que instalar o pacote apache3 manualmente se eu quiser atualizar? '

    
por Tom Marthenal 30.07.2012 / 03:34

2 respostas

25

Pacotes são nomeados assim, onde há (ou foi) uma necessidade de facilitar a transição entre duas versões principais de um pacote, e o tempo necessário para isso é esperado para ser longo. Durante o período de transição, tanto as versões novas quanto as antigas são mantidas disponíveis, com o entendimento de que, em algum momento futuro, as versões mais antigas serão descontinuadas.

Às vezes, o período de transição está acontecendo durante o lançamento do sistema que você está usando atualmente. Para alguns pacotes, isso acontece o suficiente para que você espere ver versões de pacotes transitórias em todos os novos lançamentos do sistema. As ferramentas de desenvolvimento de software geralmente se enquadram nessa categoria, já que a atualização para novas ferramentas no mesmo cronograma das versões do sistema pode não ser prática. A dependência de minha empresa em versões específicas do GCC, Autoconf e Perl pode estar em um ciclo de 5 anos, enquanto meu sistema operacional pode estar em um ciclo de atualização de 3 anos. Assim, fica mais fácil para mim adotar novos sistemas operacionais se incluir minhas versões mais antigas de alguns pacotes, além do que estava em uso no momento em que o novo sistema operacional estava sendo desenvolvido.

Outras vezes, essas mudanças importantes ocorreram há muito tempo, no passado, e agora todos estão na versão atual. Este é o caso do Apache, por exemplo. A mudança de 1.3 para 2.0 foi um negócio muito maior do ponto de vista de compatibilidade do que qualquer outra versão 2.x, portanto, quando todos estavam fora de 1.3, não era mais necessário oferecer várias versões do Apache dentro de uma versão do sistema operacional. Mas, uma vez que você tenha todos usando o pacote apache2 , não há um argumento muito bom para renomeá-lo de volta para apenas apache . Isso causaria um aborrecimento de atualização desnecessário. Além disso, onde havia uma necessidade percebida no passado de fornecer temporariamente duas versões paralelas, a necessidade provavelmente voltará a ocorrer no futuro.

Essa prática de nomeação de pacotes geralmente ocorre apenas com bibliotecas ou pacotes principais importantes. Para pacotes mais periféricos, espera-se que você atualize para o que estiver atual no momento.

As bibliotecas são mais comumente tratadas dessa maneira do que as aplicações porque, por sua natureza, outros pacotes dependem delas. Quanto mais popular é uma biblioteca, mais impraticável é exigir que todos os outros pacotes, dependendo dela, sejam reconstruídos e vinculados a ela puramente para que a biblioteca possa ser atualizada para uma nova versão principal sem esse período de transição.

Muitas vezes, quando um aplicativo está sendo tratado dessa maneira, é porque ele contém um elemento de biblioteca. Por exemplo, o Apache não é apenas um servidor web, ele também fornece uma API de desenvolvimento para os plugins. ( mod_foo e tal). Se alguém tiver um antigo mod_something vinculado ao plug-in do Apache 1.3 ABI e não tiver feito upgrade dele para usar a API 2.0 mais recente, será conveniente se seu SO continuar oferecendo o antigo Apache 1.3 até que todos os criadores de plugins têm a chance de atualizar seus plugins.

    
por 30.07.2012 / 03:42
3

Pelo que vi, as razões para isso são:

  • Ajude a migração em grandes versões de pacotes: quando o PHP 5 foi lançado, talvez um precise ter uma instalação do PHP 4. Isso permite que você tenha uma escolha entre as versões (pelo menos até que a versão mais antiga seja obsoleta).

  • Continuar a fornecer atualizações para uma versão mais antiga de um software (por exemplo, após o lançamento do Apache 3, pode ser necessário para corrigir o Apache 2) sem atualizá-lo para uma versão principal mais recente.

Por exemplo o kernel do Linux tem (a partir de hoje) as versões estáveis 3.5, 3.4.7, 3.2.24, 2.6.35.13 etc ... Se você está rodando o 2.6.35 em um sistema e quer mantê-lo atualizado, mas não atualiza este kernel, você pode instalar o pacote adequado.

    
por 30.07.2012 / 03:44