Interview With Linux Guru Michael Kerrisk
Recently I had the pleasure of interviewing Michael Kerrisk, the author of The Linux Programming Interface. His book is the number-one-selling Linux programming book on Amazon getting 97% five star reviews.
You may have read some of Michael’s work before as he wrote a large portion of the man pages and is the maintainer of the man pages project. His own website can be found at man7.org
1) What is the most interesting aspect of Linux development for you?
I think it’s no surprise when I say that it’s the interface that the kernel provides to user-space. This is after all what enables us to do anything useful with a Linux system. Of course there are many other interesting technical areas, and I find the vast technical and social infrastructure that has grown with Linux pretty fascinating as well.
2) Do you have any recommendations for how to master Linux?
Practice, lots of practice, coupled with a lot of time. For my own personal learning, it’s always been incredibly useful to experiment with things as I learn. My journey with UNIX began by sitting down on a workstation with the man pages and the delightful first edition of Marc Rochkind’s Advanced UNIX Programming and writing many small C programs to try things out and build up my understanding. Descendants of some of those programs eventually ended up in my book.
3) At what point did you decide to write The Linux Programming Interface?
I first came up with the idea around 2001, and I was in part inspired to do so by previous careers where I’d taught UNIX system programming courses and developed course materials for those courses.
Back in 2001, there were only two real choices for books related to Linux system programming. The first was Richard Steven’s 1992 book, Advanced Programming in The UNIX Environment, which was (and is) a great book, but back then was a UNIX-generic book with no details about Linux. By quite some margin, the best of the then available Linux-specific books was the first (1998) edition of Eric Troan and Michael K. Johnson’s Linux Application Development. That book had a lot of good Linux-specific detail, but there were also many Linux-specific areas as well as some UNIX-generic areas that it did not cover. So there was obviously a gap in the market.
Initially, the idea was to write a rather smaller book, but it grew as I discovered more and more pieces to write about. The project might have been finished sooner, but was somewhat interrupted by various life events. By late 2006, the book was largely complete (modulo various reworking of the text and subsequent updates that were later required to cover features that appeared in subsequent kernel releases), but it was only in 2009 that I was able to make the time to complete the task of production with No Starch Press. That task–spanning phases such as copy-editing, typesetting, and proofing 1500 pages–turned out to be enormous in itself, and took well over a year, and it was the kind of sleep-deprived year I’m not in a hurry to repeat.
4) The book was published in 2010. What are the main changes in Linux during the past 6 years?
I actually try to maintain a public list of the changes, which you can find on the API changes page on my website. When it was published, my book was up to date with the then current versions of the Linux kernel (2.6.35) and glibc (2.12) and that web page attempts to track new interface features that are relevant to the subject area of the book. I’m often a release or two behind, but the list there is moderately complete with respect to developments over the last six years. I’ll leave the topic of what the major changes are until a bit later in this discussion.
5) Do you have a favorite distribution of Linux?
It changes over time, and I’m not sure I have a favorite as such. I’ve been happily using Fedora as my primary system for a few years now, but before that I used Ubuntu, and for many years before that, SUSE Linux.
6) You recently released a Chinese version of TLPI. What was the process like for getting the book translated?
To be more precise, the (two-volume) Traditional Chinese version of TLPI was just published, and in fact as I write this, a copy landed with me just two hours ago, courtesy of the translator, Aaron Ming Yi Liao (廖明沂). A Simplified Chinese translation was already published in 2014, adding to the earlier Korean and Japanese translations.
In fact, the process of translation has relatively little to do with me. The usual arrangement (and this arrangement was typical) is that a foreign-language publisher will sign a deal with my publisher No Starch Press to do a translation. There are book fairs (Frankfurt and so on), where publishers meet to discuss these sorts of deals, and publishers are, I gather, generally on the look out for books for which they believe a translation will be worthwhile.
Occasionally translators have asked me for clarification on a certain detail, but that’s been rare. A positive spin off is that various translators have sent me typo corrections, and on occasion technical corrections that I’ve incorporated into the errata for TLPI.
7) Are there plans for a second edition of the book? What do you plan to include the next time?
There are many topics that I’d like to include in a second edition which are absent from the first edition, either because the features were immature or didn’t exist in 2010. Among the major topics are control groups, namespaces, seccomp, and eBPF. I’ve already written about some of these topics in various articles published on LWN. It’s likely of course that there will be other completely new developments in the next few years that will warrant inclusion.
I’d also like to expand the coverage topics that are already in the first edition, notably capabilities, shared libraries, and possibly multithreaded programming and network programming. And there are various topics that I left out in the first edition for reasons of time and space; so I’ll give some consideration to covering topics such as the vDSO, netlink sockets, sysfs, eventfd, and ptrace.
Finally, many pieces of the existing text will probably see some reworking, since I have some ideas for improving the presentation of various topics, informed in part by the training courses that I’ve been running fairly frequently over the last few years.
It’s likely of course that a second edition will run to two volumes, since we were pretty much at the limits of what could be bound into a single volume for the first edition. It’ll be another big project, but easier than the first time round, I think.