BusyBox

BusyBox（ビジーボックス）は、Coreutilsなど標準UNIXコマンドで重要な多数のプログラムを単一の実行ファイルに「詰め込んで」提供する、特殊な方式のプログラムである（その詰め込み方法を指して呼ぶこともある）。BusyBoxの実行ファイルはLinux上で最小の実行ファイルとなるよう設計されており、各コマンドの実行ファイルをインストールするのに比べディスクの使用量を大幅に削減することができる。そのため、特定用途のLinuxディストリビューションや組み込みシステムに適しており、「組み込みLinuxの十徳ナイフ」とも呼ばれている。GPLv2でリリースされているフリーソフトウェアである。
機能的には1994年にメリーランド大学カレッジパーク校でJames da Silvaが開発したFreeBSD用のプログラムである "crunchgen"コマンドと似ている。
歴史.
1996年、ブルース・ペレンズが書いたのが起源である。Debianディストリビューション用のレスキューディスクにもインストーラにもなるフロッピーディスク1枚の完全なブート可能システムとして設計した。組み込みLinuxや各種Linuxディストリビューションのインストーラのデファクトスタンダードとなった。Linuxのそれぞれの実行ファイルには数キロバイトのオーバーヘッドがあるが、BusyBoxは200以上のプログラムを1つにまとめることで領域消費を大幅に削減している。
BusyBoxは、Debian のブートフロッピーインストーラ向けにEnrique Zanardiが1998年まで保守していたが、その後Linux Router Project (LRP) のDave Cinegeが引き継いだ。Cinegeはビルド環境のモジュール化などのいくつかの改良を施し、より組み込みシステム指向にした。1999年になってLRPの開発が低調になると、当時にいたErik Andersenが引継ぎ、1999年12月から2006年3月まで保守を行った。この間、Linuxの組み込み用途の利用は爆発的に増大し、BusyBoxの機能も利用も増えていった。
2007年後半以降、BusyBoxをGPLに違反した使い方をした複数の企業を訴え、勝利したことで有名になった。
現在は Denys Vlasenko が保守を行っている。
機能.
BusyBoxは200以上のユーティリティの一部だけを実装するようカスタマイズできる。Single UNIX Specification に含まれるユーティリティの大部分と他のLinuxでよく使われるユーティリティを提供できる。ユーティリティの一覧はBusyBoxのサイトにある。BusyBoxはUnixシェルにはashを使っている。
単一バイナリ.
通常、コンピュータプログラムにはそれぞれ個別のバイナリファイル（実行ファイル）がある。BusyBoxは全体で1つのバイナリになっており、その中に多数のアプリケーションが含まれている。それぞれのアプリケーションは単一のBusyBoxのバイナリをそれぞれの名前（ソフトリンクやハードリンクで名前とバイナリをリンクする）で適切な引数付きで呼び出すことで利用できる。
BusyBoxの単一バイナリは、実行ファイルのフォーマット（通常、ELF）によるオーバーヘッドを削減し、ライブラリを使うことなく、複数のアプリケーション間でコードを共有可能にする。
共通コードを共有し、サイズを最適化するよう心がけて各ルーチンを記述しているため、BusyBoxが代替しているユーティリティ群に比較して大幅な領域削減を実現している。2004年当時の Doug Thayer と Keith Miller による調査によると、GNUプロジェクト、BusyBox、、Perlによる実装の4種類でLinuxの標準的なコマンドを比較したとき、基本的に GNU の実装の物の方が実行速度が速いが、BusyBox の方が実行速度が速い場合が存在した。
コマンド.
公式のBusyBoxのドキュメントには、利用可能なコマンドとそのオプションの一覧が掲載されている。
BusyBoxコマンドの一覧
実行例.
BusyBox内のプログラムを実行するには、次のように、その名前をBusyBoxの引数として指定すればよい。
通常は、使用したいコマンド名を（[[ハードリンク]]または[[シンボリックリンク]]を使って）BusyBoxの実行ファイルへのリンクとして作成する。BusyBoxは指定されたコマンド名をから読み取り、適切なコマンドを実行する。たとえば、"/bin/ls"を"/bin/busybox"へのリンクとして作成したあと、次のコマンドを実行するような使い方をする。
これが機能するのは、プログラムに渡された第1引数は、プログラムの呼び出しに使用されるからである。この例では、第1引数は"/bin/ls"となる。
Busyboxは、「プログラムの名前」が"ls"であると判断して、"ls"プログラムと同じように動作する。
インストール.
通常、それぞれのコマンド名をBusyBox実行ファイルにリンクする（[[ハードリンク]]または[[シンボリックリンク]]）。BusyBoxは呼び出されたときの名前を調べ、適切なコマンドを実行する。例えば、"/bin/ls"を"/bin/busybox"にリンクした状態でcodice_2を実行する。
[[コンパイラ|コンパイル]]後にcodice_4することで、各種コマンド /bin、/usr/bin、/sbinなどにシンボリックリンクが作成される。Linuxカーネルから最初に起動される[[init|/sbin/init]]もシンボリックリンクでちゃんと作成される。これらに、加えて、/tmpを作り、/procと/sysのマウントと/devの生成を/etc/init.d/rcSに書くことにより、一つの[[Linuxディストリビューション]]が出来上がる。
[[Debian]]などでは、パッケージマネージャーからbusyboxパッケージをインストールした後、codice_5とすることで指定されたディレクトリにシンボリックリンクが作成される。
利用している機器.
Linuxを使った機器でBusyBoxを採用しているものは多い。以下に例を挙げる。
より完全な一覧は公式サイトにある。
GPL違反問題.
BusyBoxの組み込み機器での使用が、初のGPL違反問題として法廷に持ち込まれた。[[2007年]][[9月20日]]、AndersenとLandleyの付託を受け [[Software Freedom Law Center]] (SFLC) がMonsoon Multimedia Inc.を訴えた（訴訟番号07-CV-8205、ニューヨーク州南部地区連邦地方裁判所）。同社の[[ファームウェア]]アップグレードの中にBusyBoxのコードが見つかり、同社に連絡しようとしたができなかったのが発端である。この件はMonsoon版のソースの公開と、AndersenとLandleyへの賠償金の支払い（金額は未公開）で決着した。
2007年11月21日、SFLCはAndersenとLandleyの付託を受けてさらに2社を訴えた。Xterasys（訴訟番号07-CV-10456）とHigh-Gain Antennas（訴訟番号07-CV-10455）である。Xterasys の件は12月17日、High-Gain Antennasの件は2008年3月6日、Monsoonの件と同じような決着（ライセンスに従うことと、賠償金の支払い）をした。2007年12月7日には[[ベライゾン・コミュニケーションズ]]が同社のActiontecルーター用ファームウェアについて訴えられた。この件は2008年3月17日、ライセンスに従うこと、今後のライセンス遵守を監督する役員の指定、賠償金の支払い（金額は未公開）で決着した。次に2008年6月9日、Bell Microproducts（訴訟番号 08-CV-5270）と Super Micro Computer（訴訟番号 08-CV-5269）が訴えられ、Super Microの件は2008年7月23日に決着し、Bell Microproductsは出廷しなかったため、2008年9月10日に同社が訴訟費用も含めた懲罰的な賠償金を支払うことで決着した。
外部リンク.
[[Category:組み込みオペレーティングシステム]]
[[Category:Linux]]
[[Category:フリープログラミングツール]]
[[Category:POSIX準拠シェル]]