Recently, I was approached by a member of No Starch Press to review their latest version of Systems Programming in Linux by Professor Weiss. This book is perhaps one of the fundamental or pivotal books anyone who is involved in Linux should read. It is quite a lot of information to get through and that is why I have chosen to break my review of the book into multiple parts.
Now before you read on, I want to make sure you know that I was given this book to review for free but No Starch Press had no say in my review, nor did they have any say in what I would say about this book. I’ll provide an overview of the first five chapters, since this book is quite extensive.
Chapter 1: Core Concepts
This chapter sets the stage: what does “system programming” actually mean, and why does Linux make it so interesting? Instead of thinking in terms of flashy GUIs or big frameworks, system programming is all about talking directly to the operating system. You learn how Linux separates user space from kernel space, how files and devices are unified under the “everything is a file” philosophy, and why system calls are the tiny trapdoors your programs use to ask the kernel for help. It’s essentially a tour of how Linux thinks, which turns out to be refreshingly simple once you see the patterns.
Chapter 2: Fundamentals of System Programming
Once you understand the big picture, you start exploring the toolkit. This chapter covers the nuts and bolts every system programmer lives by: how processes exist and execute, what actually happens when you call a function that wraps a system call, how memory inside a running program is arranged, and why error handling matters at this level. It also touches on essential tools like compilers, debuggers, and tracing utilities. Think of it as foundational training—getting comfortable with the command line, build tools, and the mechanics of how your code interacts with the OS.
Chapter 3: Times, Dates, and Locales
Timekeeping in Linux is a surprisingly deep rabbit hole, and this chapter is all about understanding how the operating system measures, represents, and formats it. You get introduced to the difference between real time and monotonic time (which is a lifesaver when you want accurate timing), how time zones and daylight savings complicate things, and how Linux stores and manipulates timestamps. The chapter also expands into locales—how programs adapt to cultural differences in numbers, dates, and character encoding. It’s a reminder that system programming isn’t just about bits and bytes; it’s also about building software that plays nicely with a global audience.
Chapter 4: Basic Concepts of File I/O
If Linux had a religion, it would be “Everything is a file.” This chapter shows you why that matters and how to take advantage of it. You explore the basic file system operations—opening files, reading from them, writing to them, closing them—and how these operations differ between low-level system calls and higher-level standard library functions. You also learn how file descriptors serve as the universal handles for interacting with everything from regular files to pipes and devices. It’s all about building fluency in the fundamental I/O patterns that most higher-level tools are based on.
Chapter 5: File I/O and Login Accounting
After you’re comfortable with basic file handling, this chapter digs into more specialized territory. First, it deepens your understanding of file I/O by explaining additional flags, permissions, and behaviors that let you control how data moves between your program and the system. Then it shifts gears into login accounting—a uniquely Unixy concept. Linux keeps track of user sessions in a series of structured files, which system utilities use to show who’s logged in, when they logged in, and how the system is being used. You get a peek into how system monitoring tools get their information and why these tracking files matter for security and auditing.
So, that should give you an idea of what to expect from just the beginning of this book. While most guides you may find online only give cursory overviews this book gives in-depth explanations as to what is going on behind the scenes. That is why it should be on any enthusiasts bookshelf and it should be a part of your library if you have any role in using Linux in your day to day life or are just curious as to what is going on.
My first impressions of this book are quite good. I did learn quite a few things and some items that were a bit confusing about Linux to me were clarified. Clearly, the multiple decades of experience this author has in teaching the subject shows and I look forward to continue to review this book and gain a much deeper understanding of the subject.