852b24fd1b
We've removed the need for perl and runalarm, rsync was misleading (as you'd hope!), and we now use a prebuilt of the xmllint in AOSP itself.
1044 lines
46 KiB
HTML
Executable File
1044 lines
46 KiB
HTML
Executable File
<html><head><title>toybox roadmap</title>
|
|
<!--#include file="header.html" -->
|
|
<title>Toybox Roadmap</title>
|
|
|
|
<h2>Goals and use cases</h2>
|
|
|
|
<p>We have several potential use cases for a new set of command line
|
|
utilities, and are using those to determine which commands to implement
|
|
for Toybox's 1.0 release.</p>
|
|
|
|
<p>The most interesting standards are POSIX-2008 (also known as the Single
|
|
Unix Specification version 4) and the Linux Standard Base (version 4.1).
|
|
The main test harness including toybox in Aboriginal Linux and if that can
|
|
build itself using the result to build Linux From Scratch (version 6.8).
|
|
We also aim to replace Android's Toolbox.</p>
|
|
|
|
<p>At a secondary level we'd like to meet other use cases. We've analyzed
|
|
the commands provided by similar projects (klibc, sash, sbase, embutils,
|
|
nash, and beastiebox), along with various vendor configurations of busybox,
|
|
and some end user requests.</p>
|
|
|
|
<p>Finally, we'd like to provide a good replacement for the Bash shell,
|
|
which was the first program Linux ever ran and remains the standard shell
|
|
of Linux no matter what Ubuntu says. This doesn't mean including the full
|
|
set of Bash 4.x functionality, but does involve {various,features} beyond
|
|
posix.</p>
|
|
|
|
<p>See the <a href=status.html>status page</a> for the combined list
|
|
and progress towards implementing it.</p>
|
|
|
|
<ul>
|
|
<li><a href=#susv4>POSIX-2008/SUSv4</a></li>
|
|
<li><a href=#sigh>Linux "Standard" Base</a></li>
|
|
<li><a href=#dev_env>Development Environment</a></li>
|
|
<li><a href=#android>Android Toolbox</a></li>
|
|
<li><a href=#aosp>Building AOSP</a></li>
|
|
<li><a href=#tizen>Tizen Core</a></li>
|
|
<li><a href=#buildroot>buildroot</a></li>
|
|
<li>Miscelaneous: <a href=#klibc>klibc</a>, <a href=#glibc>glibc</a>,
|
|
<a href=#sash>sash</a>, <a href=#sbase>sbase</a>,
|
|
<a href=#uclinux>uclinux</a>...</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<a name="standards">
|
|
<h2>Use case: standards compliance.</h2>
|
|
|
|
<h3><a name=susv4 /><a href="#susv4">POSIX-2008/SUSv4</a></h3>
|
|
<p>The best standards are the kind that describe reality, rather than
|
|
attempting to impose a new one. (I.E. a good standard should document, not
|
|
legislate.)</p>
|
|
|
|
<p>The kind of standards which describe existing reality tend to be approved by
|
|
more than one standards body, such ANSI and ISO both approving C. That's why
|
|
the IEEE POSIX committee's 2008 standard, the Single Unix Specification version
|
|
4, and the Open Group Base Specification edition 7 are all the same standard
|
|
from three sources.</p>
|
|
|
|
<p>The <a href="http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html">"utilities"
|
|
section</a>
|
|
of these standards is devoted to the unix command line, and are the best such
|
|
standard for our purposes. (My earlier work on BusyBox was implemented with
|
|
regard to SUSv3, an earlier version of this standard.)</p>
|
|
|
|
<h3>Problems with the standard</h3>
|
|
|
|
<p>Unfortunately, these standards describe a subset of reality, lacking any
|
|
mention of commands such as init, login, or mount required to actually boot a
|
|
system. It provides ipcrm and ipcs, but not ipcmk, so you can use System V IPC
|
|
resources but not create them.</p>
|
|
|
|
<p>These standards also contain a large number of commands that are
|
|
inappropriate for toybox to implement in its 1.0 release. (Perhaps some of
|
|
these could be reintroduced in later releases, but not now.)</p>
|
|
|
|
<p>Starting with the full "utilities" list, we first remove generally obsolete
|
|
commands (compess ed ex pr uncompress uccp uustat uux), commands for the
|
|
pre-CVS "SCCS" source control system (admin delta get prs rmdel sact sccs unget
|
|
val what), fortran support (asa fort77), and batch processing support (batch
|
|
qalter qdel qhold qmove qmsg qrerun qrls qselect qsig qstat qsub).</p>
|
|
|
|
<p>Some commands are for a compiler toolchain (ar c99 cflow ctags cxref gencat
|
|
iconv lex m4 make nm strings strip tsort yacc), which is outside of toybox's
|
|
mandate and should be supplied externally. (Again, some of these may be
|
|
revisited later, but not for toybox 1.0.)</p>
|
|
|
|
<p>Some commands are part of a command shell, and cannot be implemented as
|
|
separate executables (alias bg cd command fc fg getopts hash jobs kill read
|
|
type ulimit umask unalias wait). These may be revisited as part of a built-in
|
|
toybox shell, but are not exported into $PATH via symlinks. (If you fork a
|
|
child process and have it "cd" then exit, you've accomplished nothing.
|
|
This is not a complete list, a shell also needs exit, if, while, for, case,
|
|
export, set, unset, trap, exec... And for bash compatability, function and
|
|
source.)</p>
|
|
|
|
<blockquote><b>
|
|
<span id=shell>
|
|
alias bg cd command fc fg getopts hash jobs kill read type ulimit umask
|
|
unalias wait exit if while for case export set unset trap exec function source
|
|
</span>
|
|
</b></blockquote>
|
|
|
|
<p>A few other commands are judgement calls, providing command-line
|
|
internationalization support (iconv locale localedef), System V inter-process
|
|
communication (ipcrm ipcs), and cross-tty communication from the minicomputer
|
|
days (talk mesg write). The "pax" utility was supplanted by tar, "mailx" is
|
|
a command line email client, and "lp" submits files for printing to... what
|
|
exactly? (cups?) The standard defines crontab but not crond.</p>
|
|
|
|
<p>Removing all of that leaves the following commands, which toybox should
|
|
implement:</p>
|
|
|
|
<blockquote><b>
|
|
<span id=posix>
|
|
at awk basename bc cal cat chgrp chmod chown cksum cmp comm cp
|
|
csplit cut date dd df diff dirname du echo env expand expr false file find
|
|
fold fuser getconf grep head id join kill link ln logger logname ls man
|
|
mkdir mkfifo more mv newgrp nice nl nohup od paste patch pathchk printf ps
|
|
pwd renice rm rmdir sed sh sleep sort split stty tabs tail tee test time
|
|
touch tput tr true tty uname unexpand uniq unlink uudecode uuencode vi wc
|
|
who xargs zcat
|
|
</span>
|
|
</b></blockquote>
|
|
|
|
<h3><a name=sigh /><a href="#sigh">Linux Standard Base</a></h3>
|
|
|
|
<p>One attempt to supplement POSIX towards an actual usable system was the
|
|
Linux Standard Base. Unfortunately, the quality of this "standard" is
|
|
fairly low.</p>
|
|
|
|
<p>POSIX allowed its standards process to be compromised
|
|
by leaving things out, thus allowing IBM mainframes and Windows NT to drive
|
|
a truck through the holes and declare themselves compilant. But it means what
|
|
they DID standardize tends to be respected (if sometimes obsolete).</p>
|
|
|
|
<p>The Linux Standard Base's failure mode is different, they respond to
|
|
pressure by including special-case crap, such as allowing Red Hat to shoehorn
|
|
RPM into the standard even though all sorts of distros (Debian, Slackware, Arch,
|
|
Gentoo) don't use it and probably never will. This means anything in the LSB is
|
|
at best a suggestion: arbitrary portions of this standard are widely
|
|
ignored.</p>
|
|
|
|
<p>The community perception seems to be that the Linux Standard Base is
|
|
the best standard money can buy, I.E. the Linux Foundation is supported by
|
|
financial donations from large companies and the LSB
|
|
<a href=https://www.softwarefreedom.org/blog/2016/apr/11/lf/>represents the interests
|
|
of those donors</a> more than technical merit. (The Linux Foundation, which
|
|
maintains the LSB, isn't a 501c3. It's a 501c6, the
|
|
same kind of legal entity as the Tobacco Institute and Microsoft's old
|
|
"Don't Copy That Floppy" program.) Debian officially
|
|
<a href=http://lwn.net/Articles/658809>washed its hands of LSB</a> when 5.0
|
|
came out in 2015, and no longer even pretends to support it (which may affect
|
|
Debian derivatives like Ubuntu and Knoppix). Toybox hasn't moved to 5.0 for
|
|
similar reasons.</p>
|
|
|
|
<p>That said, Posix by itself isn't enough, and this is the next most
|
|
comprehensive standards effort for Linux so far, so we salvage what we can.</p>
|
|
|
|
<p>The LSB specifies a <a href=http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/cmdbehav.html>list of command line
|
|
utilities</a>:</p>
|
|
|
|
<blockquote><b>
|
|
ar at awk batch bc chfn chsh col cpio crontab df dmesg du echo egrep
|
|
fgrep file fuser gettext grep groupadd groupdel groupmod groups
|
|
gunzip gzip hostname install install_initd ipcrm ipcs killall lpr ls
|
|
lsb_release m4 md5sum mknod mktemp more mount msgfmt newgrp od passwd
|
|
patch pidof remove_initd renice sed sendmail seq sh shutdown su sync
|
|
tar umount useradd userdel usermod xargs zcat
|
|
</b></blockquote>
|
|
|
|
<p>Where posix specifies one of those commands, LSB's deltas tend to be
|
|
accomodations for broken tool versions which aren't up to date with the
|
|
standard yet. (See <a href=http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/more.html>more</a> and <a href=http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/xargs.html>xargs</a>
|
|
for examples.)</p>
|
|
|
|
<p>Since we've already committed to using our own judgement to skip bits of
|
|
POSIX, and LSB's "judgement" in this regard is purely bug workarounds to declare
|
|
various legacy tool implementations "compliant", this means we're mostly
|
|
interested in the set of tools that aren't specified in posix at all.</p>
|
|
|
|
<p>Of these, gettext and msgfmt are internationalization, install_initd and
|
|
remove_initd weren't present in Ubuntu 10.04, lpr is out of scope,
|
|
and lsb_release just reports information in /etc/os-release.</p>
|
|
|
|
<p>This leaves:</p>
|
|
|
|
<blockquote><b>
|
|
<span id=lsb>
|
|
chfn chsh dmesg egrep fgrep groupadd groupdel groupmod groups
|
|
gunzip gzip hostname install killall md5sum
|
|
mknod mktemp mount passwd pidof sendmail seq shutdown
|
|
su sync tar umount useradd userdel usermod zcat
|
|
</span>
|
|
</b></blockquote>
|
|
|
|
<hr />
|
|
<a name="dev_env">
|
|
<h2><a href="#dev_env">Use case: provide a self-hosting development environment</a></h2>
|
|
|
|
<p>The following commands are enough to build the <a href=http://landley.net/aboriginal/about.html>Aboriginal Linux</a> development
|
|
environment, boot it to a shell prompt, and build <a href=http://www.linuxfromscratch.org/lfs/view/6.8/>Linux From Scratch 6.8</a> under it.</p>
|
|
|
|
<p>This use case includes running init scripts and other shell scripts, running
|
|
configure, make, and install in each package, and providing basic command line
|
|
facilities such as a text editor. (It does not include a compiler toolchain or
|
|
C library, those are outside the scope of this project.)</p>
|
|
|
|
<blockquote><b>
|
|
<span id=development>
|
|
bzcat cat cp dirname echo env patch rmdir sha1sum sleep sort sync
|
|
true uname wc which yes zcat
|
|
awk basename chmod chown cmp cut date dd diff
|
|
egrep expr fdisk find grep gzip head hostname id install ln ls
|
|
mkdir mktemp mv od readlink rm sed sh tail tar touch tr uniq
|
|
wget whoami xargs chgrp comm gunzip less logname split
|
|
tee test time bunzip2 chgrp chroot comm cpio dmesg
|
|
dnsdomainname ftpd ftpget ftpput gunzip ifconfig init less
|
|
logname losetup mdev mount mountpoint nc pgrep pkill
|
|
pwd route split stat switch_root tac umount vi
|
|
resize2fs tune2fs fsck.ext2 genext2fs mke2fs xzcat
|
|
</span>
|
|
</b></blockquote>
|
|
|
|
<p>Aboriginal Linux also installs bash 2.05b as #!/bin/sh and its scripts
|
|
require bash extensions not present in shells such as busybox ash.
|
|
This means that toysh needs to supply several bash extensions _and_ work
|
|
when called under the name "bash".</p>
|
|
|
|
<p>The <a href=http://landley.net/aboriginal>Aboriginal Linux</a>
|
|
self-bootstrapping build still uses the following busybox commands,
|
|
not yet supplied by toybox:</p>
|
|
|
|
<blockquote><p>
|
|
awk bunzip2 bzcat dd diff expr fdisk ftpd ftpget
|
|
ftpput gunzip gzip less ping route sh
|
|
sha512sum tar test tr unxz vi wget xzcat zcat
|
|
</p></blockquote>
|
|
|
|
<p>Many of those are in "pending". The remaining "difficult"
|
|
commands are vi, awk, and sh.</p>
|
|
|
|
<p>Building Linux From Scratch is not the same as building the
|
|
<a href=https://source.android.com>Android Open Source Project</a>,
|
|
but after toybox 1.0 focus may shift to <a href=http://landley.net/aboriginal/about.html#hairball>modifying the AOSP build</a>
|
|
to reduce dependencies. (It's fairly likely we'll have to add at least
|
|
a read-only git utility so repo can download the build's source code,
|
|
but that's actually <a href=https://www.youtube.com/watch?v=P7n6G2IL6eo>not
|
|
that hard</a>. We'll probably also need our own "make" at some point after
|
|
1.0.)</p>
|
|
|
|
<p>Note: Aboriginal Linux was
|
|
<a href=https://landley.net/aboriginal/news.html>restarted</a> (I.E. <a href=https://github.com/landley/mkroot>replaced</a>) due to toolchain licensing issues, but the new project is a simpler implementation of the same goals,
|
|
and when finished should provide the same test environment for toybox.
|
|
This section needs to be rewritten whem mkroot is complete enough to build
|
|
Linux From Scratch.</p>
|
|
|
|
<p>The development methodology used a <a href=http://landley.net/aboriginal/FAQ.html#debug_logging>command logging wrapper</a>
|
|
that intercepted each command called out of the $PATH and append the
|
|
command line to a log file, then <a href=https://github.com/landley/aboriginal/blob/master/more/report-recorded-commands.sh>analyze</a> the result to create a
|
|
<a href=https://landley.net/notes-2008.html#23-01-2008>list of commands</a>,
|
|
then <a href=https://github.com/landley/aboriginal/blob/master/host-tools.sh>create a directory of symlinks</a> pointing to those commands out of the
|
|
host $PATH. Then the new implementation can replace these commands one
|
|
at a time, checking the results and the log output to spot any behavior
|
|
changes.</p>
|
|
|
|
<hr />
|
|
<h2><a name=android /><a href="#android">Use case: Replacing Android Toolbox</a></h2>
|
|
|
|
<p>Android has a policy against GPL in userspace, so even though BusyBox
|
|
predates Android by many years, they couldn't use it. Instead they grabbed
|
|
an old version of ash and implemented their own command line utility set
|
|
called "toolbox". ash was later replaced by
|
|
<a href="https://www.mirbsd.org/mksh.htm">mksh</a>; toolbox is being
|
|
replaced by toybox.</p>
|
|
|
|
<p>Toolbox doesn't have its own repository, instead it's part of Android's
|
|
<a href=https://android.googlesource.com/platform/system/core>system/core
|
|
git repository</a>. Android's Native Development Kit (their standalone
|
|
downloadable toolchain) has its own
|
|
<a href=https://android.googlesource.com/platform/ndk/+/master/docs/Roadmap.md>roadmap</a>, and each version has
|
|
<a href=https://developer.android.com/ndk/downloads/revision_history>release
|
|
notes</a>.</p>
|
|
|
|
<h3>Toolbox commands:</h3>
|
|
|
|
<p>According to <a href=https://android.googlesource.com/platform/system/core/+/master/toolbox/Android.mk>
|
|
system/core/toolbox/Android.mk</a> the toolbox directory builds the
|
|
following commands:</p>
|
|
|
|
<blockquote><b>
|
|
dd getevent newfs_msdos
|
|
</b></blockquote>
|
|
|
|
<p>The toolbox makefile also builds the BSD grep right now, because toybox
|
|
grep is missing <code>--color</code>.</p>
|
|
|
|
<h3>Other Android /system/bin commands</h3>
|
|
|
|
<p>Other than the toolbox links, the currently interesting
|
|
binaries in /system/bin are:</p>
|
|
|
|
<ul>
|
|
<li><b>arping</b> - ARP REQUEST tool (iputils)</li>
|
|
<li><b>blkid</b> - identify block devices (e2fsprogs)</li>
|
|
<li><b>e2fsck</b> - fsck for ext2/ext3/ext4 (e2fsprogs)</li>
|
|
<li><b>fsck.f2fs</b> - fsck for f2fs (f2fs-tools)</li>
|
|
<li><b>fsck_msdos</b> - fsck for FAT (BSD)</li>
|
|
<li><b>gzip</b> - compression/decompression tool (zlib)</li>
|
|
<li><b>ip</b> - network routing tool (iproute2)</li>
|
|
<li><b>iptables/ip6tables</b> - IPv4/IPv6 NAT admin (iptables)</li>
|
|
<li><b>iw</b> - wireless device config tool (iw)</li>
|
|
<li><b>logwrapper</b> - redirect stdio to android log (Android)</li>
|
|
<li><b>make_ext4fs</b> - make ext4 fs (Android)</li>
|
|
<li><b>make_f2fs</b> - make f2fs fs (f2fs-tools)</li>
|
|
<li><b>ping/ping6</b> - ICMP ECHO_REQUEST tool (iputils)</li>
|
|
<li><b>reboot</b> - reboot (Android)</li>
|
|
<li><b>resize2fs</b> - resize ext2/ext3/ext4 fs (e2fsprogs)</li>
|
|
<li><b>sh</b> - mksh (BSD)</li>
|
|
<li><b>ss</b> - socket statistics (iproute2)</li>
|
|
<li><b>tc</b> - traffic control (iproute2)</li>
|
|
<li><b>tracepath/tracepath6</b> - trace network path (iputils)</li>
|
|
<li><b>traceroute/traceroute6</b> - trace network route (iputils)</li>
|
|
</ul>
|
|
|
|
<p>The names in parentheses are the source.</p>
|
|
|
|
<h3>Analysis</h3>
|
|
|
|
<p>For reference, combining everything listed above, we get:</p>
|
|
|
|
<blockquote><b>
|
|
arping blkid e2fsck dd fsck.f2fs fsck_msdos getevent gzip ip iptables
|
|
ip6tables iw logwrapper make_ext4fs make_f2fs newfs_msdos ping ping6
|
|
reboot resize2fs sh ss tc tracepath tracepath6 traceroute traceroute6
|
|
</b></blockquote>
|
|
|
|
<p>We may eventually implement all of that, but for toybox 1.0 we need to
|
|
focus a bit. For our first pass, let's just replace all the "toolbox"
|
|
commands.</p>
|
|
|
|
<p>This means toybox should implement (or finish implementing):</p>
|
|
<blockquote><b>
|
|
<span id=toolbox>
|
|
dd getevent grep gzip newfs_msdos
|
|
</span>
|
|
</b></blockquote>
|
|
|
|
<p>Update: Android.mk is currently building the following toybox files out
|
|
of "pending". These should be a priority for cleanup (ones marked with *
|
|
don't have a symlink, so they're a lot less visible):</p>
|
|
|
|
<blockquote><b>
|
|
chrt dd expr getfattr* lsof modprobe more setfattr* tar tr traceroute
|
|
</b></blockquote>
|
|
|
|
<p>Android wishlist:</p>
|
|
|
|
<blockquote><b>
|
|
mtools genvfatfs mke2fs gene2fs
|
|
</b></blockquote>
|
|
|
|
<hr />
|
|
<h2><a name=aosp /><a href="#aosp">Use case: Building AOSP</a></h2>
|
|
|
|
<p>The list of external tools used to build AOSP is
|
|
<a href="https://android.googlesource.com/platform/build/soong/+/master/ui/build/paths/config.go">here</a>.</p>
|
|
|
|
<blockquote><b>
|
|
awk basename bash bc bzip2 cat chmod cmp comm cp cut date dd diff dirname du
|
|
echo egrep env expr find fuser getconf getopt git grep gzip head hexdump
|
|
hostname id jar java javap ln ls lsof m4 make md5sum mkdir mktemp mv od openssl
|
|
paste patch pgrep pkill ps pstree pwd python python2.7 python3 readlink
|
|
realpath rm rmdir rsync sed setsid sh sha1sum sha256sum sha512sum
|
|
sleep sort stat tar tail tee todos touch tr true uname uniq unix2dos unzip
|
|
wc which whoami xargs xxd xz zip zipinfo
|
|
</b></blockquote>
|
|
|
|
<p>The following are already in the tree and will be used directly:</p>
|
|
|
|
<blockquote><b>
|
|
awk bzip2 jar java javap m4 make python python2.7 python3 xz
|
|
</b></blockquote>
|
|
|
|
<p>Subtracting what's already in toybox (including the following toybox toys
|
|
that are still in pending: <code>bc dd diff expr gzip lsof tar tr</code>),
|
|
that leaves:</p>
|
|
|
|
<blockquote><b>
|
|
bash fuser getopt git hexdump openssl pstree rsync sh todos unzip zip zipinfo
|
|
</b></blockquote>
|
|
|
|
<p>For AOSP, zip/zipinfo/unzip are likely to be libziparchive based. The
|
|
todos callers will use unix2dos instead if it's available. git/openssl
|
|
seem like they should just be brought in to the tree. rsync is used to
|
|
work around a Mac <code>cp -Rf</code> bug with broken symbolic links. That
|
|
leaves:</p>
|
|
|
|
<blockquote><b>
|
|
bash fuser getopt hexdump pstree
|
|
</b></blockquote>
|
|
|
|
<p>(Why are fuser and pstree used during the AOSP build? They're used for
|
|
diagnostics if something goes wrong. So it's really just bash, getopt,
|
|
and hexdump that are actually used to build.)</p>
|
|
|
|
<hr />
|
|
<h2><a name=tizen /><a href="#tizen">Use case: Tizen Core</a></h2>
|
|
|
|
<p>The Tizen project has expressed a desire to eliminate GPLv3 software
|
|
from its core system, and is installing toybox as
|
|
<a href=https://wiki.tizen.org/wiki/Toybox>part of this process</a>.</p>
|
|
|
|
<p>They have a fairly long list of new commands they'd like to see in toybox:</p>
|
|
|
|
<blockquote><b>
|
|
<span id=tizen>
|
|
arch base64 users dir vdir unexpand shred join csplit
|
|
hostid nproc runcon sha224sum sha256sum sha384sum sha512sum sha3sum mkfs.vfat fsck.vfat
|
|
dosfslabel uname stdbuf pinky diff3 sdiff zcmp zdiff zegrep zfgrep zless zmore
|
|
</span>
|
|
</b></blockquote>
|
|
|
|
<p>In addition, they'd like to use several commands currently in pending:</p>
|
|
|
|
<blockquote><b>
|
|
<span id=tizen>
|
|
tar diff printf wget rsync fdisk vi less tr test stty fold expr dd
|
|
</span>
|
|
</b></blockquote>
|
|
|
|
<p>Also, tizen uses a different Linux Security Module called SMACK, so
|
|
many of the SELinux options ala ls -Z need smack alternatives in an
|
|
if/else setup.</p>
|
|
|
|
<hr /><a name=buildroot />
|
|
<h2>buildroot:</h2>
|
|
|
|
<p>The <a href=https://buildroot.org/downloads/manual/manual.html#requirement-mandatory>mandatory packages</a>
|
|
section of the buildroot manual lists:</p>
|
|
|
|
<blockquote><p>
|
|
which sed make bash patch gzip bzip2 tar cpio unzip rsync file bc wget
|
|
</p></blockquote>
|
|
|
|
<p>(It also lists binutils gcc g++ perl python, and for debian it wants
|
|
build-essential. And it wants file to be in /usr/bin because
|
|
<a href=https://git.busybox.net/buildroot/tree/support/dependencies/dependencies.sh?h=2018.02.x#n84>libtool
|
|
breaks otherwise</a>.)</p>
|
|
|
|
<p>Buildroot does not support a cross toolchain that lives in "/usr/bin"
|
|
with a prefix of "" (if you try, and chop out the test for a blank prefix,
|
|
it dies trying to run "/usr/bin/-gcc"). But you can patch your way to
|
|
making it work if you try.</p>
|
|
|
|
<hr /><a name=klibc />
|
|
<h2>klibc:</h2>
|
|
|
|
<p>Long ago some kernel developers came up with a project called
|
|
<a href=http://en.wikipedia.org/wiki/Klibc>klibc</a>.
|
|
After a decade of development it still has no web page or HOWTO,
|
|
and nobody's quite sure if the license is BSD or GPL. It inexplicably
|
|
<a href=http://www.infoworld.com/d/data-center/perl-isnt-going-anywhere-better-or-worse-211580>requires perl to build</a>, and seems like an ideal candidate for
|
|
replacement.</p>
|
|
|
|
<p>In addition to a C library even less capable than bionic (obsoleted by
|
|
musl), klibc builds a random assortment of executables to run init scripts
|
|
with. There's no multiplexer command, these are individual executables:</p>
|
|
|
|
<blockquote><p><b>
|
|
cat chroot cpio dd dmesg false fixdep fstype gunzip gzip halt ipconfig kill
|
|
kinit ln losetup ls minips mkdir mkfifo mknodes
|
|
mksyntax mount mv nfsmount nuke pivot_root poweroff readlink reboot resume
|
|
run-init sh sha1hash sleep sync true umount uname zcat
|
|
</b></p></blockquote>
|
|
|
|
<p>To get that list, build klibc according to the instructions (I
|
|
<a href=http://landley.net/notes-2013.html#23-01-2013>looked at</a> version
|
|
2.0.2 and did cd klibc-*; ln -s /output/of/kernel/make/headers_install
|
|
linux; make) then <b>echo $(for i in $(find . -type f); do file $i | grep -q
|
|
executable && basename $i; done | grep -v '[.]g$' | sort -u)</b> to find
|
|
executables, then eliminate the *.so files and *.shared duplicates.</p>
|
|
|
|
<p>Some of those binaries are build-time tools that don't get installed,
|
|
which removes mknodes, mksyntax, sha1hash, and fixdep from the list.
|
|
(And sha1hash is just an unpolished sha1sum anyway.)</p>
|
|
|
|
<p>The run-init command is more commonly called switch_root, nuke is just
|
|
"rm -rf -- $@", and minips is more commonly called "ps". I'm not doing aliases
|
|
for the oddball names.</p>
|
|
|
|
<p>Yet more stale forks of dash and gzip sucked in here (see "dubious
|
|
license terms" above), adding nothing to the other projects we've looked at.
|
|
But we still need sh, gunzip, gzip, and zcat to replace this package.</p>
|
|
|
|
<p>At the time I did the initial analysis toybox already had cat, chroot, dmesg, false,
|
|
kill, ln, losetup, ls, mkdir, mkfifo, readlink, rm, switch_root, sleep, sync,
|
|
true, and uname.</p>
|
|
|
|
<p>The low hanging fruit is cpio, dd, ps, mv, and pivot_root.</p>
|
|
|
|
<p>The "kinit" command is another gratuitous rename, it's init running as PID 1.
|
|
The halt, poweroff, and reboot commands work with it.</p>
|
|
|
|
<p>I've got mount and umount queued up already, fstype and nfsmount go with
|
|
those. (And probably smbmount and p9mount, but this hasn't got one. Those
|
|
are all about querying for login credentials, probably workable into the
|
|
base mount command.)</p>
|
|
|
|
<p>The ipconfig command here has a built in dhcp client, so it's ifconfig
|
|
and dhcpcd and maybe some other stuff.</p>
|
|
|
|
<p>The resume command is... weird. It finds a swap partition and reads data
|
|
from it into a /proc file, something the kernel is capable of doing itself.
|
|
(Even though the klibc author
|
|
<a href=http://www.zytor.com/pipermail/klibc/2006-June/001748.html>attempted
|
|
to remove</a> that capability from the kernel, current kernel/power/hibernate.c
|
|
still parses "resume=" on the command line). And yet various distros seem to
|
|
make use of klibc for this.
|
|
Given the history of swsusp/hibernate (and
|
|
<a href=http://lwn.net/Articles/333007>TuxOnIce</a>
|
|
and <a href=http://lwn.net/Articles/242107>kexec jump</a>) I've lost track
|
|
of the current state of the art here. Ah, Documentation/power/userland-swsusp.txt
|
|
has the API docs, and <a href=http://suspend.sf.net>here's a better
|
|
tool</a>...</p>
|
|
|
|
<p>So the list of things actually in klibc are:</p>
|
|
|
|
<blockquote><b>
|
|
<span id=klibc_cmd>
|
|
cat chroot dmesg false kill ln losetup ls mkdir mkfifo readlink rm switch_root
|
|
sleep sync true uname
|
|
|
|
cpio dd ps mv pivot_root
|
|
mount nfsmount fstype umount
|
|
sh gunzip gzip zcat
|
|
kinit halt poweroff reboot
|
|
ipconfig
|
|
resume
|
|
</span>
|
|
</b></blockquote>
|
|
|
|
<hr />
|
|
<a name=glibc />
|
|
<h2>glibc</h2>
|
|
|
|
<p>Rather a lot of command line utilities come bundled with glibc:</p>
|
|
|
|
<blockquote><b>
|
|
catchsegv getconf getent iconv iconvconfig ldconfig ldd locale localedef
|
|
mtrace nscd rpcent rpcinfo tzselect zdump zic
|
|
</b></blockquote>
|
|
|
|
<p>Of those, musl libc only implements ldd.</p>
|
|
|
|
<p>catchsegv is a rudimentary debugger, probably out of scope for toybox.</p>
|
|
|
|
<p>iconv has been <a href="#susv4">previously discussed</a>.</p>
|
|
|
|
<p>iconvconfig is only relevant if iconv is user-configurable; musl uses a
|
|
non-configurable iconv.</p>
|
|
|
|
<p>getconf is a posix utility which displays several variables from
|
|
unistd.h; it probably belongs in the development toolchain.</p>
|
|
|
|
<p>getent handles retrieving entries from passwd-style databases
|
|
(in a rather lame way) and is trivially replacable by grep.</p>
|
|
|
|
<p>locale was discussed under <a href=#susv4>posix</a>.
|
|
localedef compiles locale definitions, which musl currently does not use.</p>
|
|
|
|
<p>mtrace is a perl script to use the malloc debugging that glibc has built-in;
|
|
this is not relevant for musl, and would necessarily vary with libc. </p>
|
|
|
|
<p>nscd is a name service caching daemon, which is not yet relevant for musl.
|
|
rpcinfo and rpcent are related to rpc, which musl does not include.</p>
|
|
|
|
<p>The remaining commands involve glibc's bundled timezone database,
|
|
which seems to be derived from the <a href=http://www.iana.org/time-zones>IANA
|
|
timezone database</a>. Unless we want to maintain our own fork of the
|
|
standards body's database like glibc does, these are of no interest,
|
|
but for completeness:</p>
|
|
|
|
<p>tzselect outputs a TZ variable correponding to user input.
|
|
The documentation does not indicate how to use it in a script, but it seems
|
|
that Debian may have done so.
|
|
zdump prints current time in each of several timezones, optionally
|
|
outputting a great deal of extra information about each timezone.
|
|
zic converts a description of a timezone to a file in tz format.</p>
|
|
|
|
<p>None of glibc's bundled commands are currently of interest to toybox.</p>
|
|
|
|
</b></blockquote>
|
|
|
|
<hr />
|
|
<a name=sash />
|
|
<h2>Stand-Alone Shell</h2>
|
|
|
|
<p>Wikipedia has <a href=http://en.wikipedia.org/wiki/Stand-alone_shell>a good
|
|
summary of sash</a>, with links. The original Stand-Alone Shell project reached
|
|
a stopping point, and then <a href=http://www.baiti.net/sash>"sash plus
|
|
patches"</a> extended it a bit further. The result is a megabyte executable
|
|
that provides 40 commands.</p>
|
|
|
|
<p>Sash is a shell with built-in commands. It doesn't have a multiplexer
|
|
command, meaning "sash ls -l" doesn't work (you have to go "sash -c 'ls -l'").
|
|
</p>
|
|
|
|
<p>The list of commands can be obtained via building it and doing
|
|
"echo help | ./sash | awk '{print $1}' | sed 's/^-//' | xargs echo", which
|
|
gives us:</p>
|
|
|
|
<blockquote><b>
|
|
alias aliasall ar cd chattr chgrp chmod chown cmp cp chroot dd echo ed exec
|
|
exit file find grep gunzip gzip help kill losetup losetup ln ls lsattr mkdir
|
|
mknod more mount mv pivot_root printenv prompt pwd quit rm rmdir setenv source
|
|
sum sync tar touch umask umount unalias where
|
|
</b></blockquote>
|
|
|
|
<p>Plus sh because it's a shell. A dozen or so commands can only sanely be
|
|
implemented as shell builtins (alias aliasall cd exec exit prompt quit setenv
|
|
source umask unalias), where is an alias for which, and at triage time toybox
|
|
already has chgrp, chmod, chown, cmp, cp, chroot, echo, help, kill, losetup,
|
|
ln, ls, mkdir, mknod, printenv, pwd, rm, rmdir, sync, and touch.</p>
|
|
|
|
<p>This leaves:</p>
|
|
|
|
<blockquote><b>
|
|
<span id=sash_cmd>
|
|
ar chattr dd ed file find grep gunzip gzip lsattr more mount mv pivot_root
|
|
sh sum tar umount
|
|
</span>
|
|
</b></blockquote>
|
|
|
|
<p>(For once, this project doesn't include a fork of gzip, instead
|
|
it sucks in -lz from the host.)</p>
|
|
|
|
<hr />
|
|
<a name=sbase />
|
|
<h2>sbase:</h2>
|
|
|
|
<p>It's <a href=http://git.suckless.org/sbase>on suckless</a> in
|
|
<a href=http://git.suckless.org/ubase>two parts</a>. As of November 2015 it's
|
|
implemented the following (renaming "cron" to "crond" for
|
|
consistency, and yanking "sponge", "mesg", "pagesize", "respawn", and
|
|
"vtallow"):</p>
|
|
|
|
<blockquote><p>
|
|
<span id=sbase_cmd>
|
|
basename cal cat chgrp chmod chown chroot cksum cmp cols comm cp crond cut date
|
|
dirname du echo env expand expr false find flock fold getconf grep head
|
|
hostname join kill link ln logger logname ls md5sum mkdir mkfifo mktemp mv
|
|
nice nl nohup od paste printenv printf pwd readlink renice rm rmdir sed seq
|
|
setsid sha1sum sha256sum sha512sum sleep sort split strings sync tail
|
|
tar tee test tftp time touch tr true tty uname unexpand uniq unlink uudecode
|
|
uuencode wc which xargs yes
|
|
</span>
|
|
</p></blockquote>
|
|
|
|
<p>and<p>
|
|
|
|
<blockquote><p>
|
|
<span id=sbase_cmd>
|
|
chvt clear dd df dmesg eject fallocate free id login mknod mountpoint
|
|
passwd pidof ps stat su truncate unshare uptime watch
|
|
who
|
|
</span>
|
|
</p></blockquote>
|
|
|
|
<hr />
|
|
<a name=nash />
|
|
<h2>nash:</h2>
|
|
|
|
<p>Red Hat's nash was part of its "mkinitrd" package, replacement for a shell
|
|
and utilities on the boot floppy back in the 1990's (the same general idea
|
|
as BusyBox, developed independently). Red Hat discontinued nash development
|
|
in 2010, replacing it with dracut (which collects together existing packages,
|
|
including busybox).</p>
|
|
|
|
<p>I couldn't figure out how to beat source code out of
|
|
<a href=http://pkgs.fedoraproject.org/git/mkinitrd>Fedora's current git</a>
|
|
repository. The last release version that used it was Fedora Core 12
|
|
which has <a href=http://archive.fedoraproject.org/pub/archive/fedora/linux/releases/12/Fedora/source/SRPMS/mkinitrd-6.0.93-1.fc12.src.rpm>a source rpm</a>
|
|
that can be unwound with "rpm2cpio mkinitrd.src.rpm | cpio -i -d -H newc
|
|
--no-absolute-filenames" and in there is a mkinitrd-6.0.93.tar.bz2 which
|
|
has the source.</p>
|
|
|
|
<p>In addition to being a bit like a command shell, the nash man page lists the
|
|
following commands:</p>
|
|
|
|
<blockquote><p>
|
|
access echo find losetup mkdevices mkdir mknod mkdmnod mkrootdev mount
|
|
pivot_root readlink raidautorun setquiet showlabels sleep switchroot umount
|
|
</p></blockquote>
|
|
|
|
<p>Oddly, the only occurrence of the string pivot_root in the nash source code
|
|
is in the man page, the command isn't there. (It seems to have been removed
|
|
when the underscoreless switchroot went in.)</p>
|
|
|
|
<p>A more complete list seems to be the handlers[] array in nash.c:</p>
|
|
|
|
<blockquote><p>
|
|
access buildEnv cat cond cp daemonize dm echo exec exit find kernelopt
|
|
loadDrivers loadpolicy mkchardevs mkblktab mkblkdevs mkdir mkdmnod mknod
|
|
mkrootdev mount netname network null plymouth hotplug killplug losetup
|
|
ln ls raidautorun readlink resume resolveDevice rmparts setDeviceEnv
|
|
setquiet setuproot showelfinterp showlabels sleep stabilized status switchroot
|
|
umount waitdev
|
|
</p></blockquote>
|
|
|
|
<p>This list is nuts: "plymouth" is an alias for "null" which is basically
|
|
"true" (which thie above list doesn't have). Things like buildEnv and
|
|
loadDrivers are bespoke Red Hat behavior that might as well be hardwired in
|
|
to nash's main() without being called.</p>
|
|
|
|
<p>Instead of eliminating items
|
|
from the list with an explanation for each, I'm just going to cherry pick
|
|
a few: the device mapper (dm, raidautorun) is probably interesting,
|
|
hotplug (may be obsolete due to kernel changes that now load firmware
|
|
directly), and another "resume" ala klibc.</p>
|
|
|
|
<p>But mostly: I don't care about this one. And neither does Red Hat anymore.</p>
|
|
|
|
<p>Verdict: ignore</p>
|
|
|
|
<hr />
|
|
<a name=beastiebox />
|
|
<h2>Beastiebox</h2>
|
|
|
|
<p>Back in 2008, the BSD guys vented some busybox-envy
|
|
<a href=http://beastiebox.sourceforge.net>on sourceforge</a>. Then stopped.
|
|
Their repository is still in CVS, hasn't been touched in years, it's a giant
|
|
hairball of existing code sucked together. (The web page says the author
|
|
is aware of crunchgen, but decided to do this by hand anyway. This is not
|
|
a collection of new code, it's a katamari of existing code rolled up in a
|
|
ball.)</p>
|
|
|
|
<p>Combining the set of commands listed on the web page with the set of
|
|
man pages in the source gives us:</P>
|
|
|
|
<blockquote><p>
|
|
[ cat chmod cp csh date df disklabel dmesg echo ex fdisk fsck fsck_ffs getty
|
|
halt hostname ifconfig init kill less lesskey ln login ls lv mksh more mount
|
|
mount_ffs mv pfctl ping poweroff ps reboot rm route sed sh stty sysctl tar test
|
|
traceroute umount vi wiconfig
|
|
</p></blockquote>
|
|
|
|
<p>Apparently lv is the missing link between ed and vi, copyright 1982-1997 (do
|
|
not want), ex is another obsolete vi mode, lesskey is "used to
|
|
specify a set of key bindings to be used with less", and csh is a shell they
|
|
sucked in (even though they have mksh?), [ is an alias for test. Several more bsd-isms that don't have Linux
|
|
equivalents (even in the ubuntu "install this package" search) are
|
|
disklabel, fsck_ffs, mount_ffs, and pfctl. And wiconfig is a
|
|
wavelan interface network card driver utility. Subtracting all that and the
|
|
commands toybox already implements at triage time, we get:</p>
|
|
|
|
<blockquote><p>
|
|
<span id=beastiebox_cmd>
|
|
fdisk fsck getty halt ifconfig init kill less more mount mv ping poweroff
|
|
ps reboot route sed sh stty sysctl tar test traceroute umount vi
|
|
</span>
|
|
</p></blockquote>
|
|
|
|
<p>Not a hugely interesting list, but eh.</p>
|
|
|
|
<p>Verdict: ignore</p>
|
|
|
|
<hr />
|
|
<a name=BsdBox />
|
|
<h2>BsdBox</h2>
|
|
|
|
<p>Somebody decided to do a <a href=https://wiki.freebsd.org/AdrianChadd/BsdBox>multicall binary for freebsd</a>.</p>
|
|
|
|
<p>They based it on crunchgen, a tool that glues existing programs together
|
|
into an archive and uses the name to execute the right one. It has no
|
|
simplification or code sharing benefits whatsoever, it's basically an
|
|
archiver that produces executables.</p>
|
|
|
|
<p>That's about where I stopped reading.</p>
|
|
|
|
<p>Verdict: ignore.</p>
|
|
|
|
<hr />
|
|
<a name=slowaris />
|
|
<h2>OpenSolaris Busybox</h2>
|
|
|
|
<p>Somebody <a href=http://hub.opensolaris.org/bin/view/Project+busybox/>wrote
|
|
a wiki page</a> saying that Busybox for OpenSolaris would be a good idea.</p>
|
|
|
|
<p>The corresponding "files" tab is an auto-generated stub. The project never
|
|
even got as far as suggesting commands to include before Oracle discontinued
|
|
OpenSolaris.</p>
|
|
|
|
<p>Verdict: ignore.</p>
|
|
|
|
<hr />
|
|
<a name=uclinux />
|
|
<h2>uClinux</h2>
|
|
|
|
<p>Long ago a hardware developer named Jeff Dionne put together a
|
|
nommu Linux distribution, which involved rewriting a lot of command line
|
|
utilities that relied on <a href=http://nommu.org/memory-faq.txt>features
|
|
unavailable on nommu</a> hardware.</p>
|
|
|
|
<p>In 2003 Jeff moved to Japan and handed
|
|
the project off to people who allowed it to roll to a stop. The website
|
|
turned into a mess of 404 links, the navigation indexes stopped being
|
|
updated over a decade ago, and the project's CVS repository suffered a
|
|
hard drive failure for which there were no backups. The project continued
|
|
to put out "releases" through 2014 (you have to scroll down in the "news"
|
|
section to find them, the "HTTP download" section in the nav bar on the
|
|
left hasn't been updated in over a decade), which were hand-updated tarball
|
|
snapshots mostly consisting of software from the 1990's. For example the
|
|
2014 release still contained ipfwadm, the package which predated ipchains,
|
|
which predated iptables, which is in the process of being replaced by
|
|
nftables.</p>
|
|
|
|
<p>Nevertheless, people still try to use this because (at least until the
|
|
launch of <a href=http://nommu.org>nommu.org</a>) the project was viewed
|
|
as the place to discuss, develop, and learn about nommu Linux.
|
|
The role of uclinux.org as an educational resource kept people coming
|
|
to it long after it had collapsed as a Linux distro.</p>
|
|
|
|
<p>Starting around 0.6.0 toybox began to address nommu support with the goal
|
|
of putting uClinux out of its misery.</p>
|
|
|
|
<p>An analysis of <a href=http://www.uclinux.org/pub/uClinux/dist/uClinux-dist-20140504.tar.bz2>uClinux-dist-20140504</a> found 312 package
|
|
subdirectories under "user".</p>
|
|
|
|
<h3>Taking out the trash</h3>
|
|
|
|
<p>A bunch of packages (<b>inotify-tools, input-event-demon, ipsec-tools, netifd,
|
|
keepalived, mobile-broadband-provider-info, nuttp, readline, snort,
|
|
snort-barnyard, socat, sqlite, sysklogd, sysstat, tcl, ubus, uci, udev,
|
|
unionfs, uqmi, usb_modeswitch, usbutils, util-linux</b>)
|
|
are hard to evaluate because
|
|
uclinux has directories for them, but their source isn't actually in the
|
|
uclinux tree. In some of these the makefiles download a git repo during
|
|
the build, so I'm assuming you can build the external package if you really
|
|
care. (Even when I know what these packages do, I'm skipping them
|
|
because uclinux doesn't actually contain them, and any given snapshot
|
|
of the build system will bitrot as external web links change over time.)</p>
|
|
|
|
<p>Other packages are orphaned, meaning they're not mentioned from any Kconfig
|
|
or Makefiles outside of their directory, so uclinux can't actually build
|
|
them: <b>mbus</b> is an orphaned i2c test program expecting to run in some sort
|
|
of hardwired hardware context, <b>mkeccbin</b> is an orphaned "ECC annotated
|
|
binary file" generator (meaning it's half of a flash writer),
|
|
<b>wsc_upnp</b> is a "Ralink WPS" driver (some sort of stale wifi chip)...</p>
|
|
|
|
<p>The majority of the remaining packages are probably not of interest to
|
|
toybox due to being so obsolete or special purpose they may not actually be
|
|
of interest to anybody anymore. (This list also includes a lot of
|
|
special-purpose network back-end stuff that's hard for anybody but
|
|
datacenter admins to evaluate the current relevance of.)</p>
|
|
|
|
<blockquote><b><p>
|
|
arj asterisk boottools bpalogin br2684ctl camserv can4linux cgi_generic
|
|
cgihtml clamav clamsmtp conntrack-tools cramfs crypto-tools cxxtest
|
|
ddns3-client de2ts-cal debug demo diald discard dnsmasq dnsmasq2
|
|
ethattach expat-examples ez-ipupdate fakeidentd
|
|
fconfig ferret flatfs flthdr freeradius freeswan frob-led frox fswcert
|
|
game gettyd gnugk haserl horch
|
|
hostap hping httptunnel ifattach ipchains
|
|
ipfwadm ipmasqadm ipportfw ipredir ipset iso_client
|
|
jamvm jffs-tools jpegview jquery-ui kendin-config kismet klaxon kmod
|
|
l2tpd lcd ledcmd ledcon lha lilo lirc lissa load loattach
|
|
lpr lrpstat lrzsz mail mbus mgetty microwin ModemManager msntp musicbox
|
|
nooom null openswan openvpn palmbot pam_* pcmcia-cs playrt plugdaemon pop3proxy
|
|
potrace qspitest quagga radauth
|
|
ramimage readprofile rdate readprofile routed rrdtool rtc-ds1302
|
|
sendip ser sethdlc setmac setserial sgutool sigs siproxd slattach
|
|
smtpclient snmpd net-snmp snortrules speedtouch squashfs scep sslwrap stp
|
|
stunnel tcpblast tcpdump tcpwrappers threaddemos tinylogin tinyproxy
|
|
tpt tripwire unrar unzoo version vpnled w3cam xl2tpd zebra
|
|
</p></b></blockquote>
|
|
|
|
<p>This stuff is all over the place: arj, lha, rar, and zoo are DOS archivers,
|
|
ethattach describes itself as just "a network tool",
|
|
mail is a textmode smtp mailer literally described as "Some kind of mail
|
|
proggy" in uclinux's kconfig (as opposed to clamsmtp and smtpclient and
|
|
so on), this gettyd isn't a generic version but specifically a
|
|
hardwired ppp dialin utility, mgetty isn't a generic version but is combined
|
|
with "sendfax", hostap is an intersil prism driver, wlan-ng is also an
|
|
intersil prism dirver, null is a program to intentionally dereference a
|
|
null pointer (in case you needed one), iso_client is a
|
|
"Demo Application for the USB Device Driver", kendin-config is
|
|
"for configuring the Micrel Kendin KS8995M over QSPI", speedtouch configures
|
|
a specific brand of asdl modem, portmap is part of Anfs,
|
|
ferret, linux-igd, and miniupnp are all upnp packages,
|
|
lanbypass "can be used to control the LAN
|
|
bypass switches on the Advantech x86 based hardware platforms", lcd is
|
|
"test of lcddma device driver" (an out-of-tree Coldfire driver apparently
|
|
lost to history, the uclinux linux-2.4.x directory has a config symbol for
|
|
it, but nothing in the code actually _uses_ it...), qspitest is another
|
|
coldfire thing, mii-tool-fec is
|
|
"strictly for the FEC Ethernet driver as implemented (and modified) for
|
|
the uCdimm5272", rtc-ds1302 and rtc-m41t11 are usermode drivers for specific
|
|
clock chips, stunnel is basically "openssl s_client -quiet -connect",
|
|
potrace is a bitmap to vector graphic converter, radauth performs command line
|
|
authentication against a radius server,
|
|
clamav, klaxon, ferret, l7-protocols, and nessus are very old network security
|
|
software (it's got a stale snapshot of nmap too), xl2tpd is a PPP over UDP
|
|
tunnel (rfc 2661), zebra is the package quagga replaced,
|
|
lilo is the x86-only bootloader that predated grub (and recently discontinued
|
|
development), lissa is a "framebuffer graphics demo" from
|
|
1998, the squashfs package here is the out of tree patches for 2.4 kernels
|
|
and such before the filesystem was merged upstream (as opposed to the
|
|
squashfs-new package which is a snapshot of the userspace tool from 2011),
|
|
load is basically "dd file /dev/spi", version is basically "cat /proc/version",
|
|
microwin is a port of the WinCE graphics API to Linux, scep is a 2003
|
|
implementation of an IETF draft abandoned in 2010, tpt depends on
|
|
Andrew Morton's 15 year old unmerged "timepegs" kernel patch using the pentium
|
|
cycle counter, vpnled controls a light that reboots systems (what?),
|
|
w3cam is a video4linux 1.0 client (v4l2 showed up during 2.5 and support for
|
|
the old v4l1 was removed in 2.6.38 back in 2011), busybox ate tinylogin
|
|
over a decade ago, lrpstat is a java network monitor
|
|
from 2001, lrzsz is zmodem/ymodem/zmodem, msntp and stp implement rfc2030
|
|
meaning it overflows in 2036 (the package was last updated in 2000), rdate
|
|
is rfc 868 meaning it also overflows in 2036 (which is why ntp was invented
|
|
a few decades back), reiserfsprogs development stopped abruptly after
|
|
Hans Reiser was convicted of murdering his wife Nina (denying it on the
|
|
stand and then leading them to the body as part of his plea bargain during
|
|
sentencing)...
|
|
</p>
|
|
|
|
<p>Seriously, there's a lot of crap in there. It's hard to analyze most
|
|
of it far enough to prove it _doesn't_ do anything.</p>
|
|
|
|
<h3>Non-toybox programs</h3>
|
|
|
|
<p>The following software may actually still do something intelligible
|
|
(although the package versions tend to be years out of date), but
|
|
it's not a direction toybox has chosen to go in.</p>
|
|
|
|
<p>There are several programming languages (<b>bash, lua, jamvm, tinytcl,
|
|
perl, python</b>) in there. Maybe someone somewhere wants a 2008 release of a
|
|
java virtual machine tested to work on nommu systems (jamvm), but it's out
|
|
of scope for toybox.</p>
|
|
|
|
<p>A bunch of benchmark programs: <b>cpu, dhrystone, mathtest, nbench, netperf,
|
|
netpipe, and whetstone</b>.</p>
|
|
|
|
<p>A bunch of web servers: <b>appWeb, boa, fnord (via tcpserver), goahead, httpd,
|
|
mini_httpd, and thttpd</b>.</p>
|
|
|
|
<p>A bunch of shells: <b>msh</b> is a clever (I.E. obfuscated) little shell,
|
|
<b>nwsh</b> is "new shell" (that's what it called itself in 1999 anyway),
|
|
<b>sash</b> is another shell with a bunch of builtins (ls, ps, df, cp, date, reboot,
|
|
and shutdown, this roadmap analyzes it <a href="#sash">elsewhere</a>),
|
|
<b>sh</b> is a very old minix shell fork, and <b>tcsh</b> is also a shell.</p>
|
|
|
|
<p>Also in this category, we have:</p>
|
|
|
|
<blockquote><b><p>
|
|
dropbear jffs-tools jpegview kexec-tools bind ctorrent
|
|
iperf iproute2 ip-sentinel iptables kexec
|
|
nmap oggplay openssl oprofile p7zip pppd pptp play vplay
|
|
hdparm mp3play at clock
|
|
mtd-utils mysql logrotate brcfg bridge-utils flashw
|
|
ebtables etherwake ethtool expect gdb gdbserver hostapd
|
|
lm_sensors load netflash netstat-nat
|
|
radvd recover rootloader resolveip rp-pppoe
|
|
rsyslog rsyslogd samba smbmount squashfs-new squid ssh strace tip
|
|
uboot-envtools ulogd usbhubctrl vconfig vixie-cron watchdogd
|
|
wireless_tools wpa_supplicant
|
|
</p></b></blockquote>
|
|
|
|
<p>An awful lot of those are borderline: play and vplay are wav file
|
|
audio players, there's oprofile _and_ readprofile (which just reads kernel
|
|
profiling data from /proc/profile),
|
|
radvd is a "routr advertisement daemon" (ipv6 stateless autoconf),
|
|
ctorrent is a bittorent client,
|
|
lm_sensors is hardware (heat?) monitoring,
|
|
resolveip is dig only less so,
|
|
rp-pppoe is ppp over ethernet,
|
|
ebtables is an ethernet version of iptables (for bridging),
|
|
their dropbear is from 2012, and that ssh version is from 2011
|
|
(which means it's about nine months too _old_ to have the heartbleed bug).
|
|
There's both ulogd and ulogd2 (no idea why), and pppd is version 2.4 but
|
|
there's a ppd-2.3 directory also.</p>
|
|
|
|
<p>Lots of flash stuff:
|
|
flashw is a flash writer, load is an spi flash loader, netflash writes
|
|
to flash via tftp,
|
|
recover is also a reflash daemon intended to come up when the system can't boot,
|
|
rootloader seems to be another reflash daemon but without dhcp.</p>
|
|
|
|
<h3>Already in roadmap</h3>
|
|
|
|
<p>The following packages contain commands already in the toybox roadmap:</p>
|
|
|
|
<blockquote><b><p>
|
|
agetty cal cksum cron dhcpcd dhcpcd-new dhcpd dhcp-isc dosfstools e2fsprogs
|
|
elvis-tiny levee fdisk fileutils ftp ftpd grep hd hwclock inetd init ntp
|
|
iputils login module-init-tools netcat shutils ntpdate lspci ping procps
|
|
proftpd rsync shadow shutils stty sysutils telnet telnetd tftp tftpd traceroute
|
|
unzip wget mawk net-tools
|
|
</p></b></blockquote>
|
|
|
|
<p>There are some duplicates in there, levee is a tiny vi implementation
|
|
like elvis-tiny, ntp and ntpdate overlap, etc.</p>
|
|
|
|
<p>Verdict: We don't really need to do a whole lot special for nommu
|
|
systems, just get the existing toybox roadmap working on nommu and
|
|
we're good. The uClinux project can rest in peace.</p>
|
|
|
|
<hr />
|
|
<h2>Requests:</h2>
|
|
|
|
<p>The following additional commands have been requested (and often submitted)
|
|
by various users. I _really_ need to clean up this section.</p>
|
|
|
|
<p>Also:</p>
|
|
<blockquote><b>
|
|
<span id=request>
|
|
dig freeramdisk getty halt hexdump hwclock klogd modprobe ping ping6 pivot_root
|
|
poweroff readahead rev sfdisk sudo syslogd taskset telnet telnetd tracepath
|
|
traceroute unzip usleep vconfig zip free login modinfo unshare netcat help w
|
|
ntpd iwconfig iwlist rdate
|
|
dos2unix unix2dos catv clear
|
|
pmap realpath setsid timeout truncate
|
|
mkswap swapon swapoff
|
|
count oneit fstype
|
|
acpi blkid eject pwdx
|
|
sulogin rfkill bootchartd
|
|
arp makedevs sysctl killall5 crond crontab deluser last mkpasswd watch
|
|
blockdev rpm2cpio arping brctl dumpleases fsck
|
|
tcpsvd tftpd
|
|
factor fallocate fsfreeze inotifyd lspci nbd-client partprobe strings
|
|
base64 mix
|
|
reset hexedit nsenter shred
|
|
fsync insmod ionice lsmod lsusb rmmod vmstat xxd top iotop
|
|
lsof ionice compress dhcp dhcpd addgroup delgroup host iconv ip
|
|
ipcrm ipcs netstat openvt
|
|
deallocvt iorenice
|
|
udpsvd adduser
|
|
microcom tunctl chrt getfattr setfattr
|
|
kexec
|
|
</span>
|
|
</b></blockquote>
|
|
|
|
<!-- #include "footer.html" -->
|
|
|