(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 ---