ソフトウェアが単一のファイルにパッケージされていないのはなぜですか?


15

ほとんどのWindowsソフトウェアは単一の実行可能ファイルにパッケージ化されています。セットアップファイルをダブルクリックすると、すべてのファイル、バイナリ、およびライブラリがセットアップされます。

Ubuntuまたはより一般的にはlinuxパッケージの依存関係を理解し​​ています。しかし、なぜこれらが存在するのでしょうか。すべての依存関係を持つ単一のファイルを構築することはできませんか?この方法の問題点は何ですか?

理由を詳しく説明してください。

回答:


17

依存関係がプログラム自体に含まれていない主な理由は、システムのコンポーネントを簡単に更新できるようにするためです。

1つの依存関係が5つの異なるプログラムによって使用されていると想像してください。その依存関係にセキュリティの脆弱性が見つかった場合、5つのコピーではなく、1つのコピーのみを更新する必要があります。

ユーザーにとって、複数のパッケージをインストールする必要はありません。必要なソフトウェアをインストールすると、その依存関係が自動的にインストールされます。


.debパッケージと.exeパッケージの主な違いは、Ubuntuソフトウェアが単一のファイルで公開されていないことではありません。主な違いは、パッケージを含むソフトウェアリポジトリの概念全体であり、更新プログラムを簡単に提供できます。

これは、インターネットに直接接続していないコンピューターでは問題になる場合があります。APTonCDなど、これらの問題を最小限に抑えるツールがあります。


2
インターネットへの適切なアクセスなしで私たちのようなユーザーと時々問題になる
アンワー

2
私のインターネットが遅いので、私はこの機能が嫌いです。そして、ダウンロードしたubuntuソフトウェアを共有することは非常に難しいです(私は毎日やっているのでapt-cacheのバックアップを提案しないでください)
-Tachyons

1
しかし、その後、あなたは実際に機能を愛すべきです!なぜなら、ライブラリを5回ダウンロードするのではなく、一度だけダウンロードするからです。Ubuntuインストールのすべてのプログラムに、独自のGTK +またはQtインストールが付属していると想像してください!それらは巨大です。
マイケルワイルド

4

それは完全に真実ではありません。Ubuntuソフトウェアは通常、1つの.debファイルで提供されます。.debファイルは、非常に単純(かつ不正確)であるため、Windows用の対応する.exeファイルです。Windowsのプログラムを含むすべてのプログラムは、オペレーティングシステム(ライブラリ)の他のファイルへの依存関係を使用します。インストールプロセスは、OSによって多少異なります。Ubuntuのソフトウェアセンターを使用してプログラムをダウンロードする場合、システムにインストールされていない依存関係と実際のプログラムファイルのみをダウンロードします。これにより、システムが重複ファイルや重複する機能でオーバーロードされ、競合することになります。

信じられないかもしれませんが、WindowsまたはUbuntuにプログラムをインストールすることの唯一の違いは、ユーザーに提供する情報の量です。Windowsは、ユーザーが愚かであると考えており、exeファイルの実行時にインストールされているものをユーザーに知らせたくないと考えています。Linuxでは、その情報を取得します。一部のユーザーにとっては詳細すぎますが、他の(ほとんどの)ユーザーは本当に感謝しています。

それが理にかなっていることを願っています。


2
絶対的に正しい。他のディストリビューション(Ubuntuほど良くない)でさえ.rpmを使用します。.exe、.deb、その他何でも、それは基本的に大きな.tarであり、さまざまな場所に自分自身を抽出するということです!Windowsでは、Program Filesに移動して進行状況バーが表示されますが、Linuxではさらに多くが表示されます。
WindowsEscapist

1
exeファイルは大きなtarファイルに似ているという提案は、単純化の方向には行き過ぎだと思います。tarファイルは実行できません。exeファイルは(当然)です。つまり、debファイル(実際に tarファイル)では、ファイルを移動する実際のプロセスを処理するのはパッケージマネージャーであるため、システムは非常にエレガントに物事を管理できます。インストーラープログラム(Windowsなど)では、インストーラー自体がそれを実行します。物事を整理するために一部のシステムコンポーネントと通信する場合がありますが、それはそのように感じる場合のみです。
ディランマッコール

1
これをまとめる最良の方法は、WindowsにInstallShieldやNSISなどのインストーラープログラムメーカーがあることです。Linux用のそのようなツールもあります。MojoSetupは人気のあるものです。そこでプログラムをダウンロードすることがあり、実行可能ファイル(通常は.shまたは.runで終わる)があり、小さなウィザードが表示されます。これらは通常、パッケージマネージャーと通信せず、Windowsのインストーラープログラムとよく似ています。そのメモでは、Windowsインストーラー(その.msiファイル)は、その混乱を終わらせるための試みです;)
ディランマッコール

Linuxの方法はWindowsの方法よりもはるかに優れていると思います。しかし、はい、Windowsの方法はシンプルで簡単です
アンワル

2
に対応するWindowsファイル形式.deb.msiです。
エリアケイガン

3

Ubuntuでは、ほとんどのソフトウェアは単一のファイルで提供されます。それは*.deb、ダウンロードし、解凍し、あなたのパッケージマネージャからインストールされているDebianのパッケージファイル。

ほとんどのWindowsソフトウェアのように、Ubuntuが自己解凍型の実行可能ファイルからソフトウェアをインストールしないのはなぜですか?

自己抽出するため *.exeファイルは、受け入れがたい非常に危険な提案です。

自己解凍型の実行可能ファイルとパッケージシステム(debian / Ubuntuなど)の最も重要な違いは次のとおりです。

  • セキュリティ
  • 透明性
  • よりきめ細かな制御

さらに詳細に:

セキュリティ

Windowsの世界では、その単一の*.exeファイルを信頼する必要があります。どうすれば信頼できると確信できるのでしょうか?それが何かをインストールすることをどうやって知ることができますか?あなたの背中の後ろに他のことをしないことをどのように確認できますか?

Ubuntuでは、すべてのパッケージはデジタル署名されているため、個別のパッケージファイルを使用することで、パッケージマネージャー(muon、synaptic、aptitude、さらにはまっすぐなapt)を使用することで、展開するにコンテンツを検証し、インストールすることはできません。もちろん、これはリポジトリを信頼していることを前提としています。私は、ダウンロードする多くの場合、なじみのないさまざまなソースよりも、Ubuntuリポジトリ(単一の機関)を信頼します。

きめ細かい制御

*.exe、それを実行します。ファイル、あなたは基本的に一つのことを行うことができます。Ubuntuでは、インストールするかどうかを決定するに、パッケージマネージャーの利便性からパッケージの内容、説明、構成、個々のファイル、最新の変更、バグ修正などを検査できます。

*.exeファイルからインストールする場合は、その「アンインストール」フックも信頼する必要があります(すべての*.exeファイルに存在することが保証されているわけではありません)。Ubuntuでは、パッケージマネージャーによってインストールされた標準パッケージに属するすべてのファイルは、パッケージ自体ではなくパッケージマネージャーの機能であるため、常にアンインストールできます。パッケージマネージャーは、インストーラーとアンインストーラーの両方を提供する独立した信頼できるアプリケーションです。パッケージはアンインストールフックをユーザーから奪うことはできません。もちろん、悪意のあるパッケージは、インストール後のアクションを介してものをこっそりすることができますが、それが私たちが公式のリポジトリシステムとそれらを維持するために信頼する同じ人を持っている理由です。

透明性

さらに先へ。Ubuntuでは、多くのレベルでソフトウェアを検証できるため、システムを本当に信頼できます。究極のレベルは、ソースコードを見ることができることです。バイナリパッケージには、対応するソースパッケージがあります。実際にソースを見ることができます(例: ' apt-get source bash 'は、bashシェルの完全なソースを提供します)。* .exeファイルの世界では、通常はバイナリのみであり、実際に舞台裏で何をしているのか誰が知っていますか?

ただし、ルールには常に例外がありますが、セキュリティと信頼のために、システムにコンポーネントをインストールする標準的な方法として検証するのが難しい数百の異なるソースからのバイナリの実行を受け入れることができません。


2

他の人から言われたことに加えて、すべての機能がすべてのユーザーに関連するとは限らないため、1つのソフトウェアがいくつかのパッケージに分割される場合があります。たとえば、プログラムのドキュメントが膨大な場合、通常は別のパッケージで提供されます。これにより、これらのオプション機能に興味のないユーザーは、ダウンロードのためにディスク容量と帯域幅/時間を節約できます。


0

依存関係についての理解を共有してみましょう(はい、Ubuntuのメリット、またはより一般的にはLinuxのソフトウェア処理方法のメリットを認識していました。私の友人の)

Windowsソフトウェアは、ほとんどが単一のファイルにパッケージ化されています。これは、依存関係がないことを意味しますか?

いいえ、ほとんどすべてのソフトウェアは他のソフトウェアに依存しています。(そのソフトウェアが非常に低レベルで、オペレーティングシステム自体など、ハードウェアと直接通信できる場合を除きます)。Microsoftのソフトウェアには依存関係がありません。だから、重要な質問は、彼らがこれをどのように処理するのか?

回答:彼らはこれを独自の伝統的な方法で処理します。ほとんどのユーザーを愚かだと仮定すると、すべての依存関係を単一のファイルに入れるだけで、サイズの大きい(1ファイル)ソフトウェアになります。
例については、マイクロソフト向けにリリースされたゲームをご覧ください。ほとんどすべてのゲームにはDirectXセットアップが含まれていますが、ユーザーはすでにそれらのバージョンを更新している場合があります。

これは、DirectXがすべてのゲームに含まれている理由について、Googleで見つけたものです。

新しいバージョンのバイナリが既にインストールされている場合でも、そのバージョンは使用できません。また、すべてをインストールしたことが保証されていない最新バージョンのインストーラーを実行したため、DirectXインストールが最新の場合でも以前のバージョン。さらに悪いことに、x86用のバージョンがインストールされている場合、x64用の同じバージョンがインストールされることを保証しないため、64ビットと32ビットのゲームは正確に同じインストーラーバージョンを実行する必要がありますが、実行時に異なるプラットフォームをターゲットにします。

記事全文はこちらクリックしてください。依存関係の処理がうまく機能していないことは明らかです。

ほとんどの場合、依存関係が既に設定されているかどうかに関係なく、(ユーザーにとって)簡単にするために提供されます。テーマに.NETランタイムコンポーネントが含まれているソフトウェアの数も確認してください。
私の経験からの別の例:MSソフトウェアをダウンロードしてインストールしたら。プロセスに満足しているので、アイコンをクリックしてソフトウェアを開きました。そのときだけ、「実行するにはJavaが必要です」と表示されます。このような状況は、Linuxの世界ではパッケージ管理を介して発生することはありません。(MSサイトのように、リポジトリサイトから.debファイルをダウンロードし、ダブルクリックしてインストールしようとしない限り)

Linuxはこの依存関係の問題をどのように処理しますか?

LinuxまたはUbuntuは、ソフトウェアを使用するために依存関係をインストールする必要があるという事実を隠していません(Microsoftの方法とは異なります)。ただし、コンポーネントをインストールしたとき、同じコンポーネントに依存する別のソフトウェアは、以前にインストールされたインストール済みの依存関係を使用します(すべてのものを含むMSソフトウェアとは異なります)。

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