Linux
 Computer >> コンピューター >  >> システム >> Linux

バイナリパッケージ vs ソースパッケージ:Linuxではどちらを使うべき?

Linuxでプログラムをインストールする方法は、使用するパッケージマネージャーに関わらず、大きく分けて2つあります。1つは事前にビルドされたパッケージを利用する方法、もう1つは自分でプログラムをコンパイルする方法です。近年では前者がデフォルトの選択肢となることがほとんどですが、状況によってはソースコードからコンパイルすることを検討する価値があるかもしれません。

バイナリパッケージとは?

バイナリパッケージ vs ソースパッケージ:Linuxではどちらを使うべき?

Linuxへのプログラムのインストールは、Windowsの伝統的なソフトウェアのインストール方法とはかなり異なります。ベンダーのウェブサイトからインストーラーをダウンロードするのではなく、各Linuxディストリビューションに合わせて用意されたプログラムのリポジトリからファイルを取得します。このリポジトリには、Linuxのパッケージマネージャーやアプリストアを通じてアクセスします。

これらのリポジトリにあるプログラムを構成するファイルは、アーカイブ形式で提供されています。これはすべてを1つのファイルにまとめ、アクセスや配布を容易にするためのものです。例えばDebianでは、DEB形式を使用してプログラムを保存・配布しています。このようなバンドルはバイナリパッケージと呼ばれます。

これらのファイルを展開してコンピューターにインストールするには、専用のプログラムが必要です。通常はパッケージマネージャーやアプリストアがその役割を担います。これらのツールは、インストール済みファイルの管理やソフトウェアアップデートの処理など、その他の便利な機能も提供してくれます。

パッケージはどこから来るのか?

すべてのソフトウェアは、CやC++などの特定のプログラミング言語で書かれた「ソースコード」と呼ばれるテキスト行で構成されています。しかし、このソースコードをそのままアーカイブにまとめてパッケージと呼ぶことはできません。コードは、コンピューターが理解し実行できる言語へと翻訳される必要があります。

このプロセスは「コンパイル」と呼ばれ、その結果としてコンピューターが実行可能なバイナリが生成されます。パッケージとソフトウェアの違いは、ソフトウェアのバイナリが設定ファイルなどとともにパッケージ内にまとめて格納されている点にあります。

「ソースから」のインストールとは?

バイナリパッケージ vs ソースパッケージ:Linuxではどちらを使うべき?

プログラムを「ソースから」インストールするというのは、パッケージマネージャーを使用せずにプログラムを導入することを意味します。代わりに、ソースコードを自分でコンパイルし、生成されたバイナリをコンピューターにコピーします。

多くの場合、プロジェクトのソースコードはGitHub、GitLab、Bitbucketなどのホスティングサービスからダウンロードできます。大規模なプログラムでは、公式サイトでソースコードを公開しているケースもあります。コードは通常、アーカイブ形式(ソースパッケージとも呼ばれます)で圧縮されています。

ビルド作業を自動化するために、特別なツール群が用意されています。Linuxデスクトップでは、makeというコマンドラインプログラムがよく使われます。異なる言語で書かれたソースコードをバイナリに変換するには、それぞれ固有のコンパイラとコマンドが必要ですが、makeはこの一連のプロセスを自動化してくれます。

この自動化を機能させるため、プログラム側はmakeに対して何をコンパイルすべきかを指示するメイクファイル(makefile)を提供します。現在では、CMakeなどの専用ソフトウェアによって自動生成されるのが一般的です。ここからがあなたの出番です。この段階で、どの機能をソフトウェアに組み込むかを細かく指定できます。

ソースからのビルド例

例えば、以下のコマンドはCMakeを使用してCalligraオフィススイートの設定ファイルを生成します。作成されたファイルにより、makeプログラムはCalligraのWriterコンポーネントのみをコンパイルするようになります。

cmake -DPRODUCTSET=WORDS -DCMAKE_INSTALL_PREFIX=$HOME/kde/inst5 $HOME/kde/src/calligra

この後は、makeツールを実行してコンパイルし、結果をコンピューターにコピーするだけです。手順は以下の通りです。

make
make install

これがプログラムをコンパイルする一般的な流れですが、ソースパッケージのインストール方法は他にも多数あります。例えばGentoo Linuxには、このプロセスをより速く簡単に行うための仕組みが組み込まれています。一方、バイナリパッケージのビルドには、上記のコマンドよりもさらにいくつかの手順が必要となります。

バイナリパッケージを使うメリット

Linuxを使用しているなら、インストール済みのソフトウェアはおそらく誰かが事前にコンパイルしたものです。現在ではソースパッケージよりもはるかに一般的になっています。では、なぜなのでしょうか?

バイナリ版は管理が簡単

バイナリパッケージ vs ソースパッケージ:Linuxではどちらを使うべき?

バイナリパッケージには、コンパイル済みのインストールファイル以上のものが含まれています。パッケージマネージャーがすべてのプログラムを追跡しやすくするための情報も保存されています。例えばDEBファイル(Debianおよびその派生ディストリビューションのパッケージ形式)には、プログラムの動作に必要な他のソフトウェア(依存関係)や現在のバージョンといった重要な情報も含まれています。

このおかげで、パッケージのインストールは非常に簡単になります。プログラムを正常に動作させるために他にどのファイルが必要かを気にする必要はありません。パッケージマネージャーがパッケージ自体からその情報を読み取り、必要な依存関係をすべて自動的にダウンロードしてくれるのです。

一方、ソースからプログラムをインストールする場合、コードを独自のバイナリパッケージにコンパイルしない限り、あなた自身がそのソフトウェアの管理を担当することになります。動作に必要な他のプログラムを把握し、自分でインストールしなければなりません。

バイナリ版は安定性が高い

パッケージマネージャー向けのリポジトリを管理する開発者たちは、バイナリに問題がないかテストを行い、見つかった不具合の修正に努めています。これによりプログラムの安定性が向上し、ソースからインストールしたユーザーが受けられない恩恵となっています。

さらに、パッケージは通常、システム上で確実に動作することを保証するための厳格なルールに従う必要があります。例えばDebianやUbuntuにはポリシーマニュアルが存在し、他の多くのLinuxディストリビューションにも同様のガイドラインがあります。

また、一部のプログラムは同じ依存ライブラリの異なるバージョンを必要とすることがあります。パッケージリポジトリはこうした競合の解決に尽力しているため、ユーザーは煩わしい調整から解放されます。

ソースパッケージをコンパイルするメリット

ソースからプログラムをインストールすることは、全員に必要なわけではありません。バイナリパッケージを使い続ける方がPCの管理は一般的に楽だからです。それでも、この少し手間のかかるインストール方法には、いくつかの明確な利点があります。

ソースコードなら最新ソフトウェアを利用できる

プログラムの信頼性を高めることの欠点の1つは、改善や修正に時間がかかることです。その結果、古いバージョンのソフトウェアを使い続けることになりかねません。常に最新の機能を求める人の中には、多少の不安定さを受け入れてでも最新版を選びたい人もいるでしょう。

コンパイルなしでこのニーズに応えるLinux OSもありますが、いくつかの欠点があります。例えば、決まったバージョンを頻繁にリリースしないソフトウェアは、リポジトリ内で最新状態に保つのが、ソースからインストールする場合よりも難しくなります。

これは、バイナリパッケージが通常プログラムの公式リリースから作成されるためです。そのため、リリース間の変更点は通常反映されません。自分でソースからソフトウェアをコンパイルすれば、こうした最新の変更の恩恵をすぐに受けることができます。

また、使用したいソフトウェアが自分のLinux OS用に事前ビルドされていない可能性もあります。その場合、ソースからインストールする以外に選択肢はありません。

必要な機能を選んでカスタマイズできる

バイナリパッケージ vs ソースパッケージ:Linuxではどちらを使うべき?

ソースパッケージを使用するもう1つのメリットは、インストールするプログラムをより細かく制御できることです。バイナリリポジトリからインストールする場合、パッケージのカスタマイズ方法には大きな制限があります。

例えば、コマンドラインベースの音声・動画変換ツールFFmpegを見てみましょう。デフォルトでは膨大な数の機能が搭載されており、その中には一度も使わないものも含まれるかもしれません。例えば、FFmpegにはJACKオーディオサポートが含まれていますが、この機能は通常、プロダクション環境でのみ使用されるものです。

FFmpegを自分でコンパイルすれば、不要な機能を取り除き、より軽量で自分のニーズに合ったものにできます。これは他の重量級プログラムにも同様に当てはまります。

リソースが限られている環境では、機能を削ることがシステム負荷の軽減につながります。多くのローエンドPCに搭載されているChrome OSが、Gentoo Linuxをベースにしているのも偶然ではありません。ソースベースのGentooは多くのソフトウェアをコンパイルするため、システムをより軽快に動作させられるのです。

両方を使い分けてみては?

毎日パッケージをコンパイルしたいと思うことはないかもしれませんが、ソースからのビルド方法を知っておくと役立つ場面は必ず訪れます。とはいえ、Snap StoreやFlathubなどのプラットフォームで提供されている新しいユニバーサルパッケージ形式のおかげで、最新のソフトウェアを入手するためにわざわざソースからビルドする必要性は、以前より少なくなっています。

  1. Ruby開発に最適なIDE・エディタはどれ?人気エディタを徹底比較

    開発者としての時間の大半はエディタ上で過ごすことになります。だからこそ、自分が快適に使えて、生産性を高めてくれるエディタを選ぶことがとても重要です。 この記事では、自分に合ったRuby IDE/エディタの選び方を解説します。 この決断で悩みすぎる必要はありません。まずは1つ選んで数週間使ってみて、使い心地を確かめましょう。後から乗り換えることもいつでもできます。 エディタ選びでチェックしたいポイント Ruby関連のプラグインが充実しているか オープンソースかどうか 生産性を高める標準機能があるか(コードスニペット、自動補完、邪魔にならないシンプルなデザインなど) 以下で紹介するエディタは、

  2. ShadowsocksとVPN、どちらを使うべき?違いと選び方を徹底解説

    インターネット検閲を回避したいと思ったとき、「VPNとShadowsocks、どちらが良いのか?」と疑問に抱いたことはありませんか。どちらも障壁を乗り越えるための強力なツールですが、それぞれに長所と短所があります。こうしたブロックの多くは、比較的シンプルな仕組みで機能しています。各ウェブサイトが持つ固有の識別子であるIPアドレスを、個別に、あるいは範囲指定で遮断するというものです。シンプルながら効果的な方法です。アクセスしたいブロック済みのIPアドレスへ直接向かうのではなく、まずブロックされていないIPアドレスに接続し、そこを経由して目的のサイトへアクセスする方が賢明です。IPアドレスのブロッ