\section{Hacking Wisdom}

This is a collection of little things that you need to know before you
start hacking.  It is rather rambling, and almost resembles a glossary
in form, but it is not a reference, but rather a hacker's narative, a
short course in kernel hacking.

\subsection*{Static variables}

{\bf Always initialize static variables.}  I cannot overemphasize
this.  Many seemingly random bugs have been caused by not initializing
static variables.  Because the kernel is not really a standard
executable, the {\bf bss} segment may or may not be zeroed, depending
on the method used for booting.

\subsection*{{\tt libc} unavailable}

Much of {\tt libc} is unavailable.  That is, all of {\tt libc} is
unavailable, but many of the most common functions are duplicated.
See the section {\bf [not here yet]} for simple documentation of these
functions.  Most of the documentation for these are the section 3 and
section 9 man pages.

\subsection*{\linux\ is not {\sc unix}\tm}

However, it is close.  It is not plan 9, nor is it Mach.  It is not
primarily intended to be a great commercial success.  People will not
look kindly upon suggestions to change it fundamentally to attain any
of these goals.  It has been suggested that part of the reason that
the quality of the \linux\ kernel is so high is the unbending devotion
of the \linux\ kernel hackers to having fun playing with their new
kernel.

\subsection*{Useful references}

You will encounter certain references that you will need to
understand.  For instance, ``Stevens'' and ``Bach''.  Read the
annotated bibliography (Appendix~\ref{bibliography}) for a list of
books that you should at least recognize references to, even if you
have not read them.

\subsection*{Read the FAQ}
