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
parasize_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.