
The Linux Reading List HOWTO

Eric Steven Raymond

   [1]Thyrsus Enterprises
   
       esr@thyrsus.com
   
   This is version 1.17
   
   Copyright  2000 by Eric S. Raymond
   
   $Date: 2000/09/19 20:27:57 $
   
   This document lists the books I think are most valuable to a person
   trying to learn Unix (especially Linux) top to bottom.
     _________________________________________________________________
   
   Table of Contents
   1. [2]Introduction
          
        1.1. [3]Purpose of this document
        1.2. [4]New versions of this document
        1.3. [5]Feedback and Corrections
        1.4. [6]Related Resources
        1.5. [7]Conventions Used In This Document
                
   [8]Basic Linux and Unix bibliography
   A. [9]Administrivia
          
        A.1. [10]Terms of Use
        A.2. [11]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 [12]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 [13]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 <[14]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
   [15]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 [16]here.
   
   SAGE, the System Administrator's Guild, maintains an excellent
   [17]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 [18]Jargon File Resource Page.
   
   [19]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.
   
   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!"
   
   [20]Order here.
   
   Bell System Technical Journal, AT&T, 1978, July-August 1978, Vol. 57,
   No. 6, part 2, 416pp..
   
   Many early papers on Unix, including Ritchie & Thompson, "The UNIX
   Time Sharing System"; Thompson, "UNIX Implementation"; Ritchie, "A
   Retrospective"; Bourne, "The UNIX Shell"...
     _________________________________________________________________
   
Linux basics

   Linux Installation and Getting Started, Edited by Matt Welsh, 1997,
   Linux Documentation Project.
   
   Available on the LDP home page, or directly at
   [21]http://linuxdoc.org/LDP/gs/.
   
   How to bring up Linux. Explains a lot of Linux basics. Covers basic
   system administration.
   
   Linux System Administrator's Guide, Edited by Lars Wirzenius, 1997,
   Linux Documentation Project.
   
   Available on the LDP home page, or directly at
   [22]http://linuxdoc.org/LDP/sag/.
   
   An excellent first book on how to maintain and administer a Linux
   system.
   
   Linux in a Nutshell, Second Edition, Jessica P. Hekman, 1999, ISBN
   1-56592-585-8, 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.
   
   [23]Order here.
   
   Running Linux, Third Edition, Matt Welsh, 1999, ISBN 1-56592-469-X,
   O'Reilly & Associates.
   
   Everything you need in order to understand, install, and use the Linux
   operating system. Excellent beginner's book.
   
   [24]Order here.
   
   Hands-On Linux, Mark G. Sobel, 1998, ISBN 0-201-32569-1,
   Addison-Wesley, 1015pp..
   
   Just what the title says -- practical tutorials in basic Unix, shells,
   editors, mail programs, networking, Web tools, and utilities. Covers
   some system administration fundamentals. (This appears to be a
   repackaging of 1997's ``A Practical Guide to Linux'' from the same
   author, without Caldera OpenLinux Lite included.)
   
   Essential System Administration, Second Edition, Aeleen Frisch, 1995,
   ISBN 1-56592-127-5, O'Reilly & Associates.
   
   More in-depth coverage of normal system-administration tasks. Not
   Linux-specific but contains Linux material.
   
   [25]Order here.
     _________________________________________________________________
   
System Security

   Practical Unix and Internet Security, Second Edition, Simpson
   Garfinkel and Gene Spafford, 1996, ISBN 1-56592-148-8, O'Reilly &
   Associates.
   
   Ronald P. Miller: "Some overlap with Essential System Admin., but all
   in all a solid book on security, especially for those aspiring to
   allow multiple-user, dial-up/net access to their Linux boxes."
   
   [26]Order here.
     _________________________________________________________________
   
Books on Shell, Script, and Web Programming

   Programming Python, First Edition, Mark Lutz, 1997, ISBN
   0-56592-197-6, O'Reilly & Associates, 880pp..
   
   The next step beyond Perl. Python is beautifully designed, has better
   integration with C, and scales up more gracefully to large projects.
   
   [27]Order here.
   
   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.
   
   [28]Order here.
   
   Emmanuel Pierre keeps a [29]short list of Perl books.
   
   Programming Python, First Edition, Mark Lutz, 1997, ISBN
   0-56592-197-6, O'Reilly & Associates, 880pp..
   
   The next step beyond Perl. Python is beautifully designed, has better
   integration with C, and scales up more gracefully to large projects.
   
   [30]Order here.
   
   HTML & XHTML: The Definitive Guide, Fourth Edition, Chuck Musciano and
   Bill Kennedy, 2000, ISBN 0-596-00026-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.
   
   [31]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"
   
   [32]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."
   
   [33]Order here.
   
   The TeXbook, Volume A of Computers and Typesetting, Donald Knuth,
   1986, ISBN 0-201-13448, 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.
   
   [34]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.
   
   [35]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.
   
   [36]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.
   
   [37]Order 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 Rob
   Pike, 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, Academic
   Press, 508pp..
   
   The best introductory book on C++ I have seen. Now available [38]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.
   
   [39]Order here.
   
   Advanced Programming in The Unix Environment, Richard Stevens, 1992,
   ISBN 0-201-56317, 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, 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'Reoilly & Associates.
   
   Available on the LDP home page, or directly at
   [40]http://www.linuxdoc.org/LDP/nag/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'Reoilly & Associates, 472pp..
   
   Less Linux-specific than the Kirch book. Features deeper coverage of
   the TCP/IP core, including routing and BGP.
   
   [41]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.
   
   [42]Order here.
   
   Sendmail, Second Edition, Bryan Costales and Eric Allman, 1997, ISBN
   1-56592-222-0, 1050pp., O'Reoilly & Associates.
   
   An exhaustive (and exhausting) guide to Linux's and Unix's default
   mail-transfer agent.
   
   [43]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.
   
   [44]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.
   
   [45]Order here.
     _________________________________________________________________
   
The Linux kernel

   The Linux Kernel book, Rmy Card, ric Dumas, and Frank Mvel, 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 variablelisttion 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 Kernal Hacker's Guide, Edited by Michael K. Johnson, Linux
   Documentation Project.
   
   Available on the LDP home page, or directly at
   [46]http://linuxdoc.org/LDP/khg/.
   
   According to the author, this has been superseded by Alessandro
   Rubini's book (see below) but it remains a useful supplement.
   
   Linux Device Drivers, Alessandro Rubini, 1998, ISBN 1-56592-292-1,
   O'Reoilly & Associates, 442pp..
   
   Everything you need to know about writing device drivers under Linux;
   kernel APIs, interrupt handling, the module interface. Includes many
   examples.
   
   [47]Order here.
   
   LINUX Kernel Internals, (Second Edition), Michael Beck, Harold Bohme,
   Mirko Dziadka, and Ulrich Kunitz, 1998, ISBN 0-201-33143-8,
   Addison-Wesley, 480pp..
   
   A guide to Linux kernel programming; covers 2.0. Covers the
   architecture of the Linux core and network layer as well as driver
   construction.
   
   [48]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.
   
   [49]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.

References

   1. http://www.tuxedo.org/~esr/
   2. Reading-List-HOWTO.html#AEN23
   3. Reading-List-HOWTO.html#AEN25
   4. Reading-List-HOWTO.html#AEN28
   5. Reading-List-HOWTO.html#AEN34
   6. Reading-List-HOWTO.html#AEN38
   7. Reading-List-HOWTO.html#AEN46
   8. Reading-List-HOWTO.html#AEN51
   9. Reading-List-HOWTO.html#AEN792
  10. Reading-List-HOWTO.html#AEN794
  11. Reading-List-HOWTO.html#AEN807
  12. news:comp.os.linux.answers
  13. http://sunsite.unc.edu/LDP/HOWTO/Reading-List-HOWTO.html
  14. mailto:esr@thyrsus.com
  15. http://www.linuxdoc.org/
  16. http://www.tuxedo.org/~esr/faqs/loginataka.html
  17. http://www.usenix.org/sage/sysadmins/books/booklist.html
  18. http://www.tuxedo.org/
  19. http://www-mitpress.mit.edu/book-home.tcl?isbn=0262680920
  20. http://www.awl-he.com/titles/14147.html
  21. http://linuxdoc.org/LDP/gs/
  22. http://linuxdoc.org/LDP/sag/
  23. http://www.oreilly.com/catalog/linuxnut2/
  24. http://www.ora.com/catalog/runux3/
  25. http://www.ora.com/catalog/esa2/noframes.html
  26. http://www.oreilly.com/catalog/puis/
  27. http://www.ora.com/catalog/python/
  28. http://www.ora.com/catalog/esa2/noframes.html
  29. www.e-nef.com/perl/listeperl
  30. http://www.ora.com/catalog/python/
  31. http://www.ora.com/catalog/html4/
  32. http://www.awl-he.com/titles/13661.html
  33. http://www.awl-he.com/titles/13632.html
  34. http://www.awl.com/cp/TeXbook.html
  35. http://www.awl.com/cp/METAFONTbook.html
  36. http://cm.bell-labs.com/cm/cs/tpop/
  37. http://www.programmingpearls.com/
  38. http://www.steveheller.com/whos
  39. http://www.ora.com/catalog/posix/
  40. http://www.linuxdoc.org/LDP/nag/nag.html
  41. http://www.ora.com/catalog/tcp2/noframes.html
  42. http://www.ora.com/catalog/dns2/noframes.html
  43. http://www.ora.com/catalog/sendmail2/noframes.html
  44. http://www.prenhall.com/books/ptr_0132017997.html
  45. http://www.prenhall.com/books/esm_0136386776.html
  46. http://linuxdoc.org/LDP/khg/
  47. http://www.ora.com/catalog/linuxdrive/
  48. http://www.awl-he.com/titles/11653.html
  49. http://www.awl-he.com/titles/13693.html
