Que garantias o Ubuntu fornece em relação à compatibilidade binária entre as versões?

7

Eu sei que geralmente a resposta é "use um PPA", mas separado disso ...

Qual é a política do Ubuntu sobre compatibilidade entre versões do Ubuntu para uma dada arquitetura? Por exemplo, se um binário em um pacote é construído em 10.04 LTS e as mesmas bibliotecas existem no Ubuntu 12.04 LTS, o Ubuntu garante compatibilidade? Existem orientações para os ISVs?

Eu pesquisei bastante e encontrei referências sobre a compatibilidade com o LSB, outras distribuições, etc. Eu não estou encontrando um documento que descreve as versões de lançamento do Ubuntu.

    
por Matt Ingenthron 30.01.2013 / 16:31

2 respostas

6

O que torna um pacote binário incompatível com uma biblioteca é uma quebra de API ou ABI.

  • Uma quebra de API ocorre quando a interface oferecida pela biblioteca é alterada de modo que não é mais compatível com a versão anterior. Um exemplo é a adição ou a remoção de um argumento de uma assinatura de método.

    As quebras de API geralmente exigem que você adapte seu software à nova interface e sejam evitadas ao máximo pelos desenvolvedores de bibliotecas.

  • Uma quebra de ABI ocorre quando o tamanho ou o alinhamento dos tipos de dados é alterado ou as convenções de baixo nível (como convenções de chamada) são alteradas. Um exemplo é modificar o tipo de parâmetro de uma função de int para size_t . Quebras ABI geralmente são introduzidas apenas por correções de bugs ou por mudanças na API.

    As quebras de ABI exigem que você apenas recompile seu programa com os cabeçalhos de biblioteca mais recentes.

Dito isto, qual é a política do Ubuntu sobre quebras de API e ABI?

  • Versões mais recentes do Ubuntu tentam oferecer sempre o software mais recente, incluindo as mais recentes bibliotecas de software.

  • Novos lançamentos do Ubuntu tentam ser o mais compatível possível. Por exemplo, o Ubuntu oferece o GTK + 2 e o GTK + 3 ao mesmo tempo.

  • Uma vez que uma versão do Ubuntu é feita, ela é congelada , no sentido de que apenas importantes correções de bugs podem alcançar o arquivo para aquela versão (há exceções e casos especiais em relação a essa regra, mas essas exceções são limitadas a um pequeno conjunto de aplicativos).

  • Nas atualizações de um único lançamento do Ubuntu, não há chances de quebras de API. Isso está implícito na política "somente correção de erros".

  • Como eu disse anteriormente, algumas correções de bugs podem introduzir quebras de ABI. Apesar de ser um caso raro, isso é possível e, se uma quebra da ABI for necessária para corrigir um bug importante, ela será introduzida.

  • Nos principais lançamentos do Ubuntu, podem ser introduzidos intervalos API e ABI. Isso porque tenta oferecer sempre o mais novo software.

Longa história curta: se o seu programa funcionará nos lançamentos do Ubuntu realmente depende das bibliotecas que ele usa e das políticas em torno deles. Além disso, você não pode ter certeza se o seu pacote será compatível com as atualizações de versão do Ubuntu.

Essa foi a parte mais técnica. Tendo dito este importante prefácio, podemos lutar contra o problema de um ponto de vista diferente: considere que 1. existem muitos padrões, 2. software livre tenta respeitar os padrões tanto quanto possível, e 3. a maioria das bibliotecas (mesmo as pequenas e sem importância) dificilmente mudará suas API / ABI nas versões.

Portanto, fique à vontade para oferecer um único pacote binário para várias versões do Ubuntu, mas fique de olho nos changelogs. Além disso, lembre-se de esclarecer suas dependências de pacote: por exemplo, Não diga que isso depende do GTK + 3, mas indique claramente os intervalos (de 3.X a 3.Y). Isso ajudará seus usuários a evitar erros graves.

    
por Andrea Corbellini 30.01.2013 / 17:49
1

Eu posso estar um pouco fora, mas deixe-me dizer o pouco que eu sei sobre isso. Vou usar como exemplo o pacote nvidia-313 com versão 313.18-0ubuntu1~xedgers~raring2

No nível básico, quando um pacote é criado para uma versão específica do Ubuntu, ele:

  • Arquitetura para a qual foi feito (por exemplo: 32 bits, 64 bits)
  • Para qual release foi feito (por exemplo: 12.04, 12.10, raring, oneric ..)
  • Qual versão específica do pacote é (No meu exemplo acima, você pode ver raring2, o que significaria a versão 3 do mesmo se a partir de 0 ou a 2ª se a partir de 1. Isso depende do PPA I usado e o que o mantenedor tinha em mente)

O que tudo isso garante? Garante que:

  1. O pacote funcionará "corretamente" para essa versão específica do Ubuntu, com essa arquitetura específica. Isso supõe que as bibliotecas que podem ser usadas pelo pacote não foram alteradas manualmente ou adulteradas em um ambiente limpo.

  2. O pacote saberá quais arquiteturas são uma versão. Se for usado em outro diferente, ele dará um aviso ou simplesmente falhará na instalação.

  3. A maioria dos desenvolvedores de PPA e repositórios principais do Ubuntu terão uma versão de um pacote. Pode ser a mesma versão (como uma Nvidia 313 para 13.04, 12.10, 12.04 ...) mas quando foi empacotada, usou versões específicas de alguns outros pacotes (Dependências ou pré-dependências) e algumas versões específicas de algumas bibliotecas necessário para essa versão do Ubuntu. Daí vendo o mesmo pacote para diferentes versões do Ubuntu.

Funcionará se usado em uma versão futura ou anterior à que foi feita, a maioria não. Alguns casos, mas pelo menos ele vai te dar um aviso. Na maioria dos casos isso realmente depende das dependências do pacote, já que, se ele usou algumas bibliotecas em 12.04 que não mudaram ou mudaram um pouco quando 13.04, este pacote pode ainda funcionar corretamente em 13.04 (mesmo que seja foi feito para 12.04), assumindo que é pelo menos a mesma arquitetura para evitar outros problemas.

Para chegar a uma pergunta específica que você está fazendo:

  

se um binário em um pacote é construído em 10.04 LTS e as mesmas bibliotecas   existem no Ubuntu 12.04 LTS, o Ubuntu garante compatibilidade?

Se as mesmas bibliotecas existirem em ambos, 10.04 e 12.04, com a mesma versão, mesma arquitetura (E as mesmas pré-dependências, versões dele, etc.), então acredito que o pacote funcionará em ambas as versões do Ubuntu. Agora, isso não é muito provável, já que a velocidade com que qualquer distro do Linux muda ao longo de um par de meses é enorme.

Muitas bibliotecas mudam, muitas atualizações são feitas, muitas melhorias são adicionadas. Então, algo que não existia em 10.04, por exemplo, poderia existir em 12.04 que eliminaria a necessidade de, por exemplo, usar menos bibliotecas (como se um empacotado usasse 12 bibliotecas em 10.04, mas em 12.04 precisaria apenas de 2 para realizar o mesmo objetivo). Isso também está levando em consideração as alterações feitas nas ferramentas que compila e empacotam cada aplicativo. Muitas novas técnicas aparecem a cada ano, muitas maneiras de otimizar pacotes, comprimir, ler, etc.

Então, baseando tudo isso no meu pouco conhecimento, eu acho, quanto mais tempo existir entre um pacote em diferentes versões do Ubuntu, menos provável será a garantia de que o pacote funcionará entre as duas versões do Ubuntu.

    
por Luis Alvarado 30.01.2013 / 17:41