home blog portfolio Ian Fisher

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:

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:

Other languages:

Languages you can't use:

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

Installed software

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.