1.  INTRODUCTION

      The UNIXkernel consists of about 10,000 lines of C code and about 1,000 lines of assembly code. The assembly code can be further broken down into 200 lines included for the sake of efficiency (they could have been written in C) and 800 lines to perform hardware functions not possible in C.

      This code represents 5 to 10 percent of what has been lumped into the broad expression ``the UNIXoperating system.'' The kernel is the only UNIXcode that cannot be substituted by a user to his own liking. For this reason, the kernel should make as few real decisions as possible. This does not mean to allow the user a million options to do the same thing. Rather, it means to allow only one way to do one thing, but have that way be the least-common divisor of all the options that might have been provided.

      What is or is not implemented in the kernel represents both a great responsibility and a great power. It is a soap-box platform on ``the way things should be done.'' Even so, if ``the way'' is too radical, no one will follow it. Every important decision was weighed carefully. Throughout, simplicity has been substituted for efficiency. Complex algorithms are used only if their complexity can be localized.