Author: Robert Love
Publisher: Addison Wesley, 2010
Aimed at: Developers interested in the Linux OS
Pros: Good introduction to Linux in general
Cons: Misleading title
Reviewed by: Harry Fairhead
The first question to ask is why would you be interested in the Linux Kernel?
Most programmers are happy developing applications that make use of the Kernel and really don't want to meddle with its inner workings.
Part of the answer, and it's a big part, is simple curiosity. Knowing how an operating system works is a great eye opener to the world of systems programming and there are lots of ideas that have a more general applicability.
There are three other possibilities for why you might want to read this book. One is if you are taking or teaching an operating systems course, the second is that you are developing device drivers and need a background and the other is if you actually want to do some Kernel development. My guess is that this last reason is in the minority and most readers are either just curious or involved in a course.
This is a beginner's book in the sense that it really does start from the beginning and explain features of the Kernel as it goes along. By the end of Chapter 2 we have learned the history of Linux and looked at various development issues to the point were I was really wanting to get started on finding out.
The trouble is that the next two chapters describes process management and scheduling- there is some code but it is explanatory code. The point is that you don't actually get to develop any part of the Linux Kernel as part of the book.
Nowhere is there a section that says let's modify the scheduler or tinker with the filing system. This might be a bit ambitious but it is a reasonable assumption that a book called "Linux Kernel Development" might actually have some examples of development rather than just explanations and expository code.
The book continues on this way covering the standard topics - system calls, data structures, interrupts, synchronisation, timers, memory management, file systems, block I/O, address space, page cache, devices and modules, debugging and portability. All good stuff but still theory anchored in Linux-based examples.
You could take this theory and take it up to the next level and start to modify the Linux Kernel but this would take a lot of time and effort to even find the code you needed to modify.
Similarly the book talks its way around device drivers and where they fit in but it doesn't give you an example of actually creating or even modifying one. As a result the book is good for background reading for anyone interested in device drivers but you will need another one to get you started.
Don't misunderstand the criticisms - this is a really good book and one that I'm pleased to have on my bookshelf. It would make a really good part of any course on practical operating systems and system programming in general. It is also full of lots of helpful background information, historical wisdom and general knowledge - it also happens to be good fun to read if you are interested in the subject. You will however need some help in actually getting to grips with the Kernel - it's another step on the road.
Even so - highly recommended.