web-dev-qa-db-ja.com

Ubuntuは、リリース間のバイナリ互換性に関してどのような保証を提供しますか?

一般的に答えは「PPAを使用する」ことですが、これとは別に...

特定のアーキテクチャのUbuntuのバージョン間の互換性に関するUbuntuのポリシーは何ですか?たとえば、パッケージ内のバイナリが10.04 LTS上に構築され、Ubuntu 12.04 LTSに同じライブラリが存在する場合、Ubuntuは互換性を保証しますか? ISVに関するガイドラインはありますか?

私はかなり検索し、LSB、他のディストリビューションなどとの互換性に関する参考文献を見つけました。Ubuntuのリリースバージョン全体を説明するドキュメントは見つかりません。

7
Matt Ingenthron

バイナリパッケージがライブラリと互換性がないのは、APIまたはABIブレークです。

  • API breakは、ライブラリが提供するインターフェースが以前のバージョンとの互換性がなくなった場合に発生します。例は、メソッドシグネチャへの引数の追加または削除です。

    APIブレイクでは、通常、ソフトウェアを新しいインターフェイスに適合させる必要があり、ライブラリ開発者は可能な限り回避します。

  • ABI breakは、データ型のサイズまたは配置が変更された場合、または低レベルの規則(呼び出し規則など)が変更された場合に発生します。例は、関数のパラメータータイプをintからsize_tに変更することです。 ABIブレークは一般に、バグの修正またはAPIの変更によって導入されます。

    ABIブレークでは、最新のライブラリヘッダーでプログラムを再コンパイルするだけで済みます。

そうは言っても、APIおよびABI違反に関するUbuntuのポリシーは何ですか?

  • 新しいUbuntuリリースでは、常に最新のソフトウェアライブラリを含む最新のソフトウェアを提供しようとします。

  • 新しいUbuntuリリースでは、可能な限り後方互換性を保とうとします。たとえば、UbuntuはGTK + 2とGTK + 3の両方を同時に提供します。

  • Ubuntuのリリースが作成されると、重要なバグ修正のみがそのリリースのアーカイブに到達できるという意味で、frozenです(例外と特別なものがあります)この規則に関するケースがありますが、そのような例外は少数のアプリケーションに限定されます)。

  • 単一のUbuntuリリースの更新全体で、APIが破損する可能性はありません。これは、「バグ修正のみ」ポリシーによって暗示されています。

  • 以前に言ったように、いくつかのバグ修正によりABIブレークが導入される可能性があります。これはまれなケースですが、これは可能であり、重要なバグを修正するためにABIブレークが必要な場合は導入されます。

  • Ubuntuのメジャーリリース全体で、APIとABIの両方のブレークが導入される場合があります。これは、常に最新のソフトウェアを提供しようとするためです。

簡単に言えば、プログラムがUbuntuリリース間で機能するかどうかは、使用するライブラリに本当に依存するかどうかとそれらに関連するポリシーです。また、パッケージがUbuntuリリース更新間で互換性があるかどうかを確認することはできません。

それが最も技術的な部分でした。この重要な序文を述べたので、別の観点から問題と戦うことができます:1。多くの標準が存在し、2。フリーソフトウェアが標準を尊重しようとすることを考慮してくださいほとんどのライブラリ(小さくて重要でないライブラリも含む)は、リリース間でAPI/ABIを変更することはほとんどありません。

そのため、複数のUbuntuバージョンに対して単一のバイナリパッケージを提供することもできますが、変更ログに注意してください。また、パッケージの依存関係についても明確にしてください。 GTK + 3に依存しているとは言いませんが、範囲(3.Xから3.Y)を明確に述べてください。これは、ユーザーが重大な間違いを防ぐのに役立ちます。

6

私は少し離れているかもしれませんが、これについて私が少し知っていることを話させてください。例として、パッケージnvidia-313とバージョン313.18-0ubuntu1~xedgers~raring2を使用します

基本レベルでは、特定のUbuntuバージョン用にパッケージが作成されると、以下が保持されます。

  • それが作られたアーキテクチャ(例:32ビット、64ビット)
  • どのリリース向けに作成されたか(例:12.04、12.10、raring、oneric ..)
  • そのパッケージの特定のバージョン(上記の例ではraring2を見ることができます。これは、0から開始する場合は3番目のバージョン、1から開始する場合は2番目のバージョンのいずれかを意味します。もちろん、これは使用したPPAとメンテナーが念頭に置いていた)

このすべてを保証するものは何ですか。以下を保証します:

  1. パッケージは、その特定のアーキテクチャで、その特定のUbuntuバージョンに対して「正しく」動作します。これは、パッケージで使用される可能性のあるライブラリが手動で変更されたり、クリーンな環境で改ざんされたりしていないことを前提としています。

  2. パッケージは、どのアーキテクチャのバージョンであるかを認識します。別の別のもので使用されている場合、警告が表示されるか、単にインストールに失敗します。

  3. UbuntuのほとんどのPPA開発者とメインリポジトリには、パッケージのバージョンがあります。同じバージョン(13.04、12.10、12.04のNvidia 313など)である可能性がありますが、パッケージ化されたとき、他のパッケージの特定のバージョン(依存関係または事前依存)と一部のライブラリの特定のバージョンを使用しましたUbuntuのそのバージョンに必要です。したがって、異なるUbuntuバージョンに対して同じパッケージが表示されます。

それが作られたものよりも将来のバージョンまたは古いバージョンで使用された場合、それは動作しますか?場合によってはそうなりますが、少なくとも警告が表示されます。ほとんどの場合、それは実際に上記のパッケージの依存関係に依存します。たとえば、12.04で一部のライブラリを使用した場合、13.04の時点で少し変更または変更されていない場合でも、このパッケージは13.04でも正しく動作する可能性があります(それでももちろん、他の問題を回避するために少なくとも同じアーキテクチャであると仮定して、12.04で作成されました。

あなたが作っている特定の質問に到達するには:

パッケージ内のバイナリが10.04 LTSでビルドされ、Ubuntu 12.04 LTSに同じライブラリが存在する場合、Ubuntuは互換性を保証しますか?

10.04と12.04の両方に同じバージョン、同じアーキテクチャ(および同じ事前依存関係、バージョンなど)の同じライブラリが存在する場合、パッケージはUbuntuの両方のバージョンで動作すると考えられます。数か月の間にLinuxディストリビューションが変化する速度は非常に大きいため、これはほとんどありません。

多くのライブラリが変更され、多くの更新が行われ、多くの改善が追加されました。そのため、たとえば10.04には存在しなかったものが12.04に存在する可能性があり、たとえば、より少ないライブラリを使用する必要がなくなります(パッケージが10.04で12個のライブラリを使用していた場合、12.04では2同じ目的)。これは、各アプリをコンパイルおよびパッケージ化するツールに加えられた変更も考慮に入れています。毎年多くの新しいテクニックが登場します。パッケージを最適化する、圧縮する、読むなど、さまざまな方法があります。

だから、これらすべてを私の小さな知識に基づいて、Ubuntuの異なるバージョンのパッケージ間に時間があればあるほど、パッケージが両方のUbuntuバージョン間で機能するという保証はあまりありません。

1
Luis Alvarado