Classic UNIX Programming Text Updated
Interview with Steve Rago, Co-author of Advanced Programming in the UNIX Environment

Ibrahim Haddad
Tuesday, July 5, 2005 12:18:35 PM
After 13 years, Addison-Wesley has published an update to a classic
UNIX System programming text: Advanced Programming in the UNIX
Environment. After the death of the original author, Rich Stevens,
in 1999, it was difficult to find someone to tackle a project this
big. We recently caught up with the co-author, Steve Rago, to get
a behind-the-scenes look at this project.
Steve, you were one of the developers of UNIX System V Release 4.
Can you tell us more about your background and contributions and
how you became the co-author of the second edition of one of the
most popular UNIX books?
After getting a BE and MS from Stevens Institute of Technology, I
got a job working in the UNIX System V Development Laboratory at
AT&T Bell Labs. I had wanted to work at Bell Labs, where my father
worked, since I was 12 years old. Ironically, a year after joining
Bell Labs, AT&T reorganized us into a different business unit, so we
weren't Bell Labs anymore. I started out working on System V Release
2.0, helping to maintain and benchmark the VAX port. Eventually, I
worked on networking software, which led me to STREAMS. After most
of the original STREAMS developers completed the port of Dennis Ritchie's
streams to System V Release 3, I ended up taking over responsibility for
it somewhere between SVR3.1 and SVR3.2. During SVR4 development, I
enhanced the STREAMS mechanism, converted the open file table to use
dynamically-allocated memory (thus removing the historic NOFILE limit
to a UNIX process's open files), moved the poll(2) system call under
the vnode framework, and did a lot of general clean-up work in the kernel.
I spent 7 years at AT&T, then left for a small start-up company just
before AT&T created USL. I worked on file systems, writing one that
transparently compressed and uncompressed files on the fly, and another
that sped up system throughput and used an intent log for fast recovery.
These were eventually ported to the SCO OpenServer V UNIX System. Then
I developed stackable file systems for commercial UNIX systems. The
file system business evolved into a file server business, and then the
company was bought by EMC, where I still work as a manager of one of the
file system groups. In total, I have about 20 years of UNIX programming
experience, both kernel-level and user-level.
Since I was involved in the review of the first edition of APUE,
Addison-Wesley contacted me for suggestions for candidates to update the
book. I wanted the book to be updated properly, the way Rich would have
wanted, and to honor his memory, so I volunteered for the project.
Why did you update APUE and how does the second edition of APUE
differ from the first edition? Where did you have the most changes?
Rich's book is a classic, but the world has changed a lot since it
was first published in 1992. Standards have evolved, UNIX system
implementations have come and gone, and technology has advanced
significantly. I added a chapter on sockets, two chapters on threads,
and totally rewrote the chapter on communicating with a printer to
reflect the technological advancement from a serial PostScript printer
to a network-attached PostScript printer. I removed the chapter that
dealt with modem communication, but I made it available on the book's Web site. Other than the printer chapter,
Chapter 2 shows the most change. It deals with standards, and these
have changed significantly over the past 13 years. One other major
change is that I shifted the implementation focus from 4.3+BSD and
SVR4 to more contemporary platforms: FreeBSD 5.2.1, Linux 2.4.22,
Mac OS X 10.3, and Solaris 9. (The source code for the examples is
also available on the book's Web site.)
Next: Updating a Classic »