BusyBox
busybox-w32
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の開発が低調になると、当時Lineo, Inc.にいた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、asmutils、Perlによる実装の4種類でLinuxの標準的なコマンドを比較したとき、基本的に GNU の実装の物の方が実行速度が速いが、BusyBox の方が実行速度が速い場合が存在した。
公式のBusyBoxのドキュメントには、利用可能なコマンドとそのオプションの一覧が掲載されている。
BusyBoxコマンドの一覧Div col
[
[
cat — ファイルの内容を標準出力にコピーする
chmod — ファイルのモードを変更する
cp — コピーする
date — システム日時を表示する
dd — ファイルを変換・フォーマットしながらコピーする
df — ファイルシステムの使用統計を表示する
echo — 指定した1行の文字列を表示する
fsck.minix
grep — 各ファイルまたは標準入力の中からパターンを検索する
gunzip — 圧縮ファイルを展開する
gzip — ファイルを圧縮する
kill — プロセスをkillする
ln — 指定した対象を指すリンクまたはディレクトリを作成する
login — システムの新しいセッションを開始する
ls — ファイルまたはディレクトリのリストを表示する
mdev — udev に似たコマンド
mkdir — ディレクトリを作成する
mkfs.minix
mkfs.vfat
more — ファイルまたは標準入力を1画面ずつ表示する
mount — ファイルシステムをマウントする
mv (UNIX) — ファイルを移動する
nc — ネットワークに関するスイスアーミーナイフ
netstat — ネットワークの情報を表示する
pidof — 指定した名前に一致したすべてのプロセスのPIDの一覧を表示する
ping — 指定したネットワークホストにICMP ECHO_REQUESTのパケットを送信する
ps — プロセスのステータスを表示する
pwd — ワーキングディレクトリを表示する
rm — ファイルを削除する
rmdir — ディレクトリを削除する
sed — テキストストリームエディタ
sha1sum — SHA-1メッセージダイジェストを計算・検証する
sha256sum — SHA-256メッセージダイジェストを計算・検証する
sha512sum — SHA-512メッセージダイジェストを計算・検証する
sleep — プログラムの実行を指定した時間一時停止する
stty — ターミナルの行の設定を変更・表示する
su — 他のユーザーアカウントの権限でコマンドを実行する
sum — ファイルのチェックサムの計算・ブロック数のカウントを行う
sync — ファイルシステムブロックのすべてのバッファをディスクに書き込む
tac — ファイルを逆順に結合して表示する
tail — ファイルの最後の部分を出力する
tee — 標準出力を複数のファイルに送信する
timeout — コマンドにタイムリミットを指定して実行する
touch — 指定したファイルの最終更新日時を更新する
tr — 文字の変換や削除を行う
udhcpc — 小型のDHCPクライアント
umount — ファイルシステムをアンマウントする
uname — システムの情報を表示する
uptime — システムの起動後の経過時間を表示する
usleep — Nマイクロ秒一時停止する
vconfig — VLAN(802.1q)の設定プログラム
vi — ファイルを編集する(visual edit)
vlock — 仮想コンソールのロックプログラム
volname — ボリューム名を表示する
watch — プログラムを定期的に実行する
watchdog — software watchdogのデーモン
wc — 単語数、行数、バイト数、文字数をカウントする
which — コマンドのフルパスを表示する
who — 現在システムを利用しているユーザーを表示する
whoami — 現在使用しているユーザーのuseridを表示する
xargs — 引数リストを組み合わせてユーティリティを実行する
yes — 文字列を繰り返し表示する
zcat — 圧縮ファイルを標準出力に展開する
BusyBox内のプログラムを実行するには、次のように、その名前をBusyBoxの引数として指定すればよい。
/bin/busybox ls
通常は、使用したいコマンド名を(ハードリンクまたはシンボリックリンクを使って)BusyBoxの実行ファイルへのリンクとして作成する。BusyBoxは指定されたコマンド名をargvから読み取り、適切なコマンドを実行する。たとえば、/bin/lsを/bin/busyboxへのリンクとして作成したあと、次のコマンドを実行するような使い方をする。
/bin/ls
これが機能するのは、プログラムに渡された第1引数は、プログラムの呼び出しに使用されるからである。この例では、第1引数は"/bin/ls"となる。
Busyboxは、「プログラムの名前」が"ls"であると判断して、"ls"プログラムと同じように動作する。
通常、それぞれのコマンド名をBusyBox実行ファイルにリンクする(ハードリンクまたはシンボリックリンク)。BusyBoxは呼び出されたときの名前を調べ、適切なコマンドを実行する。例えば、/bin/lsを/bin/busyboxにリンクした状態で/bin/lsを実行する。
コンパイル後にmake installすることで、各種コマンド /bin、/usr/bin、/sbinなどにシンボリックリンクが作成される。Linuxカーネルから最初に起動される/sbin/initもシンボリックリンクでちゃんと作成される。これらに、加えて、/tmpを作り、/procと/sysのマウントと/devの生成を/etc/init.d/rcSに書くことにより、一つのLinuxディストリビューションが出来上がる。
Debianなどでは、パッケージマネージャーからbusyboxパッケージをインストールした後、busybox --install -s DIRとすることで指定されたディレクトリにシンボリックリンクが作成される。
Linuxを使った機器でBusyBoxを採用しているものは多い。以下に例を挙げる。
Actiontec GT701 DSLモデム/ルーター(GT701-WG 無線DSLモデム/ルーター)Qwest製DSLを採用。
Actiontec M1000 DSLモデム/ルーター Qwest製DSLを採用。
Actiontec MI424WR MoCA 無線ルーター Verizon FiOSを採用。
Amazon Kindle・電子ブックリーダー
ASUS 無線ブロードバンドルーター WL-500g、AM604G、RT-AC68U
AZTECH 無線DSLブロードバンドルーター 605EW
BT無線ルーター BT Home Hub
ディーリンク製品(DSL-500B, DSL-504T, DSL-524T, DSL-564T, DSL-584T, DSL2500U, DSL2540U, DSL2640U, DSL-2640T, DSL-G604T, DSL-G624T, DSL-G664T, DSL-G684T など)
Dream Multimedia Dreambox ホビースト用DVBサーバ
Edimax 製品(EW-7206APg Wifi Access Point など)
Emprex ME1 HD Multimedia Enclosure
フランスの通信業者 Iliad が配布しているDSLモデム/ルーター Freebox
Gamepark Holdings のオープンソースLinuxゲーム機 GP2X
IBM Hardware Management Console (HMC)
LaCie Ethernet Big Disk 1TB
LevelOne  製品(WBR-3460A など)
リンクシス製品(NSLU2 NAS、WRT54Gブロードバンドルーターなど)
Mvix MX-760HD メディアプレーヤー
Netcomm NB1 ADSLモデム
NTT ルータ (RT-200-KI)
ネットギア製ルーター(DG834G など)
Neuros OSD MPEG ビデオレコーダー
OvisLink製品(WL-5460AP WiFi AccessPoint、Evo-DSL04 Modem/Router ADSL2+ など)
Open Networks iConnect612 ADSLルーター
Picotux(Linuxの動作する世界最小のコンピュータ)
QNAP NAS (TS-101、TS-201など)
Sonos Digital Music System
ソニー Digital Video Recorders DHG-HDD250 & DHG-HDD500
Telindus 1130 ADSL Router
Thecus NAS
TP-Link 製品(TD-88xx ADSLルーターなど)
より完全な一覧は公式サイトにある。
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日に同社が訴訟費用も含めた懲罰的な賠償金を支払うことで決着した。