あるソフトウェアの依存関係を解決すると、モグラ叩きのように別のソフトウェアの互換性が損なわれることがあります。app1がlibfoo 1.2に依存し、app2 がlibfoo 2.0に依存している場合、異なるバージョンのlibfooを同時にインストールできないと、app1とapp2 を同時に使用(または、インストーラが依存関係をチェックする場合にインストール)することはできません。可能な場合は、異なる依存関係を同時にインストールできるようにすることでこの問題を解決します。あるいは、新しい依存関係をインストールするには、既存の依存関係とそれに依存するすべてのソフトウェアをアンインストールする必要があります。Linux システムで別のディストリビューターからパッケージをインストールする際の問題は、結果として生じる長い依存関係の連鎖により、何千ものパッケージが依存するC 標準ライブラリ( GNU C ライブラリなど) の競合するバージョンが発生する可能性があることです。このような場合、ユーザーはそれらのパッケージをすべてアンインストールするように求められます。
循環依存関係
アプリケーションAが特定のバージョンのアプリケーションBに依存し、それがないと実行できない場合、そしてアプリケーションBもまた特定のバージョンのアプリケーションAに依存し、それがないと実行できない場合、いずれかのアプリケーションをアップグレードすると、他のアプリケーションが動作しなくなります。この仕組みは、さらに深い分岐構造になる可能性があります。コア システムやソフトウェア自体に影響を及ぼす場合、その影響は非常に深刻になる可能性があります。例えば、特定のランタイム ライブラリ ( B ) を必要とするパッケージマネージャ ( A ) が、このライブラリ ( B ) を次のバージョンにアップグレードする過程で、処理の途中で自身 ( A )が動作しなくなることがあります。ライブラリ (B) のバージョンが間違っているため、パッケージマネージャ ( A ) が動作しなくなり、ライブラリ ( B ) のロールバックやダウングレードができなくなります。一般的な解決策は、両方のアプリケーションをダウンロードしてデプロイすることです。場合によっては、一時的な環境内で実行します。
↑ Stevens, Al (2001-05-01). "It's Good Work When You Can Find It; The Dependency Carousel" . J-DDJ . 26 (5): 121– 124. ISSN 1044-789X . 2011-08-11 のオリジナルからアーカイブ済み。2010-04-10にdrdobbs.com/blog経由で取得。
1 2 Pjotr Prins; Jeeva Suresh & Eelco Dolstra (2008-12-22). "Nix fixes dependency hell on all Linux distributions" . linux.com . Archived from the original on 2015-07-08 . Retrieved 2013-05-22 . APT、RPM、FreeBSD Ports Collection を含むすべての一般的なパッケージマネージャは、破壊的アップグレードの問題を抱えています。単一のアプリケーションまたはオペレーティングシステム全体のアップグレードを実行すると、パッケージマネージャは、現在システムにあるファイルを新しいバージョンで上書きします。パッケージが常に完全に下位互換性がある限り、これは問題になりませんが、現実の世界では、パッケージは完全に下位互換性があるわけではありません。Firefox をアップグレードし、パッケージマネージャが新しいバージョンの GTK も必要だと判断したとします。新しい GTK が完全に下位互換性がない場合、システム上の他のアプリケーションが突然動作しなくなる可能性があります。 Windowsの世界では同様の問題がDLL地獄として知られていますが、Unixの世界でも依存関係地獄は同様に、あるいはそれ以上に深刻な問題です。なぜなら、Unixプログラムは外部依存関係を多く持つ傾向があるからです。