aboutsummaryrefslogtreecommitdiff
path: root/www/roadmap.html
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2015-10-02 07:50:57 -0500
committerRob Landley <rob@landley.net>2015-10-02 07:50:57 -0500
commit469d7f11b66dfbaf7483a9a855e595d59f71fdad (patch)
treead1fcf4f73e33fe840d2a47fa8ac7dd8072cd008 /www/roadmap.html
parent8941e5fef58025591b7441372d486cf5de46dd39 (diff)
downloadtoybox-469d7f11b66dfbaf7483a9a855e595d59f71fdad.tar.gz
Add uClinux analysis to roadmap, and a few other pending changes.
Diffstat (limited to 'www/roadmap.html')
-rwxr-xr-xwww/roadmap.html231
1 files changed, 223 insertions, 8 deletions
diff --git a/www/roadmap.html b/www/roadmap.html
index afb49ba1..0ac70b76 100755
--- a/www/roadmap.html
+++ b/www/roadmap.html
@@ -35,7 +35,8 @@ and progress towards implementing it.</p>
<li><a href=#android>Android Toolbox</a></li>
<li><a href=#tizen>Tizen Core</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=#s6>s6</a>...</li>
+<a href=#sash>sash</a>, <a href=#sbase>sbase</a>, <a href=#s6>s6</a>,
+<a href=#uclinux>uclinux</a>...</li>
</ul>
<hr />
@@ -186,13 +187,13 @@ C library, those are outside the scope of this project.)</p>
<span id=development>
bzcat cat cp dirname echo env patch rmdir sha1sum sleep sort sync
true uname wc which yes zcat
-awk basename bzip2 chmod chown cmp cut date dd diff
+awk basename chmod chown cmp cut date dd diff
egrep expr 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 man split
+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 man mdev mount mountpoint nc pgrep pkill
+logname losetup mdev mount mountpoint nc pgrep pkill
pwd route split stat switch_root tac umount vi
</span>
</b></blockquote>
@@ -207,13 +208,14 @@ self-bootstrapping build still uses the following busybox commands,
not yet supplied by toybox:</p>
<blockquote><p>
-ash awk bunzip2 bzip2 dd diff expr fdisk ftpd ftpget ftpput gunzip
-gzip less man pgrep ping pkill ps route sed sh sha512sum tar test tr unxz vi
-wget xzcat zcat</p></blockquote>
+awk dd diff expr fdisk ftpd ftpget ftpput gunzip
+gzip less pgrep ping pkill ps route sh sha512sum tar test tr unxz vi
+wget xzcat zcat
+</p></blockquote>
<p>Many of those are in "pending". Most of the archive commands are needed
because busybox tar doesn't call external versions. The remaining "difficult"
-commands are vi, awk, and ash.</p>
+commands are vi, awk, and sh.</p>
<hr />
<h2><a name=android /><a href="#android">Use case: Replacing Android Toolbox</a></h2>
@@ -701,6 +703,218 @@ 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)
@@ -722,6 +936,7 @@ ipaddr iplink iproute blockdev rpm2cpio arping brctl dumpleases fsck
tcpsvd tftpd
factor fallocate fsfreeze inotifyd lspci nbd-client partprobe strings
base64 mix
+reset hexedit nsenter shred
</span>
</b></blockquote>