CS644, fall 2025
The fall 2025 edition of CS644: Intro to Systems Programming, taught at FractalU in New York City.
CS644 is an introduction to systems programming via the Linux system interface. It covers the foundational operations and concepts that all Linux software is built on top of, including files, processes, IPC, networking, multithreading, and signals.
Schedule
Week | Date | Topic |
---|---|---|
Week 1 | 9/2 | Course introduction |
Week 2 | 9/9 | Filesystems, part 1 |
Week 3 | 9/16 | Filesystems, part 2 |
Week 4 | 9/23 | Process control |
Week 5 | 9/30 | Interprocess communication |
Week 6 | 10/7 | Networking |
Week 7 | 10/14 | Multithreading |
Week 8 | 10/21 | Signals |
Week 9 | 10/28 | Advanced I/O |
Week 10 | 11/4 | Review and demos |
Course philosophy
CS644 heavily emphasizes the empirical approach: when we want to answer a question about how the system behaves, we write a program that demonstrates the behavior.
Linux has great documentation and you can usually get the answer that you need just by reading the man
pages. But:
- The act of formulating a hypothesis and devising an experiment to test it gives you a much more durable and nuanced understanding of the system, than just reading the answer from the man pages.
- Not all software is so well-documented, so it's useful to have the empirical approach in your toolbox.
Homework exercises
Each homework exercise has a rating in stars. One star means you should be able to answer it solely by reading the course materials. Two stars means you will have to do some outside work (e.g., writing code), but it shouldn't take more than 30 minutes. Three star exercises are more open-ended and challenging.
I recommend completing all one-star exercises, as many two-star exercises as you can, and trying one or two three-star exercises per week that strike your fancy.
Each week, we review the homework solutions in class, and they are posted to the course site afterwards.
Final project
Throughout the course, you will work on a capstone project, a key-value server, that ties together all the topics we cover in lecture. Each week there will be a core milestone to reach, but also many opportunities for you to customize your project.
You can also choose to work on your own idea. But please check with me first (no later than week 3).
Languages
Lecture examples will be in C, but you may use another language to complete the homework exercises and final project. The only requirement is that it exposes the low-level Linux APIs that the coursework requires.
Recommended languages:
- Python – using the
os
andsignal
modules - Rust – using the
nix
crate - C – using the glibc system call interface
Other languages:
Languages you can't use:
- JavaScript – Node.js lacks low-level Linux bindings
If your favorite language is not listed, check with me.
The shared server
We have a shared Linux cloud server running Ubuntu 24.01 for our coursework. If you are enrolled in the course, I will email you log-in instructions before the first class.
Guidelines
- Be fearless, but don't try to deliberately circumvent permissions.
- Don't put anything secret on the server (e.g., passwords, API keys).
- Don't use the server for anything not related to the course.
- The server will be shut down at the end of the semester.
Installed software
- Standard Linux development tools (
gcc
,ld
, etc.) - Python 3.12
- Rust 1.89
- Neovim
- Miscellaneous utilities (
bat
,rg
,fd
,tldr
,fzf
)
If there is anything else you would like installed, let me know.
Remote development
Both standard Vim and Neovim are installed on the server, if you'd like to do everything on the command line.
If you want to use VS Code running on your laptop, follow these steps to set up remote development.
Sharing files
Your home directory is private. If you want to share a file with your classmates, you can put it in /home/shared/$USER
(note that everyone else has both read and write access).
Collaboration
You are encouraged to collaborate on homework exercises and the final project.
LLM use
How you use LLMs for the course is up to you. I only ask that you keep the course philosophy in mind, and be mindful of whether LLMs are aiding your learning, or substituting for it.
Source code
Source code for the course is available at https://github.com/iafisher/cs644.