パッケージマネージャー オペレーティングシステムでアプリをパッケージ化、配布、インストール、および保守する方法を提供します。 Linuxオペレーティングシステムの最新のデスクトップ、サーバー、IoTアプリケーション、および存在する何百もの異なるディストリビューションでは、プラットフォーム固有のパッケージ化方法からプラットフォームに依存しない方法に移行する必要があります。この投稿では、そのような3つのツール、つまり AppImageについて説明します。 、スナップ およびFlatpak 、それぞれがLinuxでのソフトウェアの展開と管理の未来を目指しています。最後に、いくつかの重要な調査結果を要約します。
1。 AppImage
AppImage 「1つのアプリ=1つのファイル」と呼ばれる概念に従います 。これは、AppImageが、1つのアプリケーションを含む通常の独立した「ファイル」であり、そのファイルで実行するために必要なすべてのものを備えていると理解されます。実行可能にすると、AppImageは、ユーザーのファイルシステムでダブルクリックするだけで、コンピューター内の他のアプリケーションと同じように実行できます。[1]
これは、ユーザーが前述のアプリケーションをインストールしなくても、Linux用のポータブルソフトウェアを作成するためのフォーマットです。このフォーマットにより、ソフトウェアの元の開発者(上流の開発者)は、基本的にあらゆる種類のLinuxで実行される、プラットフォームとディストリビューションに依存しない(ディストリビューションに依存しないバイナリとも呼ばれる)バージョンのアプリケーションを作成できます。
AppImageは長い間存在しています。 クリク 、AppImageの前身は Simon Peterによって作成されました プロジェクトは、ベータ段階を通過しなかった後、2011年にシャットダウンされました。 PortableLinuxAppsという名前のプロジェクト ほぼ同じ時期にSimonによって作成され、Linuxユーザー向けのソフトウェアを提供するいくつかのポータルによってフォーマットが採用されました。プロジェクトは2013年に現在の名前AppImageに再び名前が変更され、リポジトリはGitHub(プロジェクトリンク)に維持されており、2018年以降の最新の変更はすべて同じです。[2] [3]
- AppImagesは、事実上すべてのLinuxシステムで実行できます。前述のように、アプリケーションはオペレーティングシステムといくつかの一般的なライブラリから多くの機能を引き出します。これはソフトウェアの世界では一般的な方法です。すでに何かが行われている場合、同じ部分からどのパーツを使用するかを選択できれば、もう一度行う意味がないからです。問題は、多くのLinuxディストリビューションでは、特定のディストリビューションの開発者が必要なパッケージを含める必要があるため、特定のアプリケーションの実行に必要なすべてのファイルがない可能性があることです。したがって、開発者は、アプリを公開するLinuxディストリビューションごとにアプリケーションの依存関係を個別に含める必要があります。 AppImage形式を使用すると、開発者は、ターゲットオペレーティングシステムがAppImageファイルの一部として持つことを期待できない可能性のあるすべてのライブラリとファイルを含めることを選択できます。したがって、同じAppImage形式のファイルを、きめ細かい制御を必要とせずに、さまざまなオペレーティングシステムやマシンで動作させることができます。
- 1つのアプリと1つのファイルの哲学は、ユーザーがアプリケーションを使用するためのニーズを満たす1つのファイルをダウンロードして実行するだけでよいという点で、ユーザーエクスペリエンスがシンプルでエレガントであることを意味します。
- ルートアクセスの要件はありません 。システム管理者は、ユーザーがコンピューターやデフォルトの設定をいじるのを防ぐために、rootアクセス権を持っている必要があります。これは、rootアクセスまたはスーパーユーザー権限を持たないユーザーが、必要なアプリを好きなようにインストールできないことも意味します。この慣習は、公共の場(図書館や大学のコンピューター、企業システムなど)では一般的です。 AppImageファイルでは、ユーザーは何も「インストール」する必要がないため、ユーザーはそのファイルをダウンロードして実行可能にするだけで済みます。 使い始めます。これにより、システム管理者が抱えるアクセスのジレンマが解消され、ユーザーエクスペリエンスを犠牲にすることなく作業が容易になります。
- コアオペレーティングシステムへの影響なし 。 AppImage-application形式を使用すると、ほとんどのシステムファイルを変更したり、アクセスしたりすることなく、すべての機能を備えたアプリケーションを使用できます。アプリケーションが何をするにしても、コアオペレーティングシステムのセットアップとファイルは変更されません。
- AppImageは、開発者がアプリケーションの特定のバージョン用に作成できます。更新されたバージョンは、別のAppImageとして作成されます。したがって、必要に応じて、ユーザーは同じアプリケーションの複数のバージョンをテストできます。 さまざまなAppImageを使用してさまざまなインスタンスを実行します。これは、エンドユーザーのPOVからアプリケーションをテストして違いに気付く必要がある場合に非常に貴重な機能です。
- アプリケーションをどこにでも持っていきましょう。前述のように、AppImagesは、アプリケーションが必要とするすべてのファイルのアーカイブファイルであり、システムが使用するディストリビューションをインストールしたり、煩わしたりすることなく使用できます。したがって、定期的に使用する一連のアプリがある場合は、いくつかのAppImageファイルをサムドライブにマウントして、動作するかどうかを心配することなく、複数の異なるディストリビューションを実行している複数のコンピューターで使用することもできます。
さらに、 AppImageKit すべてのバックグラウンドのユーザーが、既存のアプリケーションから、またはアップストリーム開発者からAppImageが提供されていないアプリケーションから独自のAppImageを作成できるようにします。
パッケージマネージャーはプラットフォームに依存しませんが、専用のデーモン AppImagedを使用してデスクトップ上のエンドユーザーにソフトウェアを配布することに主に焦点を当てています。 AppImageフォーマットをそれぞれのデスクトップ環境に統合するため。 AppImageは現在、Ubuntu、Debian、openSUSE、CentOS、Fedoraなどのさまざまなディストリビューションによってネイティブにサポートされており、他のディストリビューションも必要に応じてセットアップできます。 AppImagesは、付属のCLIツールを使用して、機能が制限されたサーバーで実行することもできます。
AppImagesの詳細については、公式のAppImageドキュメントにアクセスしてください。 ページ。
推奨される読み物:
- AppImageLauncherを使用してAppImageをアプリケーションメニューに統合する
- AppImage、Flathub、SnapcraftプラットフォームでLinuxアプリケーションを検索
2。スナッピー
スナッピー は、AppImageやそのインスタンスの他のパッケージマネージャーのようなソフトウェア展開およびパッケージ管理システムです。もともとは、現在は機能していない Ubuntu Touch用に設計されています オペレーティング·システム。 Snappyを使用すると、開発者はさまざまなLinuxベースのディストリビューションで使用するソフトウェアパッケージを作成できます。 Snappyの作成と「スナップ」の展開の背後にある最初の意図 Ubuntuベースのシステムでは、IoTデバイスから、Ubuntuの一部のバージョン、より広い意味でLinux自体を実行する本格的なコンピューターシステムまで、あらゆるもので使用できる統一された単一フォーマットを取得することです。[4]
Snappyには、パッケージマネージャーシステム全体を構成する次の重要なコンポーネントがあります。[6]
- スナップ –はパッケージ自体のファイル形式です。 Snappyを使用してデプロイされる個々のアプリケーションは、「スナップ」と呼ばれます。 Linuxを実行している別のシステムで実行することを目的としたスナップを作成するために提供されているツールを使用して、任意のアプリケーションをパッケージ化できます。スナップは、AppImageと同様に包括的なファイルであり、ターゲットシステムの一部であると想定せずにアプリケーションを実行するために必要なすべての依存関係が含まれています。
- スナップクラフト –は、開発者がアプリケーションのスナップを作成できるようにするツールです。これは基本的に、スナップシステムの一部であるコマンドであり、独自のスナップを作成できるフレームワークでもあります。
- スナップ –は、システムにインストールされているすべてのスナップを維持するバックグラウンドデーモンです。デスクトップ環境に統合され、スナップの操作に関連するすべてのファイルとプロセスを管理します。 snapdデーモンは、通常1日4回の更新もチェックします。 特に設定しない限り。
- スナップストア –は、開発者がスナップをリポジトリにアップロードできるようにする一種のオンラインギャラリーです。 Snap Storeは、ユーザー向けのアプリケーション検出メディアでもあり、ユーザーがアプリケーションライブラリをダウンロードしてインストールする前に、それらを表示して体験できるようにします。
スナップされたコンポーネントは主にCで記述されています およびGolang 一方、Snapcraftフレームワークは Pythonを使用して構築されています 。どちらのモジュールもGPLv3ライセンスを使用していますが、snapdにはサーバー側の操作用にCanonicalの独自のコードがあり、クライアント側だけがGPLライセンスの下で公開されていることに注意してください。これは、開発者がスナップ開発に参加するためにCLAフォームに署名することを伴うため、開発者との主要な論点です。[7]
Snappyパッケージマネージャーの詳細を詳しく調べると、次の点に注意してください。
- 前述のスナップはすべて包括的であり、アプリケーションの実行に必要なすべての必要なファイル(依存関係)が含まれています。したがって、開発者は、ターゲットとするディストリビューションごとに異なるスナップを作成する必要はありません。基本ランタイムをスナップから除外する場合に必要なのは、ランタイムに注意することだけです。
- Snappyパッケージは、トランザクションの更新をサポートすることを目的としています。このようなトランザクション更新はアトミックで完全にリバーシブルです。つまり、更新中にアプリケーションを使用でき、更新が想定どおりに動作しない場合は、他の影響をまったく受けずに同じことを元に戻すことができます。この概念は、デルタプログラミングとも呼ばれます。 パッケージ全体ではなく、アプリケーションへの変更のみが更新として送信されます。 Ubuntu Coreと呼ばれるUbuntu派生物 実際には、OS自体にスナップ更新プロトコルを約束します。[8]
- スナップとAppImagesの違いの重要なポイントは、バージョンの違いをどのように処理するかです。 AppImagesを使用すると、アプリケーションのバージョンが異なればAppImagesも異なり、同じアプリケーションの2つ以上の異なるバージョンを同時に使用できます。ただし、スナップを使用するということは、トランザクションまたはデルタ更新システムに準拠することを意味します。これは更新の高速化を意味しますが、同じアプリケーションの2つのインスタンスを同時に実行することを防ぎます。古いバージョンのアプリを使用する必要がある場合は、新しいバージョンを元に戻すかアンインストールする必要があります。 Snappyは、「並列インストール」と呼ばれる機能をサポートしています。 これにより、ユーザーは同様の目標を達成できますが、まだ実験段階であり、安定した実装とは見なされません。 Snappyはチャネルも利用しているため、アプリのベータ版またはナイトリービルドと安定版を同時に使用できます。[9]
- 主要なLinuxディストリビューションおよびGoogle、Mozilla、Microsoftなどの主要な開発者からの広範なサポート[4]
- スナップデスクトップ統合ツールは、「スナップショット」の撮影をサポートします システムにインストールされているすべてのスナップの現在の状態のこれにより、ユーザーはSnappyパッケージマネージャーを介してインストールされたすべてのアプリケーションの現在の構成状態を保存し、必要に応じていつでもその状態に戻すことができます。同じ機能を設定して、ユーザーが必要と見なす頻度でスナップショットを自動的に取得することもできます。スナップショットは、スナップ保存コマンドを使用して作成できます スナップフレームワークで。[10]
- スナップは、操作中にサンドボックス化されるように設計されています。これにより、ユーザーに非常に必要なセキュリティと分離のレイヤーが提供されます。ユーザーは、スナップベースのアプリケーションがコンピューター上の残りのソフトウェアを台無しにすることを心配する必要はありません。サンドボックス化は、3つのレベルの分離、つまりクラシックを使用して実装されます。 、厳密 およびdevmode 。分離の各レベルにより、アプリはファイルシステムとコンピューター内でさまざまなレベルのアクセスが可能になります。[11]
逆に、スナップはカノニカルの手口を中心としていると広く批判されています。 。プロジェクトへのコミットのほとんどは、Canonicalの従業員または請負業者によるものであり、他の貢献者はリリースフォーム(CLA)に署名する必要があります。サンドボックス機能は、セキュリティの観点から非常に重要ですが、X11デスクトップを実行しているアプリケーションが前述の分離をサポートしないのに対し、サンドボックスは実際には他の特定のコアサービス(Mirなど)を実行する必要があるという点で欠陥があります。セキュリティ機能は無関係だと言った。 Canonicalや「中央」のクローズドアプリリポジトリからの疑わしいプレスリリースやその他のマーケティング活動も、Snappyの側面として広く批判されています。さらに、さまざまなスナップのファイルサイズも比較的非常に大きい AppImageを使用して作成されたパッケージのアプリサイズと比較。[7]
詳細については、スナップの公式ドキュメントを確認してください。 。
関連記事:
- ArchLinuxおよびFedoraにSnapパッケージをインストールする
3。 Flatpak
上記のSnap/Snappyのように、 Flatpak は、Linuxでのソフトウェアの配布と使用を容易にすることを目的としたソフトウェア展開ツールでもあります。 Flatpakは以前は「xdg-app」と呼ばれていました レナートポッターリングによって提案されたコンセプトに基づいていました 2004年。アイデアは、安全な仮想サンドボックスにアプリケーションを含めて、ルート権限を必要とせずにアプリケーションを使用できるようにすることでした。 システムのセキュリティを損なうことなく。 アレックス Klik(AppImageの以前のバージョンであると考えられていた)をいじり始め、概念をより適切に実装したいと考えました。 アレクサンデルラーション 当時RedHatと協力していた人は、2015年にxdg-appと呼ばれる実装を作成しました。これは、現在のFlatpak形式の前身として機能しました。
Flatpakは、Red Hat、Endless Computers、Collaboraの支援を受けて2016年に正式にリリースされました。 フラットハブ すべてのFlatpakアプリケーションパッケージの公式リポジトリです。 Flatpakは、その表面上、Linux用の配布に依存しないアプリケーションを構築およびパッケージ化するためのフレームワークです。アプリケーションをFlatpak環境に正常に統合するには、開発者がいくつかのデスクトップ環境ガイドラインに準拠する必要があります。
Flatpakを際立たせるいくつかの機能を以下に示します。ここでは、AppImageおよびSnappyとのFlatpak共有機能が省略されていることに注意してください。
- GNOMEやKDEなどの一般的なLinuxデスクトップ環境に緊密に統合されているため、ユーザーは端末に頼る代わりに、グラフィカルソフトウェア管理ツールを使用してFlatpaksを簡単に使用できます。 Flatpakは現在、主要なデスクトップ環境のデフォルトのリポジトリからインストールでき、アプリ自体がセットアップされると、それらを使用して、通常のデスクトップアプリケーションと同様の機能を提供できます。[12] [13]
- 上位互換性 – Flatpaksは、オペレーティングシステムのコアカーネルとランタイムを念頭に置いてゼロから構築されています。したがって、ディストリビューションをアップグレードまたは更新した場合でも、コアの更新がない限り、Flatpaksは機能するはずです。これは、ディストリビューションのローリングベータ版または開発バージョンを使い続けることを好む人にとって特に重要です。そのような人々にとって、OS自体のねじれは通常は解決されないため、Flatpakアプリケーションは、その操作をOSファイルやライブラリに依存することなくシームレスに実行されます。[13]
- バブルラップを使用したサンドボックス化 –スナップは、コンピューターの使用中に実行されている他のアプリケーションから分離して実行されるという点で、デフォルトでサンドボックス化されています。ただし、Flatpaksは、デフォルトでは、操作中にアプリケーションがOSファイルやユーザーファイルにアクセスするのを完全に封鎖します。これは基本的に、システム管理者は、システムにインストールされているFlatpaksがコンピューターとそれに含まれるファイルを悪用できないことを確信できることを意味しますが、エンドユーザーの場合、これは、いくつかの特定の機能またはユーザーデータにアクセスするためにroot権限が必要であることを意味します。 [14]
- Flatpakはアプリケーションの分散型配布をネイティブにサポートしますが、Flatpakの背後にあるチームは、 Flathubと呼ばれるアプリ/Flatpakの中央オンラインリポジトリを引き続き維持しています。 。実際、ユーザーは必要に応じて複数のリモートリポジトリを使用するようにFlatpakを構成できます。スナップとは対照的に、複数のリポジトリを持つことができます。[13]
- サンドボックスを介したモジュラーアクセス。この機能はシステムの整合性に大きな潜在的コストを伴いますが、Flatpakフレームワークでは、サンドボックス内からホストシステムに、またはその逆に特定の情報を交換するために、サンドボックスを介してチャネルを作成できます。この場合、チャネルはポータルと呼ばれます。この機能の欠点については、このセクションの後半で説明します。[14]
Flatpakで最も批判されている側面の1つは、サンドボックス機能そのものです。サンドボックスは、SnappyやFlatpakなどのパッケージマネージャーが重要なセキュリティ機能を実装する方法です。サンドボックス化は基本的に、アプリケーションをシステム内の他のすべてから分離し、サンドボックス内から外部へのユーザー定義の情報交換のみを可能にします。サンドボックスは本質的に難攻不落ではないという概念の欠陥。最終的には2つのドメイン間でデータを転送する必要があり、単純なLinuxコマンドでサンドボックスの制限を取り除くことができます。つまり、悪意のあるアプリケーションがサンドボックスから飛び出す可能性があります。[15]
これは、Flatpakのセキュリティ更新プログラムを展開するという予想よりも悪いコミットメントと相まって、安全なフレームワークを提供するというチームの高い主張に対する広範な批判をもたらしました。ブログ( flatkillという名前 )このガイドの最後にリンクされているのは、実際には、Flatpakチームが対処すべきではなかったいくつかのエクスプロイトについて言及しています。[15]
詳細については、Flatpakの公式ドキュメントをお読みになることをお勧めします 。
関連記事:
- Flatpakの初心者向けガイド
- Flatsealを使用してFlatpakアプリの権限を簡単に構成する方法
AppImage vs Snap vs Flatpak
以下に添付されている表は、上記のすべての調査結果を3つのフレームワークの簡潔で技術的な比較にまとめたものです。
機能 | AppImage | スナッピー | フラットパック |
独自の機能 | アプリストアやリポジトリではなく、ソフトウェアディストリビューション用のパッケージ形式を使用するだけです。 | Canonical(Ubuntuと同じ会社)が主導し、中央のアプリリポジトリとCanonicalからの積極的な貢献を特徴としています。 | FlatHubと呼ばれるアプリストアを備えていますが、個人がパッケージをホストして配布することもできます。 |
ターゲットシステム | デスクトップとサーバー。 | デスクトップ、サーバー、IoTデバイス、組み込みデバイスなど | デスクトップとサーバーの機能が制限されています。 |
ライブラリ/依存関係 | ベースシステム。ランタイムはオプションで、ライブラリとその他の依存関係はパッケージ化されています。 | ベースシステムまたはプラグイン経由、またはパッケージ化可能。 | GNOME、KDE、Freedesktopバンドルまたはカスタムバンドル。 |
開発者 | コミュニティ主導のSimonPeter。 | CanonicalLtd.が運営する企業 | エンタープライズがサポートするflatpakチームが主導するコミュニティ。 |
書き込み | C。 | Golang、C、Python。 | C。 |
初期リリース | 2004。 | 2014。 | 2015。 |
サンドボックス | 実装可能。 | 3つのモード-さまざまな閉じ込め機能を備えたstrict、classic、およびdevmode。単独で実行されます。 | 分離されていますが、デフォルトでシステムファイルを使用してアプリケーションを実行します。 |
サンドボックスプラットフォーム | Firejail、AppArmor、Bubblewrap。 | AppArmor。 | バブルラップ。 |
アプリのインストール | 必要ありません。セルフマウントディスクとして機能します。 | snapdを使用したインストール。 | flatpakクライアントツールを使用してインストールされます。 |
アプリの実行 | 実行ビットを設定した後に実行できます。 | デスクトップ統合スナップツールの使用。ユーザー定義のリソースで分離して実行します。 | CLIを使用する場合は、flatpakコマンドを使用して実行する必要があります。 |
ユーザー権限 | rootユーザーアクセスなしで実行できます。 | rootユーザーアクセスなしで実行できます。 | 選択的に必要です。 |
アプリケーションのホスティング | 誰でもどこでもホストできます。 | 独自仕様のCanonicalサーバーでホストする必要があります。 | 誰でもどこでもホストできます。 |
システム以外の場所からのポータブル実行 | はい。 | いいえ。 | はい、flatpakクライアントを構成した後です。 |
中央リポジトリ | AppImageHub。 | スナップストア。 | フラットハブ。 |
アプリの複数のバージョンを実行する | 可能、同時に任意の数のバージョン。 | 1つのチャネルにあるアプリの1つのバージョン。詳細については、個別に構成する必要があります。 | はい。 |
アプリケーションの更新 | CLIコマンドAppImageUpdateを使用するか、AppImageに組み込まれているアップデータツールを使用します。 | スナップがインストールされている必要があります。デルタ更新をサポートし、自動的に更新されます。 | 必要なflatpakがインストールされています。 flatpakupdateコマンドを使用して更新します。 |
ディスク上のパッケージサイズ | アプリケーションはアーカイブされたままです。 | アプリケーションはアーカイブされたままです。 | クライアント側は圧縮されていません。 |
これは、AppImage、Snap、Flatpakの機能の長い表形式の比較です。比較はAppImageの観点から行われることに注意してください。
- https://github.com/AppImage/AppImageKit/wiki/Similar-projects#comparison
結論
これら3つのプラットフォームはすべて互いに多くの共通点があり、アプローチにおいてプラットフォームにとらわれないことを目指していますが、いくつかの分野で異なるレベルの能力を提供します。 Snapsは組み込みデバイスを含むさまざまなデバイスで実行できますが、AppImagesとFlatpaksはデスクトップユーザーを念頭に置いて構築されています。一方、人気のあるアプリケーションのAppImagesは、優れたパッケージサイズと移植性を備えていましたが、Flatpakは、セットで使用してシステムを忘れた場合、上位互換性で非常に優れています。
参照:
- [1] 概念—AppImageドキュメント
- [2] Slashdot-ポイントアンドクリクLinuxソフトウェアのインストール
- [3] AppImageプロジェクトの歴史
- [4]Snapcraft-スナップはユニバーサルLinuxパッケージです
- [5]snapdのインストール-Snapドキュメント
- [6]スナップドキュメント
- [7] SnappyとFlatpakについて:Canonicalプロパガンダ部門での通常どおりのビジネス
- [8]スナップアップデートが小さくなっています。理由は次のとおりです
- [9] Linuxスナップパッケージとは何ですか?なぜそれらを使用するのですか?
- [10]スナップショット-スナップドキュメント
- [11]スナップの制限-スナップのドキュメント
- [12]デスクトップ統合-Flatpakドキュメント
- [13]Flatpakの概要-Flatpakのドキュメント
- [14]サンドボックスの権限-Flatpakのドキュメント
- [15]Flatpak-セキュリティの悪夢