依存関係地獄:ポータブルアプリを作成しない理由[閉じる]

依存関係地獄:ポータブルアプリを作成しない理由[閉じる]

Windows時代には、アプリケーションがスタンドアロンの方法でインストールされました。これにより、エンドユーザー/システム管理者は、他のアプリケーションを中断することなく、何をアップグレードするのか、どこをアップグレードするのか、何をパッチするのか、いつパッチするのかを決定する自由があります。

* NIXでは、複雑な依存関係が面倒なことです。 PC-BSDはこの問題を克服しようとします。ポリフェニレンエーテル、スタンドアロンアプリケーションを作成することによって。 AFAIK、これはもう使われていないようです。パッケージ管理方法に戻り(PBIはポートラッパーです)、すべてのLinuxディストリビューションは同じ方向に実行されます。最後まで何百もの依存関係、さらにデスクトップ環境はシステム管理デーモンに依存すると予想されます。

何百もの依存関係に基づいてアプリケーションを構築すると、プログラマの人生は容易になりますが、エンドユーザーとシステム管理者にとっては驚くべき問題が発生します。たとえば、Debian Jessie では、古代の Debian Etch バージョンのアプリケーションを実行できなくなります。多くの人がセキュリティ、パッチ、最新のシステムについて話していることを知っています。しかし、オープンソースは、何を更新するのか、いつ、どこで更新するのかを自由に決定できることを意味します。システムまたはその一部を更新しない、または少なくとも一般的な* NIXパッケージ管理者がユーザーに案内する方法(オフラインで動作するシステム、古いハードウェア、更新する必要がある既存のデータとの互換性)を更新しないのは非常に良い理由です。あります。 。コンプライアンスを確保するために予約されました...)。場合によっては、システム管理者がセキュリティ上の理由から複数のステップを実行することを好む。

私は個人的に何を更新するのか、いつ更新するのかを決定し、リスクを取ることがシステム管理者として私の役割だと思います。現状ではこれは不可能です。 (つまり、Debianにはどこにも依存関係がある新しいバージョンのlibc6があります)。この問題を解決するために2つ以上のリポジトリを維持することにした場合は、別の悪夢が発生します。

特定の依存関係(MySQLのインストールなど)は主要な依存関係であるため、許可されることがわかりますが、ライブラリなどの小さな依存関係が単にコードに含まれていない理由は理解できません。皿は非常に安いです。 Windowsに移植された多くのLinuxアプリケーションがこれを実装しています。

編集:単にコメントに基づいていないことを確認してください。

* NIX(単にDebian / FreeBSDと呼びます)にソフトウェアをインストールするためのオプションは何ですか?

  • アップグレードなしでソフトウェアの単一の特定のバージョンを長年実行し、その後の基本オペレーティングシステムやライブラリのアップグレードなどに関係なく、変更されないままにします。メンテナンスが容易しかし、決して。

  • 他のソフトウェア/ライブラリと競合せずにアップグレード/ダウングレードすることにします。

  • 複数のソフトウェアバージョンをインストールします。

Jails/chroot/VMは確実な解決策ですが、オプションではありません。返品、

  • PBIがポート/パケット管理の独立性を返すという目標を達成できないのはなぜですか?

ベストアンサー1

PBIが成功しなかった理由には答えることはできませんが、Linuxで共有ライブラリが好ましい理由には答えることができます。

主張はいセキュリティ、一般的に使用されるライブラリに脆弱性がある場合は、そのライブラリを使用するすべてのアプリケーションではなく、そのライブラリのみを更新する必要があります(ABI互換性のため)。これは、(主にデフォルトのリポジトリとPPA(Ubuntu用)に固執する場合)、アプリケーションがそのバージョン(Windowsなど)用にコンパイルされたため、4つの異なるバージョンのライブラリをインストールする必要がないことを意味します。 .NETライブラリがインストールされているか、他のバージョンのVisual C ++ランタイムがインストールされています)。

それにもかかわらず、場合によっては、アプリケーションがライブラリのシステムバージョンを強制的に使用せず、代わりに独自のバージョンを使用することもあります。たとえば、Chromiumはほとんどの配布リポジトリにある多くのライブラリに依存しています。一般的な状況では、アプリケーションが使用するライブラリがディストリビューションでコンパイルされたライブラリになるようにアプリケーションがコンパイルされます。しかし、Ubuntuでは(少なくとも)Chromiumは、次の理由で独自のバージョンのライブラリにコンパイルされます。

  • ライブラリのシステムバージョンを使用することは、すべてのUbuntuバージョンに対してChromiumをテストする必要があることを意味します。
  • Chromiumはすでにほとんどの場合、最新バージョンのライブラリを使用しているため、脆弱性が発生する可能性がはるかに低くなります。

ディスク容量については、debootstrapDebian Jessieのedバージョンをインストールするには1GB未満のディスク容量が必要で、これはより小さいSDカードに適していると主張することができます。一方、Windowsには次のものが必要です。少なくとも数ギガバイトのディスク容量。

以前のソフトウェアでは、アプリケーションを静的にコンパイルし、ほとんどの依存関係を独立して作成できます。ただし、ディストリビューションには利用可能な静的バージョンのライブラリがない可能性があるため(DebianとUbuntuにはほとんどありません)、これらのライブラリの静的バージョンを取得するには、これらのライブラリを直接コンパイルする必要があります。

最後に、Unixの原則の1つは、すべてのアプリケーションが1つのことを行い、それをうまく行うことです。アプリケーションとライブラリが静的にリンクされている場合(間接的に)多くのことを行うと考えることができます。

おすすめ記事