Tech Insider					     Technology and Trends

			      USENET Archives

Newsgroups: comp.os.linux
Subject: To Linus, Lions book?
Organization: The Internet
Date: Fri, 3 Jul 1992 09:04:24 GMT

I have a simple question and a simple request to Linus.

How did you get all your now how to create Linux?
Was hands on learning, which books/mags/articles/code
did you read? Go on Linus, give us a potted life history :-)

Also could you mail me a few lines, grouping the source code
files into chunks. I.e., which files make up the lowest most
basic layer of the OS 'onion', which ones make up the next layer?
This would make it lot easirt to peruse the code in an orderly fashion
so I can try to understand it.

Lastly (general cry to all now), does anyone know anything about
the 'Lions book'? A friend mentioned that it is an excellent
commentary on Unix, if you can get it, but that you can't. Is this
true? If so why, if not does anyone have a copy ?
:: Jon Jagger
:: Sheffield City Polytechnic, Pond Sreet, SHEFFIELD S1 1WB
:: Tel 0742 533802/432889 (work/home) Fax 0743 533840
:: Newspaper ad: Men wanted for expanding contracting company!

From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
Newsgroups: comp.os.linux
Subject: Re: To Linus, Lions book?
Date: 3 Jul 92 11:35:06 GMT
Organization: University of Helsinki

In article <> writes:
>How did you get all your now how to create Linux?
>Was hands on learning, which books/mags/articles/code
>did you read? Go on Linus, give us a potted life history :-)

Heh. I can't let these ego-building posts go by, so I'll have to answer

Linux started for several different reasons: originally just to learn
the 386, and for this the book "Programming the 80386" by Crawford and
Gelsinger is a must.  At least I haven't found anything better (although
admittedly bookstores in Finland probably don't have the plethora of
books available over in the US etc). 

The 386 book info has been used for all the 386 details: the lowest
level of the task-switching code, memory manager, floating point
emulations etc.  It doesn't even mention the AT hardware, so for device
drivers you'll need more info, but it does contain everything on the
386/387 chips (even if it's a bit hard to read: read it through several
times before starting to look into details). 

The device drivers have been written mostly by trial and error: I
haven't found a single good source of info on the standard AT hardware. 
Helpful sources have been (a) the AT Technical Reference Manual (notably
the BIOS listing) (b) actual data-sheets for the 8250 etc chips used in
the AT hardware (c) other sources (mach drivers and to a lesser extent
minix drivers) (d) various books like "IBM Microcomputers: a programmers
manual", "The PC Sourcebook" etc. 

Even though there are a lot of books on the AT hardware, none of them
seem to approach the information content of the 80386 books.  I can't
recommend any of the sources I've used, and the best bet is probably to
have a lot of books and hope they together cover most of it.

Then there is naturally the hardware-independent parts of the kernel:
general filesystem/process/memory management.  The two books I
originally used were "The Design of the Unix Operating System" by Bach,
and "OS Design and Implementation" by Tanenbaum.  Tanenbaum's book
should be read a couple of times: ignore the details (especially about
minix), but get the general picture clear.  The Bach book has a few nice
algorithms in it, and I'd suggest reading them too: many of the actual
ideas on how something could be implemented came from that. 

Still, OS design is mostly common sense: it doesn't need complicated
algorithms like a compiler does or similar.  A lot of thought, careful
programming and some good decisions.  And unix is a very simple OS
really: I first came in contact with it 2 years ago when I did the
"C-kieli ja unix ohjelmointiymp{rist|" course in the fall of -90.  By
early -91 I had bought a PC, and linux v0.01 was ready in August -91. 
That wouldn't have been possible with some other systems I could mention
(VMS..  arghh). 

The most difficult parts are:

 - device drivers: you can go crazy trying to find why something doesn't
work on some machines (especially if you can't even test it out).

 - filesystem: trying to make it clean and well designed, as well as
getting rid of all race conditions.  The current linux vfs layer seems
to work well enough, but my original design wasn't too good.  Rewriting
big parts isn't fun when something works. 

The kernel proper is pretty simple in fact, although you have to keep
track of a lot of things.  The memory manager has also survived pretty
well all the changes, and although I'll have to change it to use
different page directories for different processes some day it will
probably look pretty similar even after that. 

>Also could you mail me a few lines, grouping the source code
>files into chunks. I.e., which files make up the lowest most
>basic layer of the OS 'onion', which ones make up the next layer?
>This would make it lot easirt to peruse the code in an orderly fashion
>so I can try to understand it.

Hmm.  To get a good general idea of the different pieces, I'd suggest
reading linux/*/*.c - all the memory management sources, the normal
kernel sources and the vfs routines.  They are pretty modular: you can
generally understant linux/fs/*.c without having to understand the
kernel and vice versa (for a general picture, that is.  For the details
you usually have to read it all). 

The linux device drivers (linux/kernel/chr_drv and linux/kernel/blk_drv)
are a pain to read: they don't actually give you any more info on the
kernel itself, so reading them is only needed if you really want to know
how a block is loaded into memory etc.  Similarly for the math-emulator

The special filesystems (linux/fs/minix and now linux/fs/ext) can be
read if you are interested in the actual lay-out of the disk, or if you
want to see how some of the fs races are handled.  Note that most
race-conditions are handled directly by the buffer-cache routines or the
vfs layer, but some races are inherent to the actual fs implementation
(renaming a file etc). 


			        About USENET

USENET (Users’ Network) was a bulletin board shared among many computer
systems around the world. USENET was a logical network, sitting on top
of several physical networks, among them UUCP, BLICN, BERKNET, X.25, and
the ARPANET. Sites on USENET included many universities, private companies
and research organizations. See USENET Archives.

		       SCO Files Lawsuit Against IBM

March 7, 2003 - The SCO Group filed legal action against IBM in the State 
Court of Utah for trade secrets misappropriation, tortious interference, 
unfair competition and breach of contract. The complaint alleges that IBM 
made concentrated efforts to improperly destroy the economic value of 
UNIX, particularly UNIX on Intel, to benefit IBM's Linux services 
business. See SCO v IBM.

The materials and information included in this website may only be used
for purposes such as criticism, review, private study, scholarship, or

Electronic mail:			       WorldWideWeb: