3 book recommendations : Linux development
Hello again! Let’s have a break, shall we? Let’s forget about the technical stuff for a while… In this article, I’ll present to you a few books I’ve enjoyed in my field, hoping you’ll find them just as interesting. If I find time enough time, I’ll try to publish several articles of this kind, when I find books worth mentioning. Anyway, ready? Here we go!
The Art of UNIX Programming – Eric S. Raymond
Now, if I had to pick one book and one book only, it’d be this one for sure. Now, you’ve probably seen it already, but in the right column of this blog, there’s a little quote section, a random line. Many of them begin with “Rule of…”, well these are all coming from this book, they are the rules of UNIX philosophy according to Eric S. Raymond.
Let’s be clear: this book isn’t technical, or at least, not much. The first chapters are mostly about the history of UNIX, Linux and BSD systems, their various versions, the POSIX standards, … You’ll find a lot of information regarding the creation of the C language and API, as well as key principles to UNIX development (including Raymond’s rules). The main contents, however, aims to define a few rules and principles that every UNIX programmer should follow. The second chapter for instance, Design, deals with programs modularity, textuality and transparency. You’ll get a particularly good insight of minilanguages, configuration design, multiprogramming, interfaces, optimisation, … The last section of this chapter covers complexity in UNIX programs.
The third chapter, Implementation, gives a quick overview of many languages such as C, C++, Shell, Perl, Tcl, Pythin, Java, … You’ll also find a section dedicated to text editors (where I learnt how to stop worrying and love Emacs), and another one dealing other development tools (make, VCS, runtime debugging, …)
The last chapters cover the ideas of community and documentation, which are far too developed for me to sum up in this article. Absolutely everything is good in that book, and I enjoyed reading it from start to finish.
Advanced UNIX Programming – Warren W. Gay
Now you want your technical stuff back? Here it is! That book is a huge reference when it comes to UNIX system programming (in C/C++). When I’m developing for UNIX systems, this book has to be close to me.
In 600 pages, no less, you’ll go through:
- Introduction to compiler options, behaviour and standards (FreeBSD, HPUX, AIX, SunOS).
- Organisation and manipulation of the UNIX filesystem components (files and directories, permissions, first approach of UNIX file-related I/O)
- Error handling using the old and the new errno mechanisms.
- Deeper presentation of UNIX I/O routines : reading, writing, truncating, searching, syncing, scattered read & write, …).
- UNIX file locking, including the POSIX approach.
- File management routines : removing, linking, moving, properties management, permissions, ownership, names FIFOs…
- Introduction to DBM/NDBM, the UNIX database management system.
- Directory management routines : working directory, making, removing, opening, closing, searching, scanning, …
- Temporary files management, the book covers most methods and their evolution through time. Also covered : exit cleanups with atexit and C++ destructions ; the _exit routine.
- UNIX command-line processing : options, arguments and their identification, GNU long options.
- Conversion functions : mostly strings and numbers (int, double, float) routines.
- UNIX date and time : timezones, time conversions, date customisation, the effect of locales, …
- User, password and group management : understanding root, notions of real, effective and saved user ID…
- Static and shared libraries development, introduction to the UNIX dynamic library loading mechanism.
- Efficient I/O scheduling, events and timers.
- UNIX pipes and processes, inter-process communication mechanisms (IPC) : pies, message queues, shared memory, semaphores.
- Pattern matching and regular expressions.
- Memory-mapped files.
- X-Window programming.
Now, there no way I could describe how complete this book is, so the only advice I can give you is: get a copy. Right. Now. A word of advice though: this book is meant for C/C++ programmers, not for programming beginners. It will require a rather good knowledge of the C language (C++ is a plus, no pun intended, as some examples are written in C++).
The Linux Development Platform – Rafeeq Ur Rehman
Well, the two previous ones are my favourites, so this one is going to taste a little bland… Still, it is an excellent book for those interested in using Linux as an IDE.
This book will introduce you to a bunch of developer tools such as editors (Emacs, Jed, Vim), compilers, assemblers, GNU make, the GNU debugger, CVS, … You’ll also be introduced to indent, sed, diff, cscope, cbrowser, cproto, ltrace, strace, … and a lot of other GNU binaries.
The first chapter provide an introduction to software development in general: software life cycles, selecting hardware platforms, projeect management, Linux development standards, …
Chapters 2 to 6 respectively present: editors, compilers/assemblers, GNU make, GDB and CVS. I particularly liked the chapter concerning make and GDB, they are pretty detailed. The chapter concerning CVS is however outdated, but well, the book dates back to 2003 so that’s pretty normal.
Chapter 7 introduces you to various binaries and tools that can turn out to be bloody handy. Chapter 8 and 9 deal with cross-platform development, with a focus on Java in chapter 9. The books ends with an appendix regarding the hardware requirements for a basic Linux development workstation. I haven’t read that one with caution though, so I couldn’t comment on it.
Anyway, that’s it for my first book recommendations. If you’d like to suggest a book, please don’t hesitate to leave a reply!