Linux開発者がユニバーサルパッケージフォーマットを作成できないのはなぜですか?


14

ベンダーバイナリパッケージ形式の選択は、マーフィーの法則の形式によって決定されるようです。使用しないすべてのディストリビューションにはパッケージがあります。(関連:ソフトウェアスタックの配布依存関係を満たす配布は存在しません)。

これは、「ビルドワンス、どこでも実行」パッケージ形式の出現を見ていない、政治的な問題なのか、それともより深い問題なのか?


3
分布を互いに区別するものについては表面的な理解しか持っていないようです。パッケージシステムを統一しても、パッケージがディストリビューション間で交換可能であることを意味しません。したがって、あなたの質問は無意味です。

3
ホップ、分布間の違いの表面的な説明を少なくする答えを書いてみませんか?質問は素朴に述べられていますが、与えられるのを待っている深い技術的な答えがあります。
jldugger 09年

あなたは本当に探している「Linuxの標準ベース」
ビル・ワイス

Windows開発者がユニバーサルパッケージフォーマットを作成できないのはなぜですか?ここではWindowsを袋に入れていませんが、ソフトウェアをインストールする方法は同じくらい多く、Linuxのような単一のリポジトリもありません...(これは修辞的な質問です、btw)
Mark Henderson

回答:


24

これについてジョエル・スポルスキーを引用するのが適切だと思われる:

(ちなみに、ブログのシンジケーションフィード形式の難解でありながら政治的に荷電された世界をフォローしている人にとっては、同じことが起こっていることがわかります。RSSはいくつかの異なるバージョン、不正確な仕様、そして、Atomと呼ばれるさらに別の形式を作成することにより、クリーンなすべてのものまでの試みは、いくつかの異なったRSSのバージョンを加えたアトムの1つのバージョン、不正確な仕様や政治的な戦いの多くをもたらした。あなたは第3の選択肢を作成することにより、2つの相反する力を統一しようとすると、最終的には3つの反対勢力になります。何も統一しておらず、実際には何も修正していません。)

(強調を追加)

Linux用の(少なくとも)2つのパッケージングシステムがあります。それは実際には良いことです。単一のシステムは、単に3番目のシステムを作成します。


Re:3番目の選択肢を作成して2つの敵軍を統合しようとすると、3つの敵軍になります。 参照xkcd.com/927
ジェームズバーネット

20

これには多くの理由があり、物事を視野に入れるために少し歴史があります。

「Linux」について話すとき、私たちが一般的に言及しているのは、多くの異なるLinuxディストリビューションの 1つであることを忘れないでください。「Linux」は、実際には単なるオペレーティングシステムカーネルです。

Linuxの当初の目標は、PC(当初は386)で実行されるUnixベースのシステムを作成することでした。最初のステップは、カーネル自体を作成することでした。一方で、Linus Torvalds氏は、カーネルに取り組んでいたリチャード・ストールマンは、自分で働いていたフリーの下で、UnixシステムGNU(GNUのはないのUnix)プロジェクト。要するに、GNUには関連するユーティリティ(Cコンパイラ/ライブラリ/ビルドツール、シェル、テキストエディタなど)がありますが、実行するコアがなく、Linuxにはコアがあり、その上で実行して、大衆に役立つようにします。

このコンバージェンスは、正式にはGNU / Linuxとして知られるようになりました。多くのディストリビューションがまだGNU / Linuxディストリビューションと呼ばれていることがわかります。

GNU / Linuxの自由で開かれた性質のために、だれでもそれを手に入れ、特定の好みに合わせてバンドルされたシステムを作成できます。その結果、これらのシステムを作成するためにさまざまな構成方法の多くの異なるストリームが使用され、それぞれに適合するほぼ同じ数の異なるパッケージ管理システムを作成するという副作用がありました。

それぞれの完全なシステムには、長年にわたってこだわる独自の強力なフォロワーがいて、今日のようになりました:RPMAPT / dpkg、Gentoo's Portageのような広く使用され、深く根付いた安定したパッケージ管理システム。

Autopackageなどの問題を解決しようとしているプロジェクトがありますが、サポートされているさまざまなパッケージ管理システムの継続的な進化は、従うべき多くの動いている目標があることを意味します。

一部のソフトウェアベンダーは、必要な特定のバイナリと依存関係のコピーを、特定のシステムで動作する1つの大きなパッケージにバンドルしています。


8
これだけではありません。たとえば、全世界がrpmで統合されたとしても、一度パッケージを入手することはなく、OPが想定している世界をどこでも実行できます。パッケージは、他のすべてのパッケージに依存しているため、ディストリビューションの大部分に固有です。「パッケージを一度、どこでも実行できる」世界を持つ唯一の方法は、単一のパッケージングシステムだけでなく、単一のディストリビューションだけを持つことです。
シアン

9

とにかく、同じパッケージ形式を使用しても役に立ちません。他のディストリビューションで同じパッケージを使用することはできません。同じディストリビューションの異なるバージョンで使用することはできません。また、パッケージをビルドしても同じ問題が発生する可能性があります。

パッケージをインストールするには、パッケージのビルド中に形成される依存関係を満たす必要があります。パッケージをビルドするには、ビルドの依存関係を満たす必要があります。そして、これらのことは変わります。変更を実装できるようにするには、変更後に機能するように変更できるパッケージのみをサポートする方が簡単です。

すべての依存関係が同じ場合、異なるディストリビューションまたは同じディストリビューションの異なるバージョンにはなりません。


4
ライブラリをバージョン管理し、バージョンの依存関係を使用して、言及した問題を解決することはできませんか?
jldugger 09年

あるバージョンのデブを別のバージョンで使用することはできないと言います。それは完全に真実ではありません、その規則には例外があります。パッケージの大部分がpythonである場合、またはすべてのビットが静的にコンパイルされている場合は可能です。パッケージの一部としてすべての依存関係を単純に含めるベンダーもいくつかありますが、これはディスク容量を浪費しますが、クロスプラットフォームパッケージを作成します。
ゾレダチェ2009年

パッケージがarch:all、またはスクリプト言語であっても、python2.4とpython2.6には大きな違いがあり、ビルドされたプラットフォームで機能するパッケージが作成され、他のパッケージでは失敗します。
jldugger

はい、ライブラリの依存関係だけではありません。
iny 2009年

debianの更新のいくつかは、ファイルが置かれる場所を変更したか、以前に手動で管理されていた設定ファイルを更新するための標準化されたシステムを提供しました。
pjc50

7

「ここでは発明されていない症候群」が少しあると思います。DebianのパッケージングシステムはRedHatよりも前のものですが、多くの点で優れていますが、RedHatの切り替えは決して見られません。代わりに、多くの人が「apt-rpm」を使用しており、rpmファイルを使用したaptの利点のいくつかを提供しようとしています。


4
apt-rpmはかなり長い間(1年半前の最後のリリース)死んでおり、ほとんどの人がyumを使用するようになりました。ヤム自体はがちの提供を光って素敵な機能のかなり多く..提供
rasjani

1
Debianのパッケージングが今日のRedhatのパッケージよりも優れているとは思わない。以前はDebianの方がアップデートシステムが優れていましたが、それはもはや真実ではないようです。ヤムはとても良くなった。スマートに比べてまだ遅いが、非常に管理しやすいです。
niXar 09

1
私が知っているのは、前回CentOSで作業していたとき、依存関係の地獄に陥る可能性がはるかに高く、apt-rpmに切り替えるとこれらの問題のほとんどが修正されたことです。
ポールトムブリン

1
RedhatのRPMパッケージはEDS(極端な依存性症候群)に苦しんでいます。これはRPMの解説ではなく、Redhatです。Yumはapt-getとapt-searchの素晴らしいコピーであり、RPMコマンドライン呼び出しの以前の難解な世界に使いやすさをもたらします。
kmarsh

3
実際には、.debおよび.rpmパッケージ形式は技術的にもほぼ同じです(ただし、IMO .debには、より優れた依存関係処理、特にバージョン依存、提供、競合、仮想パッケージがあります)。apt-getは技術レベルでは輝いていますが、実際にdebianのパッケージを際立たせるのは、パッケージが準拠しなければならない標準を設定する明確に定義された開発者ポリシーのセットです。ubuntuパッケージはそれを大部分継承し、ubuntuはそれに付随する開発者文化も継承します。
cas



2

クレタス、ウェイン、イニーはこれにかなりよく答えたと思う。本当に付け加えたいのですが、大したことではありません。私は、Gentoo(portage)、SUSE(rpm / zypper)、およびOpenBSD(パッケージとポート)がある混合環境で働いています。それらのいずれかにパッケージをインストールすることは難しくなく、私は彼らが使用しているフォーマットを本当に気にしません。

ソフトウェアのパッケージングの観点からも、それほど難しくありません。Gentoo、RPMベースのディストリビューション、またはdebベースのディストリビューションであっても、実際には、ソフトウェアを構築してメタデータを追加するためのレシピを作成するだけです。パッケージ化しようとしているもののビルドシステムが完全に狂っていなければ、通常はパッケージを作成するために栄光に満ちたシェルスクリプトを書くだけで済みます。


1

さて、tarボールには常に静的にコンパイルされたバイナリがあります.... ;-)


1
別名「スラックウェア」。
ポールトムブリン

残念ながら、静的にコンパイルされたバイナリには、実行時にシステムライブラリ(特にnsswitch)をロードする必要がある問題があります。
pjc50

1

それは単なるカーネルであるため、「Linux」の標準バイナリインターフェイスの定義はありません。奇妙なことに、ソフトウェアスタックはカーネル以上のものとインターフェイスする必要があり、数百の異なるソースツリー間で標準のABIを維持するという特別な課題を提示します。

優れたパッケージングツールのトピックでは、Debian GNU / Linuxが優れたバイナリパッケージング形式であることを好みます。標準のツールとアプリケーションに対する私のニーズの90%を満たしました。残りの10%は、フリーでないコンポーネントまたはバグの多い共有ライブラリの依存関係が含まれるため、ソースから構築されます。これらのアプリケーションをデプロイする必要がある場合、実稼働クラスター用のカスタムバイナリを構築します。


1

ビルドワンスを取得するには、いくつかの重要な機能が必要な同じディストリビューションを全員に強制することなく、どこでもパッケージ形式を実行します。

  • グローバルに一意なパッケージの命名。2人の人/ディストリビューションが同じ名前の異なるパッケージを個別に作成できないようにします。

  • パッケージの要件が競合する場合に、異なるバージョンのライブラリを並行してインストールする機能。ディストリビューションは、使用する各ライブラリのバージョンを決定し、すべてのパッケージがそのバージョンを使用するように強制できます。ディストリビューション全体で機能するシステムは、より柔軟でなければなりません。

ゼロインストールは、次の両方の機能提供します。

  • 名前はURIです(例:http : //rox.sourceforge.net/2005/interfaces/ROX-Filer)。ドメインの所有者のみがデフォルトでその名前空間内にパッケージを作成できます。

  • 各パッケージの各バージョンは、独自のディレクトリに配置されます。各アプリケーションは、互換性のあるバージョンで、必要なライブラリのみを認識します。

たとえば、Editアプリケーションは、次のようにPython <3に依存しています。

<command name="run" path="Edit/AppRun">
  <runner interface="http://repo.roscidus.com/python/python">
    <version before="3"/>
  </runner>
</command>

参照:http : //www.osnews.com/story/16956/Decentralised-Installation-Systems

[注:私は0install開発者です]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.