embutils - small system utilities for embedded systems

[Other pages for this project: freshmeat, advogato]

Recent news

[20080824] Version 0.19 [GPG sig] enhances tr, env, tail, install and tar.

[20061025] Version 0.18 [GPG sig] adds chrootuid, renice, enhances tar, and fixes many bugs.

[20050130] Version 0.17 [GPG sig] adds date, mount, umount, printenv, enhances tar, and fixes a few bugs.

[20030912] Version 0.16 [GPG sig] adds strings and test and fixes bugs in tee, dmesg, df, sync, mv, dd, ls and tr.

[20021017] Version 0.15 [GPG signature] adds truncate and mktemp, long option support for install, an uninstall target, an UID cache for tar, and fixes bugs in which, ls, cmp, cat, dd and tr.

[20020503] Version 0.14 adds uuencode, uudecode, nohup, nice, cmp, has many size improvements, and fixes bugs in tr and tail.

[20020322] Version 0.13 adds uniq, tr, dd, touch, mesg, write, du and tail (and fixes an ls -l bug when readlink fails).

[20011116] Version 0.12 adds sleep2, optimizes echo, fixes mv, rm and install, and adds a kill.

[20010724] Version 0.11 fixes several bugs in ls, implements -h in chown, and adds whoami, mkfifo, head, install, md5sum (without -c) and very small SOS version (below 1k) of cp, mv, rm, and ln.

[20010419] Version 0.10.1 fixes an embarassing bug in ls when the file size was wider than 8 digits.

[20010418] Version 0.10 adds cat, rm, wc and ls (finally! And a color ls nonetheless!). It also adds embfeatures.h in which unneeded features can be disabled.

[20010319] Version 0.9 adds mv, cp, yes and which, adds -v to ln, and fixes the exit codes of many utilities. It also removes the trailing spaces in uname that were confusing config.guess.

[20010305] I finally set up an anonymous read-only access for embutils. Use cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co embutils. The CVS version has a cp, a mv and a yes in addition to 0.8.

[20010204] Version 0.8 removed stdio references and uses libowfat routines instead. Saves 2-3k from df, id and tar each.

[20010130] Version 0.7 adds ln and clarifies that the license is GPL.

[20010119] Version 0.6 fixes df and dmesg, implements dmesg -n, adds "ustar" magic comparison to tar, and fixes the size display for tar.

Version 0.5.1 adds dirname, env, domainname, id (no groups for "id ftp" type usage yet).

There is now a mailing list for embutils. You can subscribe by sending an empty mail to embutils-subscribe@fefe.de.

Version 0.5 adds "U" to tar, basename, chvt, df (does not use /etc/mtab yet), tee, uname, arch and hostname.

Version 0.4 adds sleep, tty and tar (well, almost. It can do "t" and "x" with verbosity and supports "z" for gzip and "I" for bzip2).

Version 0.3 fixes a bug in chown (my getpwnam was broken by a late-night optimization).

What is it

Most of the typical Unix userland typically comes from either the GNU project or the BSD people. Those sources are ancient and optimized for features, not for small size, and now that computers are fast enough and have lots of RAM, implementations became larger and larger. Features like internationalization eat lots of memory and disk space.

For embedded system and boot disks (and desktops and servers for purist Unix users), you rather want small than internationalized versions of the utilities. That's why I started to reimplement a few important typical userland programs that I need on boot and rescue disks, making sure that you can link it against diet libc to create very small statically linked binaries.

By the way: one of the major goals for the embedded utilities is that the small size is not achieved by omitting POSIX features. Unfortunately, I don't have a copy of the POSIX standard, so feel free to correct me!

What works so far

More is planned. Those utilities contain no x86 specific code and should also work on other operating systems and architectures.


(in no particular order)

See also