CS644, spring 2025
The spring 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 basic operations and concepts that all Linux software is built on top of, including files, processes, IPC, networking, multithreading, and signals.
Schedule
Solutions to each week's homework will be posted following the next week's class.
Week | Date | Topic |
---|---|---|
Week 1 | 2/18 | Course introduction |
Week 2 | 2/25 | Filesystems, part 1 |
Week 3 | 3/4 | Filesystems, part 2 |
Week 4 | 3/11 | Process control |
Week 5 | 3/18 | Interprocess communication |
Week 6 | 3/25 | Networking |
Week 7 | 4/1 | Multithreading |
Week 8 | 4/8 | Signals |
Week 9 | 4/15 | Advanced I/O |
Week 10 | 4/22 | Review |
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 a couple three-star exercises per week that strike your fancy.
Final project
Throughout the course, you will work on a capstone project 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.
- Option 1: A database server. Heavier on filesystem APIs.
- Option 2: An HTTP web server. Heavier on networking APIs.
- Option 3: Your own idea! But check with me first (no later than week 3).
Languages
Lecture examples will be in C. You may use any language you wish to complete the homework exercises and final project.
Languages you can definitely use:
- C – using the glibc system call interface
- Python – using the
os
andsignal
modules - Rust – using the
nix
crate - Go – using the
os
package - Zig – using the
os.linux
namespace
Languages you definitely can't use:
- JavaScript – Node.js lacks the low-level Linux bindings we need
If your favorite language is not on either list, 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 emailed you log-in instructions.
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.84
- Neovim
- Zsh (set-up instructions)
- 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 welcome and encouraged to collaborate on homework exercises. I recommend doing your own final project, though.
Source code
Source code for the course is available at https://github.com/iafisher/cs644.