私はlinuxtouchpad.orgでタッチパッドハッカーのためのドキュメントを書いていますが、どのDebianパッケージがlibinputのビルド依存関係を持っているかを説明しようとしています(たとえば、それが正しいかsudo apt build-dep libinput
どうかsudo apt build-dep libinput10
?)
なぜ私たちは一つ持っていますかlibinput10
?私はDebianディストリビューションでlibinput5
古いdebパッケージの証拠を見ました。jessie
libinputはX
バージョンアップされていますが、他のlibinputパッケージ(libinput-bin
libinputやlibinputなどlibinput-dev
)がそうでないのはなぜですか?
libinput
最新バージョンのソースライブラリ自体は、1.19.2
「5」または「10」サフィックスとは関係がないようです。
答え1
Debian で使用するパッケージングツール (dpkg) は、同じパッケージの複数のバージョンを同時にインストールすることをサポートしていません。したがって、同じソフトウェアの複数のバージョンをインストールするには、各バージョンが異なる名前のパッケージに存在する必要があります。
ライブラリを使用する異なるプログラムが異なるバージョンのライブラリに対して構築されるため、同じ共有ライブラリの複数のバージョンをインストールすることが可能である必要があります。特定の時点でlibinputを使用するすべてのプログラムがバージョン10用に構築されていても、永遠にそうではありません。バージョン11がリリースされると、ライブラリを使用するすべてのプログラムがすぐに再構築されるわけではないので、バージョン10と共にインストールすることが可能でなければなりません。
この制限は、共有ライブラリ以外のほとんどのパッケージには適用されません。/lib/udev/libinput*
複数のバージョンのソフトウェアを同時にインストールする理由はないため、複数のバージョンのソフトウェアをインストールする必要はありませんlibinput-bin
。複数のバージョンのプログラムバイナリを構築するには、libinput-dev
複数のバージョンを同時にインストールするだけで、libinput
Debianはパッケージングでそれをサポートしようとしません。
ライブラリが互換性のない方法で変更されるたびにライブラリパッケージを変更する必要があるため、Debianはライブラリが以前のバイナリが変更できないように変更されるたびに、ライブラリ名と数字でライブラリパッケージ名のルールを定義します。番号が変更されます。新しいライブラリを使用しないでください。つまり、ライブラリパッケージのバージョン番号はいつでも変更する必要があります。ABI多様性。
アップストリームのバージョン番号付け規則に応じて、ABIの変更はライブラリのバージョン番号のパターンと一致している場合とそうでない場合があります。メジャーバージョン番号には非常に広範な(しかし普遍的ではない)規則があります。アプリケーションプログラミングインターフェースAPI 変更とはほとんど常に ABI 変更を意味しますが、多くの ABI 変更には互換性のない API 変更は含まれません。ライブラリに何の変更もなく、他のライブラリの変更によってABIが変更された場合にも可能です。
ライブラリファイル自体には、ライブラリが互換性のない方法で変更されたときに変更される名前が含まれています。soname。この一意の名前は、動的ローダーが正しいバージョンを選択する方法です。必須ではありませんが、ほとんどのライブラリは次の形式のsonameを使用します。libfoo.so.N
ここで、NはABIが互換性のない方法で変更されるたびに変更される整数です。 DebianのLibinputはこの規則に従い、現在のN値は10です。
$ readelf -d /usr/lib/x86_64-linux-gnu/libinput.so.10.13.0 | grep SONAME
0x000000000000000e (SONAME) Library soname: [libinput.so.10]
.10
ABIが互換性のない方法で変更されると、このセクションは変更されます。.13.0
ABIが以前のバージョンと互換性のある方法で変更されると、このセクションも変更されます。
詳細については、次を参照してください。