The Linux Reading List HOWTO

Eric Steven Raymond

[http://www.catb.org/~esr/]   Thyrsus Enterprises


    <esr@thyrsus.com>
    

Copyright © 2000 Eric S. Raymond
Revision History                                                             
Revision 3.0             2004-02-04            Revised by: esr               
Major update. Removed out-of-date books, added a new one.                    
Revision 2.1             2003-10-28            Revised by: esr               
Added TAOUP.                                                                 
Revision 2.0             2003-07-31            Revised by: esr               
Major revision, cleaned out obsolete stuff.                                  
Revision 1.21            2003-02-22            Revised by: esr               
LDP site has moved.                                                          
Revision 1.20            2001-06-14            Revised by: esr               
Removed "Practical Unix Security"; it's five years old and the material is   
now covered better by other books.                                           
Revision 1.19            2001-06-14            Revised by: esr               
Added Ross Anderson's "Security Engineering". Corrected ISBNs.               


  This document lists the books I think are most valuable to a person trying
to learn Unix (especially Linux) top to bottom.

Copyright

Permission is granted to copy, distribute and/or modify this document under
the terms of the Open Publication License, version 2.0.
-----------------------------------------------------------------------------

Table of Contents
1. Introduction
    1.1. Purpose of this document
    1.2. New versions of this document
    1.3. Feedback and Corrections
    1.4. Related Resources
    1.5. Conventions Used In This Document
   
   
Basic Linux and Unix bibliography
A. Administrivia
    A.1. Terms of Use
    A.2. History
   
   

1. Introduction

1.1. Purpose of this document

This document lists what I consider to be the essential book-length
references for learning Unix (especially Linux) and how to program under it.
-----------------------------------------------------------------------------

1.2. New versions of this document

New versions of the Linux Reading List HOWTO will be periodically posted to
[news:comp.os.linux.answers]  comp.os.linux.answers. They will also be
uploaded to various Linux WWW and FTP sites, including the LDP home page.

You can also view the latest version of this on the World Wide Web via the
URL [http://sunsite.unc.edu/LDP/HOWTO/Reading-List-HOWTO.html]  http://
sunsite.unc.edu/LDP/HOWTO/Reading-List-HOWTO.html.
-----------------------------------------------------------------------------

1.3. Feedback and Corrections

If you have questions or comments about this document (or just want to
suggest a book that you think should be on it), please feel free to mail Eric
S. Raymond, at <esr@thyrsus.com>. I welcome any suggestions or criticisms.
-----------------------------------------------------------------------------

1.4. Related Resources

For on-line HOWTOs, magazines, and other non-book material, see the Linux
Documentation Project home page.

Some years ago I wrote a less Linux-focused Unix bibliography that may still
be of some interest and retains a certain amusement value. You can find the
Loginataka [http://www.catb.org/~esr/faqs/loginataka.html] here.

SAGE, the System Administrator's Guild, maintains an excellent [http://
www.usenix.org/sage/sysadmins/books/booklist.html]  list of relevant books.
-----------------------------------------------------------------------------

1.5. Conventions Used In This Document

Comments not in quotes below are either mine, or I have seen no reason to
change them from those of Jim Haynes (previous maintainer of this document).
Comments sent in by others are in quotes, and have the name of the
commentator before them (JH is Jim Haynes).

"See" URLs attached to publishing information point directly into the
publisher's web catalog and typically take you to a page containing a cover
shot, blurbs, and ordering information. Books that don't have these lack them
because the publisher is using frames and the catalog pages can't be
bookmarked.

Topic listings go roughly from the outside in (culture to user-land
programming to kernel programming to hardware). Within sections I have tried
to list the most useful books first insofar as I am familiar with them. It's
just an embarrassing coincidence that this lists one of my books first,
honest! (Suggestions for a better organization cheerfully accepted.)
-----------------------------------------------------------------------------

Basic Linux and Unix bibliography

Books on Culture, History, and Pragmatics

The New Hacker's Dictionary, Third Edition, Edited by Eric S. Raymond, 1996,
ISBN 0-262-68092-0, MIT Press, 547pp..

Um, er. A guide to Internet culture. Lots of people like it. HTML at the 
Jargon File Resource Page.

[http://www-mitpress.mit.edu/book-home.tcl?isbn=0262680920]   Order here.


A Quarter Century of Unix, Edited by Peter H. Salus, 1994, ISBN
0-201-54777-5, Addison-Wesley, 255pp..

Linux is part of the Unix tradition. This book is an oral history of Unix --
how it originated, how it evolved, how it spread -- by the people who were
there.

[http://www.awprofessional.com/catalog/product.asp?product_id=
{CE8A5F8A-8E49-4B84-89D4-F518971D8130}] Order here.


The Mythical Man Month, Anniversary Edition, Frederic P. Brooks, 1995, ISBN
0-201-83595-9, Addison-Wesley.

The one book on software engineering everyone should read.

Alan Cox: "This I'd recommend not for its technical value but for its
application of common sense and reality to computing projects." JH: "Ah, yes.
What if Linus had been given 200 programmers and had been told to produce
Linux in 3 months!"

[http://www.aw-bc.com/catalog/academic/product/0,4096,0201835959,00.html]  
Order here.


The Cathedral and the Bazaar, Second Edition, Edited by Eric S. Raymond,
1999, ISBN 0-596-00131-2, O'Reilly & Associates, 240pp..

How and why the Linux development model works. HTML [http://www.catb.org/~esr
/writings/cathedral-bazaar]   here.

Order [http://www.oreilly.com/catalog/cathbaz/]   here..
-----------------------------------------------------------------------------

Linux basics

Linux System Administrator's Guide, Edited by Lars Wirzenius, 1997, Linux
Documentation Project.

Available on the LDP home page, or directly at [http://www.tldp.org/LDP/sag/]
http://www.tldp.org//sag/.

An excellent first book on how to maintain and administer a Linux system.


Linux in a Nutshell, Fourth Edition, Ellen Siever, Stephen Figgins, Aaron
Weber, 2003, ISBN 0-596-00482-6, O'Reilly & Associates.

According to O'Reilly, "The Desktop Reference for Linux". For Linux users
this obsoletes their "Unix In a Nutshell" which was SVr4/Solaris-oriented.

[http://www.oreilly.com/catalog/linuxnut3/]   Order here.


Running Linux, Fourth Edition, Matt Welsh, Matthias Dallheimer, Terry Dawson,
Lar Kaufman, 2002, 0-596-00272-6, O'Reilly & Associates.

Everything you need in order to understand, install, and use the Linux
operating system. Excellent beginner's book.

[http://www.ora.com/catalog/runux3/]   Order here.


A Practical Guide to Linux, Mark G. Sobell, 1998, ISBN 0-201-89549-8,
Addison-Wesley, 1072pp..

Just what the title says -- practical tutorials in basic Unix, shells,
editors, mail programs, networking, Web tools, and utilities. Covers some
system administration fundamentals.


Essential System Administration, 3rd Edition, Æleen Frisch, 2002, ISBN
0-596-00343-9, O'Reilly & Associates.

More in-depth coverage of normal system-administration tasks. Not
Linux-specific but contains Linux material.

[http://www.ora.com/catalog/esa2/noframes.html]   Order here.
-----------------------------------------------------------------------------

System Security

Security Engineering: A Guide to Building Dependable Distributed Systems, 
Ross Anderson, 2001, 0-471-38922-6, Wiley.

The best book I've ever seen on technological security measures and general
computer security. The section on "How to Steal a Painting" and physical
alarm systems is worth the price of admission by itself.


Real World Linux Security: Intrusion Prevention, Detection, and Recovery, 2nd
edition, Bob Toxen, 2003, ISBN 0-13-046456-2, Prentice-Hall.

This is excellent work, the standard by which future Linux security books
will be judged. I wrote a foreword for it. Combines step-by-step practical
instructions on hardining a Linux system with good theory on attack paths,
rings of protection, and security analysis. Describes many counters for
specific exploits.
-----------------------------------------------------------------------------

Books on Shell, Script, and Web Programming

Programming Perl, Third Edition, Larry Wall, Tom Christiansen, and Jon Orwant
, 2000, ISBN 0-596-00027-8, O'Reilly & Associates, 1104pp..

Shell (as a programming language for more than trivial scripting) is dead.
Perl rules in its place (though it is now being strongly challenged by
Python). This is the third edition of the definitive Perl book.

[http://www.oreilly.com/catalog/pperl3/]   Order here.

Emmanuel Pierre keeps a short list of Perl books.


Programming Python, Second Edition, Mark Lutz, 2001, ISBN 0-596-00085-5,
O'Reilly & Associates.

The next step beyond Perl. Python is beautifully designed, has better
integration with C, and scales up more gracefully to large projects.

[http://www.ora.com/catalog/python/]   Order here.


HTML & XHTML: The Definitive Guide, Fifth Edition, Chuck Musciano and Bill
Kennedy, 2002, ISBN 0-596-00382-X, O'Reilly & Associates, 680pp..

The best HTML tutorial/reference I have ever seen, and the only HTML book you
need unless you also want to do CGI. I don't know of any other book on HTML
that comes within miles of this one for comprehensiveness, depth, and quality
of organization.

[http://www.ora.com/catalog/html5/]   Order here.


The Unix Programming Environment, Brian Kernighan and Rob Pike, 1984, ISBN
0-13-937681-X, Prentice-Hall.

A true classic -- possibly the best single-book exposition of the Unix
philosophy. Useful for learning shell programming.
-----------------------------------------------------------------------------

Tex and LaTeX

The LaTeX Companion, Michael Goossens, Frank Mittelbach, and Alexander
Samarin, 1994, ISBN 0-201-54199-8, Addison-Wesley, 530pp..

`If you are one of those users who would like to know how LaTeX can be
extended to create the nicest documents possible without becoming a (La)TeX
guru, then this book is for you' --- from the Preface. Bruce Thompson adds:
"A very nice book providing a lot of information about the new extensions to
LaTeX, provides a large number of examples showing precisely how your
document's layout can be manipulated"

[http://www.awprofessional.com/catalog/product.asp?product_id=
{2B50D478-D4C6-41F2-BD2F-F65E8A99E1C4}]   Order here.


LaTeX: A Document Preparation System, Leslie Lamport, 1994, ISBN
0-201-52983-1, Addison-Wesley, 256pp..

Bruce Thompson: "The ultimate reference on LaTeX 2.09 by its author. A new
edition covering LaTeX2e (the version included in the current TeX/LaTeX
distribution) is in preparation. LaTeX 2.09 is fully supported by LaTeX2e. A
must for anyone wanting to use LaTeX. Provides a gentle introduction to
document preparation and the various tools that LaTeX provides for producing
professional quality documents. Lots of examples."

[http://www.awprofessional.com/catalog/product.asp?product_id=
{3DC3049A-068B-4184-B406-C13CBFC93CEB}]   Order here.


The TeXbook, Volume A of Computers and Typesetting, Donald Knuth, 1986, ISBN
0-201-13448-9, Addison-Wesley, 496pp..

Bruce Thompson: "The definitive user's guide and complete reference manual
for TeX. Probably not needed for casual LaTeX use, but a fascinating book
nonetheless." I'll strengthen that by adding that this book is not for the
faint of heart.

[http://www.awl.com/cp/TeXbook.html]   Order here.


The METAFONT Book, Volume C of Computers and Typesetting, Donald Knuth, 1986,
ISBN 0-201-13444-6, Addison-Wesley, 386pp..

Bruce Thompson: "The definitive user's guide and reference manual for
METAFONT, the companion program to TeX for designing fonts. An excellent work
if you're planning to design your own fonts for use in TeX and LaTeX.
METAFONT is included with the normal TeX/LaTeX distribution." This book is 
definitely not for the faint of heart.

[http://www.awprofessional.com/catalog/product.asp?product_id=
{27AADE0A-B3C5-4F6E-B79F-5A53027EA008}]   Order here.
-----------------------------------------------------------------------------

Good Programming Style

The Practice of Programming, Brian Kernighan and Rob Pike, 1999, ISBN
0-201-61586-X, Addison-Wesley.

An excellent treatise on writing high-quality programs, surely destined to
become a classic of the field.

[http://cm.bell-labs.com/cm/cs/tpop/]   Order here.


Programming Pearls, (Second Edition), Jon Bentley, 2000, ISBN 0-201-65788-0,
Addison-Wesley.

These are selected essays from Bentley's column in the Communications of the
ACM. He discusses a wide variety of issues in program improvement, often
focusing on program efficiency.

[http://www.awprofessional.com/catalog/product.asp?product_id=
{8D9EB790-15B3-41C9-AE3D-8149347A52AA}]   Order here.


The Art of Unix Programming, Edited by Eric S. Raymond, 2003, ISBN
0-131-42901-9, Addison-Wesley, 512pp..

The book on how to think like a Unix expert. Browseable HTML and ordering
info live [http://www.catb.org/~esr/writings/taoup/] here.


Code Reading: The Open Source Perspective, Edited by Diomedis Spinellis,
2003, Addison-Wesley.

A good book on an often-neglected skill. Order [http://www.awprofessional.com
/catalog/product.asp?product_id={DE5EA6BB-1743-406B-A680-D1B335BA7EA2}&
session_id={D106B2CE-36F1-4EA0-8651-74B623E0CECD}] here.


Writing Efficient Programs, Jon Bentley, 1982, ISBN 0-13-970251-2 or
0-13-970244-X, Prentice-Hall.

This book presents Bentley's methodology and set of rules for improving
program efficiency, and includes a large number of examples.
-----------------------------------------------------------------------------

C and C++

The C Programming Language, (Second Edition), Brian Kernighan and Dennis
Ritchie, 1988, ISBN 0-13-110362-8, Addison-Wesley, 272pp..

The improved second edition, covering ANSI C, of the original classic C book
coauthored by C's designer, "K&R". Still the best!


Who's Afraid of C++?, Steve Heller, 1996, ISBN 0-12-339097-4, Academic Press,
508pp..

The best introductory book on C++ I have seen. Now available [http://
www.steveheller.com/whos] on the Web.
-----------------------------------------------------------------------------

C System Call Interface

POSIX Programmer's Guide: Writing Portable Unix Programs, Donald Lewine,
1992, ISBN 0-937175-73-0, O'Reilly & Associates, 607pp..

Linux hews very close to the letter of the POSIX standard (non-conformance is
considered a bug and swiftly fixed). This excellent reference for POSIX is
thus also an excellent reference for the Linux kernel API.

[http://www.ora.com/catalog/posix/]   Order here.


Advanced Programming in the Unix Environment, W. Richard Stevens, 1993, ISBN
0-201-56317-7, Addison-Wesley.

A book on general Unix programming that is every bit as good as Stevens's
classic on network programming.


Linux Application Development, Michael K. Johnson and Erik W. Troan, 1998,
ISBN 0-201-308215, Addison-Wesley.

The best single reference to the Linux API. Covers the features that aren't
generic Unix or Posix.
-----------------------------------------------------------------------------

Books on Networking

Unix Network Programming, volume 1 -- Networking APIs: Sockets and XTI, W.
Richard Stevens, 1998, ISBN 0-13-490012-X, Prentice-Hall.

Everything you might want to know about the subject. Generally regarded as
definitive on the basics.


Unix Network Programming, volume 2 -- Interprocess Communication, Richard
Stevens, 1998, ISBN 0-13-081081-9, Prentice-Hall.

Ditto...


Linux Network Administrator's Guide, Olaf Kirch, 1995, ISBN 1-56592-087-2,
O'Reilly & Associates.

Available on the LDP home page, or directly at [http://www.tldp.org/nag/
nag.html] http://www.tldp.org/nag.html.

An excellent first book on how to maintain and administer a networked Linux
system.


TCP/IP Network Administration, Craig Hunt, 1992, ISBN 0-937175-82-X, O'Reilly
& Associates, 472pp..

Less Linux-specific than the Kirch book. Features deeper coverage of the TCP/
IP core, including routing and BGP.

[http://www.ora.com/catalog/tcp2/noframes.html]   Order here.


DNS and BIND, Second Edition, Paul Albiz and Cricket Liu, 1998, ISBN
1-56592-512-2, 502pp., O'Reilly & Associates.

In-depth coverage of DNS, useful for people running complicated
multiple-subnet installations. Covers BIND library programming.

[http://www.ora.com/catalog/dns2/noframes.html]   Order here.


Sendmail, Third Edition, Bryan Costales and Eric Allman, 2002, ISBN
1-56592-839-3, 1232pp., O'Reilly & Associates.

An exhaustive (and exhausting) guide to Linux's and Unix's default
mail-transfer agent.

[http://www.ora.com/catalog/sendmail2/noframes.html]   Order here.
-----------------------------------------------------------------------------

Ancestors of Linux

The Design of the Unix Operating System, Maurice J. Bach, 1996, ISBN
0-13-201799-7, 470pp., Prentice-Hall.

The book that got Linus started.

[http://www.prenhall.com/books/ptr_0132017997.html]   Order here.


Operating Systems, Design and Implementation, Andrew S. Tanenbaum, 1987, ISBN
0-13-638677-6, 940pp., Prentice-Hall.

Alan Cox likes this book. Tanenbaum designed Minix, which is the system Linus
bootstrapped Linux up from.

[http://www.prenhall.com/books/esm_0136386776.html]   Order here.
-----------------------------------------------------------------------------

The Linux kernel

The Linux Kernel book, Rémy Card, Èric Dumas, and Frank Mével, 1998, ISBN
0-471-98141-9, John Wiley & Sons.

(Translated from the French language edition of "Programmation Linux 2.0";
same authors; 1997; Éditions Eyrolles; Paris, France.)

A very interesting and informative examination of the operation of the kernel
that fills in the gap between the POSIX interface and "The Design of the Unix
Operating System" and the Linux source code. A good understanding of the
design and operation of a Unix OS is a pre-requisite, but this book is an
excellent help to going beyond that general understanding into actual work.

The primary author is one of the core developers for the ext2 filesystem, and
the Linux Kernel book shows a firm grasp of the matter and clear explanations
and structure. It's surprisingly readable for something working at such a low
level. The book does seem to have suffered a little in the translation to
English -- there are a few typos and grammatical mistakes, but it's quite
readable. (The code example files are charmingly still named in French.)

The book is current to Linux 2.0.35 and foreshadows 2.1 and 2.2. Network
protocol implementations are not covered.


LINUX Kernel Programming, (Third Edition), Michael Beck, Harold Bohme, Mirko
Dziadka, Robert Magnus, Claus Schroter, and Dirk Verworner, 2002, ISBN
0-201-719754, Addison-Wesley, 480pp..

A guide to Linux kernel programming; covers 2.4. Covers the architecture of
the Linux core and network layer as well as driver construction.

[http://www.awprofessional.com/catalog/product.asp?product_id=
{8D651984-15AF-4C2D-B17C-C07A7758DF23}]   Order here.
-----------------------------------------------------------------------------

Relatives of Linux

The Design and Implementation of the 4.4BSD Unix Operating System, Marshall
Kirk McKusick, Keith Bostic, Michael J. Karels, and John S. Quarterman, 1996,
ISBN 0-201-54979-4, Addison-Wesley.

The successor to a classic book on the implementation of the 4.3 BSD kernel,
which influenced Linux's design (especially near sockets and networking).
This book covers the 4.4BSD base of BSD/OS, FreeBSD, and NetBSD.

[http://www.aw-bc.com/catalog/academic/product/0,4096,0201549794,00.html]  
Order here.
-----------------------------------------------------------------------------

Books on Intel and PC hacking

80386 Programmer's Reference Manual, Intel Corporation, 1986, ISBN
1-55512-022-9.

Part I. Applications Programming, data types, memory model, instruction set.
Part II. Systems Programming, architecture, memory management, protection,
multitasking, I/O, exceptions and interrupts, initialization, coprocessing
and multiprocessing. Part III. Compatibility (with earlier x86 machines).
Part IV. Instruction Set


80386 System Software Writer's Guide, Intel Corporation, 1987, ISBN
1-55512-023-7.

This explains the 386 features for operating system writers. It includes a
chapter on Unix implementation. A lot of the 80386 architecture seems to have
been designed with Multics in mind; the features are not used by DOS or by
Unix.


Programming the 80386, John H. Crawford and Patrick P. Gelsinger, 1987, ISBN
0-89588-381-3, 774pp..

This is the book the Jolitzes used when they ported BSD to the 386
architecture.


80386 Hardware Reference Manual, Intel Corporation, 1986, ISBN 1-55512-024-5.

Pin connections, timing, waveforms, block diagrams, voltages, all that kind
of stuff.


The Indispensable PC Hardware Book, Hans-Peter Messmer, 1993, ISBN
0-201-62424-9, 1000pp., Addison-Wesley.

JH: "Covers the more recent stuff like EIDE and PCI."
-----------------------------------------------------------------------------

A. Administrivia

A.1. Terms of Use

This document is copyright 1999 by Eric S. Raymond. You may use, disseminate,
and reproduce it freely, provided you:

  * Do not omit or alter this copyright notice.
   
  * Do not omit or alter or omit the version number and date.
   
  * Do not omit or alter the document's pointer to the current WWW version.
   
  * Clearly mark any condensed, altered or versions as such.
   

These restrictions are intended to protect potential readers from stale or
mangled versions. If you think you have a good case for an exception, ask me.
-----------------------------------------------------------------------------

A.2. History

This was originally a mini-HOWTO maintained by Jim Haynes. I have changed the
emphasis somewhat, trying to make it more a standalone document and less
reliant on the various USENET bibliographic postings. The unattributed
mini-reviews are mine rather than his.
