ugh.book

(singke) #1

190 Programming


Spend a few moments thinking about this problem and you can convince
yourself that it is theoretically impossible to modify the Unix mv command
so that it would have the functionality of the MS-DOS “rename” command.
So much for software tools.

Robustness, or “All Lines Are Shorter Than 80 Characters”
There is an amusing article in the December 1990 issue of Communica-
tions of the ACM entitled “An Empirical Study of the Reliability of Unix
Utilities” by Miller, Fredriksen, and So. They fed random input to a num-
ber of Unix utility programs and found that they could make 24-33%
(depending on which vendor’s Unix was being tested) of the programs
crash or hang. Occasionally the entire operating system panicked.

The whole article started out as a joke. One of the authors was trying to get
work done over a noisy phone connection, and the line noise kept crashing
various utility programs. He decided to do a more systematic investigation
of this phenomenon.

Most of the bugs were due to a number of well-known idioms of the C pro-
gramming language. In fact, much of the inherent brain damage in Unix
can be attributed to the C language. Unix’s kernel and all its utilities are
written in C. The noted linguistic theorist Benjamin Whorf said that our
language determines what concepts we can think. C has this effect on Unix;
it prevents programmers from writing robust software by making such a
thing unthinkable.

The C language is minimal. It was designed to be compiled efficiently on a
wide variety of computer hardware and, as a result, has language constructs
that map easily onto computer hardware.

At the time Unix was created, writing an operating system’s kernel in a
high-level language was a revolutionary idea. The time has come to write
one in a language that has some form of error checking.

C is a lowest-common-denominator language, built at a time when the low-
est common denominator was quite low. If a PDP-11 didn’t have it, then C
doesn’t have it. The last few decades of programming language research
have shown that adding linguistic support for things like error handling,
automatic memory management, and abstract data types can make it dra-
matically easier to produce robust, reliable software. C incorporates none
of these findings. Because of C’s popularity, there has been little motiva-
tion to add features such as data tags or hardware support for garbage col-
lection into the last, current and next generation of microprocessors: these
Free download pdf