(2023-04-17) Wait, what ecosystem?
----------------------------------
It's funny how the look of things can change depending on the perspective. A
single binary file that weighs about 11 MB is somehow no longer perceived as 
something you can build your entire workflow on top of. Indeed, Busybox is 
still missing some essential pieces like iwutils, wpa_supplicant or 
modem-manager, i.e. anything that would allow you to achieve wireless 
connectivity - only Ethernet, only hardcore - and in this regard, it lags 
behind a bit. But as for everything else...

Let's take a look at the current stable Busybox version at the time of
writing, 1.34.1, built with the default compile-time flags, and see what we 
can find there. I won't list all the commands, but just the ones I consider 
significant.

* Init system: busybox init (good enough to use in distros like TinyCore)
* Shell: ash (actually, a variant of dash with some GNU extensions)
* File commands: ls, mv, cp, rm, mkdir, rmdir, ln, find, file, du, df,
realpath, mktemp, chroot, lsof
* Text editors: vi, ed
* Text processing languages: sed, awk (POSIX + bitwise operators)
* Other text processing tools: cat, less, tee, head, tail, cut, tr,
grep/egrep, sort, uniq, cmp, comm, shuf, seq, diff, paste, patch, split, ts, 
rev, wc
* Binary editors/viewers: hexedit, xxd, hexdump/hd, od, strings
* Binary serializers: base64, base32, uuencode/uudecode, makemime/reformime
* Checksums/hashes: sum, crc32, md5sum, sha1sum, sha256sum/sha512sum, sha3sum
* Calculators: bc, dc, factor, ipcalc
* Archivers: ar, tar, cpio, rpm2cpio
* Compression tools: gzip, bzip2, xz, lzma, unzip
* Network clients: wget, tftp, telnet, nc, ftpget, ftpput, rdate, ntpd,
ssl_client, sendmail (!), popmaildir
* Network servers: inetd, tcpsvd, udpsvd, nc, telnetd, httpd, ntpd, dnsd,
udhcpd, tftpd
* Serial device client: microcom

This list doesn't include all the filesystem utils, service management
commands, network setup and a ton of other things also present there. Yet 
you can already see how one can live a full life inside this environment. Of 
course, most of these tools (or "applets" in Busybox terminology) offer less 
amount of features than their "full-sized" counterparts, but they can be 
efficiently combined together to get the job done. While Busybox itself, as 
a single program, could be viewed as the opposite of the Unix-way, it 
actually is more of a portable binary container for multiple Unix-way 
programs developed under the same umbrella. One way or another, it can be 
considered an ecosystem.

However, just like with almost any other popular project that, while itself
being non-commercial, had led some companies or individuals to commercial 
success, politics got in the way here too. Busybox isn't suitable as a part 
of projects that you're not ready to release under GPL, although my opinion 
about "free software licenses" vs. true software freedom is a topic for 
another time. Nevertheless, I salute any toolbox alternatives with a similar 
approach but with more permissive licensing terms, like Toybox (which, for 
the time being, is far behind Busybox in terms of features and 
self-containment: it doesn't even contain its own shell yet). As long as 
you're just an end user though, Busybox stack is just fine. Which brings 
another interesting question to the table: which commands out of the above 
list I'd personally consider absolutely vital for a complete and 
self-contained minimal Linux system? Again, omitting all the network 
configuration and partition setup, here are the top 64 that I consider the 
most important:

1. init
2. (d)ash
3. ls
4. cp
5. rm
6. ln
7. printf (might not be a part of the shell)
8. test/[ (might not be a part of the shell)
9. realpath
10. find
11. cat
12. tee
13. head
14. tail
15. sort
16. grep/egrep
17. diff
18. patch
19. less
20. vi
21. sed
22. awk (POSIX+bitwise)
23. xxd
24. hexedit
25. nc (any implementation with server mode)
26. tar
27. gzip
28. xz
29. unzip
30. bzip2
31. date
32. chroot
33. mktemp
34. base64
35. md5sum
36. sha1sum
37. sha256sum
38. cpio
39. split
40. xargs
41. strings
42. paste
43. ps
44. kill
45. killall
46. udhcpc
47. ping
48. lsof
49. time
50. dc
51. mount
52. umount
53. mkfifo
54. mdev
55. netstat
56. env
57. pwd
58. nohup
59. stty
60. dmesg
61. losetup
62. wget (with FTP support)
63. ssl_client
64. microcom

Note that I didn't include the mv command because it easily can be emulated
with cp+rm. In the same way, we could theoretically substitute hexedit with 
vi+sed+xxd, but that might be too cumbersome. In case the selected nc 
version (like the one used in Toybox) also supports interacting with serial 
device files, microcom is also unnecessary, although that's a matter of 
convenience. 

So, this is how my ideal "Toybox" would look like. Now, just think of what
could be done if we added something like Lua, Tcl or MicroPython into the 
mix... But at this point, I'm just dreaming out loud.

--- Luxferre ---