| 原作者 | ロバート・ランドリー |
|---|---|
| 開発者 | ロバート・ランドリー他 |
| 初回リリース | 2006年 |
| 安定リリース | 0.8.11 / 2024年4月8日 |
| リポジトリ |
|
| 書かれた | C |
| オペレーティング·システム | Unixライク |
| サイズ | 3.30 MB (アーカイブ) |
| タイプ | 独立したSUS XCU実装 |
| ライセンス | 0BSD [1] [2] |
| Webサイト | ランドリー |
Toyboxは、 ls、cp、mvなどの200を超えるUnixコマンドラインユーティリティの無料のオープンソースソフトウェア実装です。Toyboxプロジェクトは2006年に開始され、[3] 0BSDライセンスのBusyBoxの代替品となりました。[4] [5] Toyboxは、現在サポートされているすべてのAndroidバージョンのAndroidのコマンドラインツールのほとんどに使用されており、LinuxおよびmacOSでAndroidをビルドするためにも使用されています。すべてのツールはLinuxでテストされており、その多くはBSDおよびmacOSでも動作します。
機能性と目的
Toybox は、 GPLライセンスのBusyBoxのBSD ライセンスの代替品を提供することを目指しています。[6] Toybox の主な技術設計目標は、シンプルさ、小型さ、速度、標準への準拠です。[7] Toybox は、主にPOSIX -2008 およびLSB 4.1との互換性を目指しており、 GNUの同等製品にあるすべてのオプションを備えることに重点を置いていません。[3]
Toyboxは寛容な 0BSDライセンスを使用してライセンスされていますが、BusyBoxはコピーレフトの GNU General Public Licenseを使用しており、使用ドメインが異なります。BusyBoxは主にコピーレフトのFOSSドメインで使用されていますが、Toyboxは主に寛容なライセンスのプロジェクトや営利企業で使用されています。たとえば、GoogleのAndroid [8]はToyboxの明確なターゲットです。[9]機能的には、ToyboxはBusyBoxと同等には達していません。
歴史
Toyboxは、BusyBoxの元の作成者であるBruce Perensとの論争によりBusyBoxのメンテナーとしての立場を終えたRob Landley [3] [5]によって2006年初頭に開始されました。 [10]
2008年、プロジェクトは2011年末まで休止状態[4]となった。Rob LandleyはToyboxの作業を再開し、Androidのコマンドライン実装を置き換えることを目的として、 GPL-2.0のみのライセンスからBSD-2-Clauseライセンス[11] [12]への再ライセンスから始めた。[13]
2012年の初め、ソニーの従業員ティム・バードは、BusyBoxの許容ライセンスの代替品を作成することを提案しました。[6] 2013年3月、プロジェクトはさらに許容度の高い0BSDライセンスに再ライセンスされました。[14]
2014年末、ToyboxはAndroid 6.0.x「Marshmallow」開発ブランチに統合され、デバイスで使用できるようになりました。[15] [8] [16] 2018年には、Androidビルド自体をより密閉するために、ホストToyboxのビルド済みバージョンがAOSPに追加されました。[17]
論争
2012年1月、GPLライセンスのBusyBoxプロジェクトに代わるBSDライセンスを作成するという提案は、Software Freedom Conservancyグループの著作権執行のための唯一の関連ツールを奪ったとして、Matthew Garrettから厳しい批判を浴びた。[18] BusyBoxベースの訴訟を始めたRob Landleyは、これは意図的なものであると答え、訴訟はプロジェクトに利益をもたらさず、企業の回避につながったと説明し、「私が適切だと思う方法で」訴訟を止めたいと表明した。[19] [20] [21]
プロジェクトの進捗
Toyboxの公式ドキュメントには、利用可能なコマンド、部分的に利用可能なコマンド、不足しているコマンドの概要が記載されています。[22] 2024年9月現在、バージョン0.8.11は、1.0を目標としたプロジェクトの実装目標の約80%を達成しています。[23]
- トイボックスコマンドのリスト
- acpi — 電源と熱デバイスのステータスを表示します。
- adduser、addgroup — システムにユーザーまたはグループを追加します。
- ar — アーカイブを作成、変更、および抽出します。
- arch — マシン (ハードウェア) 名を印刷します。uname -m と同じです。
- arp — アドレス解決プロトコル (ARP)
- arping — ARP REQUEST を隣接ホストに送信する
- ascii — ASCII文字セットを表示します。
- at — 後でコマンドを実行します。
- awk — パターンスキャンおよび処理言語。
- base32 — base32 でエンコードまたはデコードします。
- base64 — base64 でエンコードまたはデコードします。
- basename — サフィックスを削除したパス名のディレクトリ以外の部分を返します。
- bc — 任意精度の算術言語。
- blkdiscard — デバイスセクターを破棄します。
- blkid — ブロックデバイスまたはイメージ上のファイルシステムのタイプ、ラベル、UUID を出力します。
- blockdev — リストされた各ブロックデバイスに対して ioctl を呼び出します。
- bunzip2 — bzip2 ファイルを解凍します。
- bzcat — bzip2 ファイルを標準出力に解凍します。
- cal — カレンダーを印刷します。
- cat — ファイルを標準出力にコピー (連結) します。
- cd — 作業ディレクトリを変更します。
- chattr — Linux ファイルシステム上のファイル属性を変更します。
- chgrp — 1 つ以上のファイルのグループを変更します。
- chmod — リストされたファイルのモードを変更します。
- chown — 1 つ以上のファイルの所有者を変更します。
- chroot — 新しいルート ディレクトリ内でコマンドを実行します。
- chrt — プロセスのリアルタイム スケジューリング ポリシーと優先度を取得/設定します。
- chsh — ログインシェルを変更します。
- chvt — 仮想端末番号 N に変更します。
- cksum — ファイルごとに、CRC32 チェックサム値、長さ、ファイル名を出力します。
- clear — 画面をクリアします。
- cmp — 2 つのファイルの内容を比較します。
- comm — 2 つのファイルに共通する行を選択または拒否します。
- count — stdin を stdout にコピーし、簡単な進行状況インジケーターを stderr に表示します。
- cp — ファイルをコピーします。
- cpio — 「newc」形式の cpio アーカイブにファイルをコピーしたり、アーカイブからファイルをコピーしたりします。
- crc32 — 各ファイルの crc32 チェックサムを出力します。
- cut — 各 FILE から選択した行の一部を標準出力に出力します。
- dd — ファイルを変換してコピーします。
- date — 現在の日付/時刻を設定/取得します。
- devmem — /dev/mem 経由で物理アドレスを読み書きします。
- df — コマンドラインにリストされている各ファイルシステム、または現在マウントされているすべてのファイルシステムの合計/使用済み/使用可能なディスク容量を表示します。
- diff - 2 つのファイルを比較します。
- dirname — パスのディレクトリ部分を表示します。
- dmesg — カーネル リング バッファを印刷または制御します。
- dnsdomainname — このシステムが属するドメインを表示します (hostname -d と同じ)。
- dos2unix — 改行形式を dos の "\r\n" から unix の "\n" に変換します。
- du — ディスク使用量、ファイルとディレクトリによって消費されるスペースを表示します。
- echo — 各引数を 1 つのスペースで区切って stdout に書き込み、その後に改行を入れます。
- egrep — 拡張正規表現に一致する行を表示します。
- eject — DEVICE またはデフォルトの /dev/cdrom を排出します。
- env — コマンド呼び出しの環境を設定するか、環境変数を一覧表示します。
- expand — タブストップに応じてタブをスペースに拡張します。
- factor — 整数を因数分解します。
- fallocate — ファイルシステムにファイルのスペースを割り当てるように指示します。
- false — ゼロ以外の値を返します。
- fdisk — ディスク パーティション テーブルを操作します。
- fgrep — 正規表現に一致する行を表示します。
- file — 指定されたファイルを調べ、そのコンテンツ タイプを説明します。
- find — ディレクトリ内で一致するファイルを検索します。
- flock — アドバイザリファイルロックを管理します。
- fold — 折り線用のフィルター。
- fmt — 既存のインデント レベルを維持しながら、指定された行の長さで折り返すように入力を再フォーマットし、標準出力に書き込みます。
- free — 物理メモリとスワップ領域の合計、空き、使用済み量を表示します。
- freeramdisk — 指定された RAM ディスクに割り当てられたすべてのメモリを解放します。
- fsfreeze — ファイルシステムを凍結または解凍します。
- fstype — ブロックデバイスまたはイメージ上のファイルシステムのタイプを出力します。
- fsync — ファイルのインコア状態をストレージデバイスと同期します。
- ftpget — ファイル転送プロトコル (FTP) を使用して FTP サーバーからファイルを取得します。
- ftpput — ファイル転送プロトコル (FTP) を使用して、ファイルを FTP サーバーに置きます。
- getconf — システム構成値を取得します。
- getopt — コマンドラインオプションとパラメータを解析します。
- grep — 正規表現に一致する行を表示します。
- groups — ユーザーが所属するグループを出力します。
- gunzip — gz ファイルを解凍します。
- halt — システムを再起動、停止、または電源を切ります。
- head — ファイルの最初の行を標準出力にコピーします。
- help — toybox コマンドの使用方法情報を表示します。
- hexedit — 16 進ファイル エディター。
- hostname — 現在のホスト名を取得/設定します。
- hwclock — ハードウェア クロックを取得/設定します。
- i2cdetect — i2c デバイスを検出します。
- i2cdump — i2c レジスタをダンプします。
- i2cget — i2c レジスタを読み取ります。
- i2cset — i2c レジスタを書き込みます。
- iconv — ファイルの文字エンコーディングを変換します。
- id — ユーザーとグループの ID を出力します。
- ifconfig — ネットワーク インターフェイスを表示または構成します。
- inotifyd — ファイルシステムイベントが発生したときにプログラムを実行します。
- insmod — 指定されたオプションを渡して、MODULE という名前のモジュールをロードします。
- install — ファイルをコピーし、属性を設定します。
- ionice — プロセスの I/O スケジューリングの優先順位を変更します。
- iorenice — 既存のプロセスの I/O 優先度を表示または変更します。
- iotop — I/O によってプロセスをランク付けします。
- kill — プロセスにシグナルを送信します。
- killall — 指定された名前のすべてのプロセスにシグナル (デフォルト: TERM) を送信します。
- killall5 — 現在のセッション外のすべてのプロセスにシグナルを送信します。
- 少ない— 多いの反対
- link — ファイルへのハードリンクを作成します。
- ln — FROM と TO の間にリンクを作成します。
- logger — メッセージ (または stdin) を syslog に記録します。
- login — ユーザーとしてログインし、必要に応じてユーザー名とパスワードの入力を求めます。
- logname — 現在のユーザー名を出力します。
- losetup — ループバック デバイスをファイルに関連付けるか、ループ デバイスに関連付けられている現在のファイル (存在する場合) を表示します。
- ls — ファイルを一覧表示します。
- lsattr — Linux ファイル システム上のファイル属性を一覧表示します。
- lsmod — 現在ロードされているモジュール、そのサイズ、および依存関係を表示します。
- lspci — PCI デバイスを一覧表示します。
- lsusb — USB ホスト/デバイスを一覧表示します。
- makedevs — デバイス テーブルで指定された範囲の特殊ファイルを作成します。
- mcookie — 128 ビットの強力な乱数を生成します。
- md5sum — 各入力ファイルの md5 ハッシュを計算し、存在しない場合は stdin から読み取ります。
- memeater — 内部的にメモリを割り当てて使用します。
- microcom — シンプルなシリアルコンソール。
- mix — OSS サウンド チャネル (モジュール snd-mixer-oss) を一覧表示したり、ボリュームを設定したりします。
- mkdir — 1 つ以上のディレクトリを作成します。
- mkfifo — FIFO (名前付きパイプ) を作成します。
- mknod — 指定されたタイプの特別なファイル NAME を作成します。
- mkpasswd — crypt(3) を使用してパスワードを暗号化します。
- mkswap — デバイスまたはファイルに Linux スワップ領域を設定します。
- mktemp — 新しいファイル「DIR/TEMPLATE」を安全に作成し、その名前を出力します。
- modinfo — 名前または .ko パスで指定されたモジュールのモジュール フィールドを表示します。
- mount — ディレクトリに新しいファイルシステムをマウントします。
- mountpoint — ディレクトリまたはデバイスがマウントポイントであるかどうかを確認します。
- mv — ファイルを移動します。
- nbd-client — NBD サーバーに接続します。
- nc / netcat — stdin/stdout をファイルまたはネットワーク接続に転送します。
- netstat — ネットワーク情報を表示します。
- nice — スケジュール優先度を増減してコマンド ラインを実行します。
- nl — 入力行数。
- nohup — ターミナルの終了後も存続するコマンドを実行します。
- nproc — プロセッサの数を出力します。
- nsenter — 既存の名前空間(のセット)で COMMAND を実行します。
- od — データを8進数/16進数でダンプします。
- oneit — 単一のコマンドラインを実行するシンプルな init プログラム
- partprobe — パーティション テーブルの変更についてカーネルに通知します。
- passwd — ユーザーの認証トークンを更新します。
- paste — 各入力ファイルから対応する行をマージします。
- patch — 1 つ以上のファイルに統合された diff を適用します。
- pgrep — プロセスを検索します。
- pidof — 指定された名前を持つすべてのプロセスの PID を出力します。
- ping — ホストにパケットを送信し、その応答を報告することでネットワーク接続を確認します。
- pivot root — OLD と NEW のファイルシステムを交換し (同時マウント移動のように)、OLD の下にある chdir または chroot を持つすべてのプロセスを NEW (カーネル スレッドを含む) に移動し、OLD をアンマウントできるようにします。
- pkill — 名前やその他の情報に基づいてプロセスを検索またはシグナルする
- pmap — プロセスまたはプロセスのメモリマップを報告します。
- poweroff — システムを再起動、停止、または電源を切ります。
- printenv — 環境変数を出力します。
- printf — C の printf 構文を使用して、FORMAT に従って ARGUMENT をフォーマットして出力します。
- prlimit — プロセス番号 PID のリソース制限を印刷または設定します。
- ps — プロセスを一覧表示します。
- pwd — 作業ディレクトリ(現在のディレクトリ)を印刷します。
- pwdx — コマンドラインにリストされているプロセスの作業ディレクトリを出力します。
- readahead — ファイルをディスク キャッシュに事前ロードします。
- readlink — シンボリックリンクが指しているものを表示します。
- realpath — 正規の絶対パス名を表示する
- 再起動— システムを再起動、停止、または電源を切ります。
- renice — 実行中のプロセスの nice 値を設定する
- reset — 端末をリセットします。
- rev — ファイルが指定されていない場合は、stdin が使用され、各行を逆に出力します。
- rfkill — ワイヤレスデバイスを有効/無効にします。
- rm — ファイルシステムから各引数を削除します。
- rmdir — 1 つ以上のディレクトリを削除します。
- rmmod — Linux カーネルから MODULE という名前のモジュールをアンロードします。
- rtcwake — 指定された時間まで指定されたスリープ状態に入ります。
- sed — ストリーム エディター。
- seq — 最初から最後まで増分でカウントします。
- setfattr — POSIX 拡張属性を書き込みます。
- setsid — 新しいセッションでプロセスを実行します。
- sha1sum — 各入力ファイルの sha ハッシュを計算し、存在しない場合は stdin から読み取ります。
- shred — ファイルの内容をランダムなデータで上書きして安全に削除します。
- sleep — 終了する前に待機します。
- sntp — シンプル ネットワーク タイム プロトコル クライアント。
- sort — 入力ファイル (または stdin) から stdout へのすべてのテキスト行をソートします。
- split — INPUT (または stdin) データを、アルファベット順に増加するサフィックス (aa、ab、ac... az、ba、bb...) を持つ一連の OUTPUT (または "x") ファイルにコピーします。
- stat — ファイルまたはファイルシステムのステータスを表示します。
- strings — バイナリファイル内の印刷可能な文字列を表示する
- su — ユーザーを切り替え、root として実行されていない場合は新しいユーザーのパスワードを要求します。
- swapoff — 指定されたスワップ領域でのスワップを無効にします。
- swapon — 指定されたデバイス/ファイルでのスワッピングを有効にします。
- ルートを切り替える — initramfs の下の PID 1 から使用して initramfs を解放し、NEW_ROOT に chroot して、NEW_INIT を実行します。
- sync — 保留中のキャッシュデータをディスクに書き込み (同期)、完了するまでブロックします。
- sysctl — システム制御データ (/proc/sys の下) の読み取り/書き込み。
- tac — 行を逆の順序で出力します。
- tail — ファイルの最後の行を標準出力にコピーします。
- tar — .tar (または圧縮された t?z) ファイル内のファイルを作成、抽出、または一覧表示します。
- taskset — 特定のプロセッサでのみ実行できる新しいタスクを起動するか、既存の PID のプロセッサ アフィニティを変更します。
- tee — stdin をリストされた各ファイルにコピーし、stdout にもコピーします。
- test — テストを実行して true または false を返します。
- time — コマンドラインを実行し、経過した実時間、ユーザー時間、システム時間を秒単位で報告します。
- timeout — コマンドラインを子プロセスとして実行し、コマンドがすぐに終了しない場合は子プロセスにシグナルを送信します。
- top — プロセスアクティビティをリアルタイムで表示します。
- touch — 各 FILE のアクセス時刻と変更時刻を現在の時刻に更新します。
- true — ゼロを返します。
- truncate — ファイルの長さを設定し、必要に応じて少しずつ拡張します。
- ts — タイムスタンプの標準入力。
- tsort — 依存関係を解決するためにトポロジ的にソートします。
- tty — stdin に接続された端末のファイル名を表示します。
- tunctl — tun/tap 仮想イーサネット デバイスを作成および削除します。
- ulimit — プロセス番号 PID のリソース制限を印刷または設定します。
- umount — リストされたファイルシステムをアンマウントします。
- uname — システム情報を出力します。
- unicode — ユニバーサル文字セット。
- uniq — ファイル内の重複行を報告または除外します。
- unix2dos — 改行形式を unix "\n" から dos "\r\n" に変換します。
- unlink — 1 つのファイルを削除します。
- unshare — このプロセスとその子プロセスに新しいコンテナ名前空間を作成し、一部の属性が親プロセスと共有されないようにします。
- uptime — 現在の時刻、システムの稼働時間、ユーザー数、過去 1 分、5 分、15 分間のシステム負荷平均を表示します。
- usleep — MICROSECONDS マイクロ秒間一時停止します。
- uudecode — uuencode されたファイルをデコードします。
- uuencode — バイナリ ファイルをエンコードします。
- uuidgen — 新しい RFC4122 ランダム UUID を作成して出力します。
- vconfig — 仮想イーサネットデバイスを作成および削除します。
- vmstat — 仮想メモリの統計情報を出力します。
- w — 誰がログインしているか、またログインしてからどのくらい経っているかを表示します。
- watch — -n 秒ごとに PROG を実行し、出力を表示します。
- wc — 入力内の行数、単語数、文字数をカウントします。
- which — ファイル名に一致する実行可能ファイルを $PATH で検索します。
- watchdog — ソフトウェア ウォッチドッグ デーモン。
- who — ログインしているユーザーに関する情報を出力します。
- whoami — 現在のユーザー名を出力します。
- xargs — 標準入力からの引数を追加しながら、コマンド ラインを 1 回以上実行します。
- xxd — ファイルを stdout に 16 進ダンプします。
- yes — 強制終了されるまで行を繰り返し出力します。
- zcat — gz ファイルを標準出力に解凍します。
参照
参考文献
- ^ Toybox は Rob Landley による以下の「ゼロ条項」BSD ライセンスの下でリリースされています。
- ^ 「メーリングリストで言及されているように、ライセンステキストを簡素化する」 2013-03-14 . 2021-06-29閲覧。
- ^ abc Landley, Robert. 「What is ToyBox?」. Toybox プロジェクトのウェブサイト。2012年7 月 13 日閲覧。
- ^ ab Dj Walker-Morgan. 「Inside the ToyBox: Rob Landleyとのインタビュー」 。 2012年7月13日閲覧。
- ^ ab Varghese, Sam (2012-02-01). 「BusyBox 代替プロジェクトが激しい口論を巻き起こす」. IT Wire . 2013-05-12閲覧。
- ^ ab 「Busybox 代替プロジェクト」 2012 年 1 月 11 日. 2014 年 3 月 4 日閲覧。
- ^ Landley, Robert. 「Design Docs」。Toyboxプロジェクトのウェブサイト。2015年2 月 18 日閲覧。Toybox
は、最も一般的な Linux コマンドライン ユーティリティを 1 つの BSD ライセンス実行ファイルにまとめたものです。シンプルで小さく、高速で、標準に準拠しています (POSIX-2008 および LSB 4.1)。
- ^ ab toybox on android.googlesource.com (2014-12-28)
- ^ celf-2015.txt by Rob Landley (2015)
- ^ Landley, Robert (2006-09-30). 「今から出かけます。しばらく時間がかかるかもしれません」。busybox (メーリング リスト)。
- ^ Toybox が toybox.landley.narkive.com で再スタート (2011-11-20)
- ^ 2条項BSDライセンスに切り替え(スクリプトディレクトリに関する警告付き)。2011年11月15日、landleyによる0.2.0
- ^ 「トイボックスニュース」.
- ^ メーリングリストで言及されているように、ライセンステキストを簡素化します。Landley (2013 年 3 月 14 日)
- ^ Android が lwn.netでおもちゃ箱を入手、Jake Edge 著 (2015 年 1 月 14 日)
- ^ 問題 76861: dos2unix、unix2dos、sort、uniq、usleep を含む Toybox の一部を Android にインポートする
- ^ 「プレビルドされたトイボックスの使用を開始する」。
- ^ 「Garrett: GPL 施行に対する継続的な戦い」LWN.net 2012-01-31 2014-03-04取得。
ここでの本当の問題は、[Software Freedom Conservancy] が Busybox に依存しているため、Busybox コードを使用する侵害者しかターゲットにできないことです。主要なカーネル著作権所有者は、今のところ SFC に著作権の施行を許可すると申し出ていません。その結果、ベンダーがこの Busybox 代替品に移行すると、施行措置は停止することになります。
- ^ 「Garrett: GPL 施行に対する継続的な戦い」LWN.net 2012-01-31 2014-03-04閲覧>
そもそもこれらの訴訟を起こした元 busybox のメンテナーとして、そして今ではそうしたことを非常に後悔している私には、私が適切だと思う方法で訴訟を止める権利があると思います。これらの訴訟の結果、busybox リポジトリにコードが 1 行も追加されませんでした。これらの訴訟の結果、複数の企業が Linux 開発から完全に撤退し、組み込み製品を Linux 以外のオペレーティング システムに切り替えることになりました。また、Android の「ユーザー空間では GPL 禁止」ポリシーの背後にある大きな理由でもあります。
- ^ Proffitt, Brian (2012-02-02). 「GPL の施行がコミュニティの炎上を引き起こす - 施行の風呂の水と一緒に GPL の赤ん坊も捨ててしまうのか?」 ITworld . 2015-03-04閲覧。
- ^ Landley, Rob. 「Embedded Linux Conference 2013 - Toybox: Writing a New Command Line」(ビデオ)。The Linux Foundation。2021年12月21日時点のオリジナルよりアーカイブ。 2016年6月24日閲覧。
- ^ おもちゃ箱のステータス
- ^ 0.8.7 のプロジェクト進捗状況
外部リンク
- 公式サイト
