回答:
依存関係がプログラム自体に含まれていない主な理由は、システムのコンポーネントを簡単に更新できるようにするためです。
1つの依存関係が5つの異なるプログラムによって使用されていると想像してください。その依存関係にセキュリティの脆弱性が見つかった場合、5つのコピーではなく、1つのコピーのみを更新する必要があります。
ユーザーにとって、複数のパッケージをインストールする必要はありません。必要なソフトウェアをインストールすると、その依存関係が自動的にインストールされます。
.debパッケージと.exeパッケージの主な違いは、Ubuntuソフトウェアが単一のファイルで公開されていないことではありません。主な違いは、パッケージを含むソフトウェアリポジトリの概念全体であり、更新プログラムを簡単に提供できます。
これは、インターネットに直接接続していないコンピューターでは問題になる場合があります。APTonCDなど、これらの問題を最小限に抑えるツールがあります。
それは完全に真実ではありません。Ubuntuソフトウェアは通常、1つの.debファイルで提供されます。.debファイルは、非常に単純(かつ不正確)であるため、Windows用の対応する.exeファイルです。Windowsのプログラムを含むすべてのプログラムは、オペレーティングシステム(ライブラリ)の他のファイルへの依存関係を使用します。インストールプロセスは、OSによって多少異なります。Ubuntuのソフトウェアセンターを使用してプログラムをダウンロードする場合、システムにインストールされていない依存関係と実際のプログラムファイルのみをダウンロードします。これにより、システムが重複ファイルや重複する機能でオーバーロードされ、競合することになります。
信じられないかもしれませんが、WindowsまたはUbuntuにプログラムをインストールすることの唯一の違いは、ユーザーに提供する情報の量です。Windowsは、ユーザーが愚かであると考えており、exeファイルの実行時にインストールされているものをユーザーに知らせたくないと考えています。Linuxでは、その情報を取得します。一部のユーザーにとっては詳細すぎますが、他の(ほとんどの)ユーザーは本当に感謝しています。
それが理にかなっていることを願っています。
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ファイルの世界では、通常はバイナリのみであり、実際に舞台裏で何をしているのか誰が知っていますか?
ただし、ルールには常に例外がありますが、セキュリティと信頼のために、システムにコンポーネントをインストールする標準的な方法として検証するのが難しい数百の異なるソースからのバイナリの実行を受け入れることができません。
依存関係についての理解を共有してみましょう(はい、Ubuntuのメリット、またはより一般的にはLinuxのソフトウェア処理方法のメリットを認識していました。私の友人の)。
いいえ、ほとんどすべてのソフトウェアは他のソフトウェアに依存しています。(そのソフトウェアが非常に低レベルで、オペレーティングシステム自体など、ハードウェアと直接通信できる場合を除きます)。Microsoftのソフトウェアには依存関係がありません。だから、重要な質問は、彼らがこれをどのように処理するのか?
回答:彼らはこれを独自の伝統的な方法で処理します。ほとんどのユーザーを愚かだと仮定すると、すべての依存関係を単一のファイルに入れるだけで、サイズの大きい(1ファイル)ソフトウェアになります。
例については、マイクロソフト向けにリリースされたゲームをご覧ください。ほとんどすべてのゲームにはDirectXセットアップが含まれていますが、ユーザーはすでにそれらのバージョンを更新している場合があります。
これは、DirectXがすべてのゲームに含まれている理由について、Googleで見つけたものです。
新しいバージョンのバイナリが既にインストールされている場合でも、そのバージョンは使用できません。また、すべてをインストールしたことが保証されていない最新バージョンのインストーラーを実行したため、DirectXインストールが最新の場合でも以前のバージョン。さらに悪いことに、x86用のバージョンがインストールされている場合、x64用の同じバージョンがインストールされることを保証しないため、64ビットと32ビットのゲームは正確に同じインストーラーバージョンを実行する必要がありますが、実行時に異なるプラットフォームをターゲットにします。
記事全文はこちらをクリックしてください。依存関係の処理がうまく機能していないことは明らかです。
ほとんどの場合、依存関係が既に設定されているかどうかに関係なく、(ユーザーにとって)簡単にするために提供されます。テーマに.NETランタイムコンポーネントが含まれているソフトウェアの数も確認してください。
私の経験からの別の例:MSソフトウェアをダウンロードしてインストールしたら。プロセスに満足しているので、アイコンをクリックしてソフトウェアを開きました。そのときだけ、「実行するにはJavaが必要です」と表示されます。このような状況は、Linuxの世界ではパッケージ管理を介して発生することはありません。(MSサイトのように、リポジトリサイトから.debファイルをダウンロードし、ダブルクリックしてインストールしようとしない限り)。
LinuxまたはUbuntuは、ソフトウェアを使用するために依存関係をインストールする必要があるという事実を隠していません(Microsoftの方法とは異なります)。ただし、コンポーネントをインストールしたとき、同じコンポーネントに依存する別のソフトウェアは、以前にインストールされたインストール済みの依存関係を使用します(すべてのものを含むMSソフトウェアとは異なります)。