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.