Unix Reconstruction Project: Whence

Provenance and Philosophy

The list above derives mostly from the BSD utility set, which is our target emulation distribution. Each page references the BSD manpage as a baseline, and when applicable, the original Version 7 documentation for the command as well. The BSD manpages mention conformance with POSIX.2, which is nice, since the books are so expensive to buy. We are intentionally avoiding the anti-Unix feature bloat painfully demonstrated in some of the more egregious GNU (f:-)utilities or in the distressing System V corruptions that have infected Unix releases like Solaris. For a proper attitude adjustment, you should probably read Rob Pike's paper ``UNIX Style, or cat -v Considered Harmful'' from USENIX Summer Conference Proceedings, 1983 for more info on this; well, if you can find it -- anybody got a link? (Yes, I realize the irony in using BSD as a guideline, considering Rob's position.)

This doesn't mean that one must eschew adding things that would be natural in Perl, such as perhaps a wc -p that counts paragraphs, or a grep command that handles Perl regular expressions. But it's better to add a new command than a bunch of ugly options.

History is important. Standards are important. But simplicity is paramount. It's better to get something that works in 90% of the cases than not getting anything at all, or to get something that's huge and complicated and hard to maintain.

Follow classic, simple behaviour. Avoid long options. Don't load modules you don't have to, but do so if it makes it more portable. Let unrecognized options (like '-?') elicit usage messages. Above all, keep it simple, sane, and useful! For a more recent take on these principles of Simplicity, Clarity, and Generality, see The Practice of Programming.