Linuxディストリビューションは、依存関係が増えるという問題に直面しています プロジェクトの、しかし Python、Perl、Rubyコードの依存関係の数は保持されます 妥当な制限内で、JavaScriptプロジェクトは非常に小さなライブラリに分割する練習をし、多くの場合、単純な機能を実行します。
NPMリポジトリにはすでにXNUMX万を超えるパッケージがあります および典型的なアプリケーション 何百もの依存関係へのリンク、これには独自の依存関係があるため、LinuxディストリビューションでJavaScriptアプリケーションを使用して従来のパッケージを維持および配布することは困難です。
JavaScriptライブラリの依存関係が緊密に絡み合っているため、ディストリビューション内のそのようなライブラリでパッケージを更新する 他のパッケージを壊す可能性があります。
バージョンバインディングは問題を悪化させます。XNUMXつのライブラリが安定して実行するために依存関係のXNUMXつのバージョンを必要とし、別のライブラリが別のバージョンを必要とする場合があります。
多くのプロジェクトが機能するには、最新バージョンのライブラリが必要です。 これは、ディストリビューションの安定性要件を常に満たすわけではありません(継続的な開発は、最新バージョンのフレームワークを使用してNode.jsエコシステムで実行され、ディストリビューションには数年間のサポートが必要です)。
ディストリビューションのみでパッケージバージョンを修正しようとしています 古いバージョンの増加につながる 何年も更新されていないリポジトリ内。 XNUMXつのパッケージのメンテナンスが中断すると、他の多くのパッケージに悪影響を及ぼし、さらに多くの問題が発生します。
さらに、l相互依存関係 の多くのライブラリが Node.jsをシステムからアンインストールできなくなります、これにより、他のNode.jsプログラムをアンインストールできなくなります。
この状況に対処するために、Fedoraプロジェクトは最近、Node.jsベースのプロジェクトで使用されるライブラリを使用した個別のパッケージのデフォルトの形成を停止する計画を承認しました。
彼は、Fedora 34から始めて、Node.jsの基本パッケージのみに、インタープリター、ヘッダー、プライマリライブラリ、バイナリ、および基本的なパッケージ管理ツール(NPM、yarn)を提供することを決定しました。
Node.jsを使用するFedoraリポジトリアプリケーションでは、 個別のパッケージで使用されるライブラリを分割および分離することなく、既存のすべての依存関係をパッケージに埋め込むことができます。
ライブラリを埋め込むと、小さなパッケージの乱雑さが解消され、パッケージのメンテナンスが簡素化され(以前は、メンテナは、プログラムのメインパッケージよりも、ライブラリを使用した数百のパッケージのレビューとテストに多くの時間を費やしていました)、競合からインフラストラクチャを保護します。ライブラリの数を増やし、ライブラリバージョンへのリンクに関する問題を解決します(メンテナは、テスト済みバージョンと製品テスト済みバージョンをパッケージに含めます)。
統合の欠点は、修正をもたらすプロセスの複雑さです。 ライブラリの脆弱性。これには、脆弱なライブラリを含むすべてのパッケージのメンテナの調整された作業が必要になります。 パッケージが脆弱な組み込みライブラリの更新を忘れて、パッケージが見過ごされる危険性があります。
の開発者 Debianは、同様のパッケージ依存関係統合モデルへの切り替えについても議論しています。 Node.jsに加えて、Kubernetesプラットフォーム用のパッケージの作成と、小さな依存関係に分割される傾向があるPHPおよびGo言語でのプロジェクトについても説明します。 まだ決定はされていませんが、時間の経過とともに問題が悪化し、遅かれ早かれプロジェクトが何かをすることを余儀なくされることが期待されています。
パッケージメンテナが抱える問題の例として、gvm(Greenbone Vulnerability Management)セキュリティスキャナー用のgsa(Greenbone Security Assistant)Webインターフェイスが挙げられます。
Debianで出荷されたバージョンのgsaは、新しいバージョンのgvmと互換性がないことが判明しましたが、重要な変更が含まれ、npmを使用して必要なNode.jsライブラリをダウンロードするため、gsaを現在のバージョンに更新できませんでした。
要求されたライブラリは多すぎて、Debianのルールではビルドプロセス中に外部コンポーネントをロードすることが禁止されているため、誰かがそれらを維持するには、Debianで新しいパッケージを作成する必要があります。
ECMAscriptのフレームワークとライブラリのこの断片化は、手に負えなくなっています。
良い品