pete > courses > Systems Programming (CSCI 0315), Fall 2023

Systems Programming (CSCI 0315), Fall 2023

Who Peter C. Johnson (pete@midd)
Where/When lecture: Tuesdays and Thursdays, 11:15am–12:30pm in SHS 224
lab: Thursdays, 2:05pm–4:15pm in SHS 224
Textbook none
Drop-In Help schedule here


12 Sep introduction, overview, and architecture review
Assignment 0 available
14 Sep C review, basic Linux usage, program design
lab: make and git
Assignment 1 available
19 Sep git with a partner; intro to syscalls
21 Sep odds and ends; basic linking
lab: .gitignore and make variables
Assignment 2 available
26 Sep no class: plague
28 Sep pointers
lab: git merging
03 Oct memory bugs
05 Oct malloc
Assignment 3 available
10 Oct binary organization
12 Oct linking in depth
Assignment 4 available
17 Oct mmap
19 Oct fork, exec, and wait
Assignment 5 available
24 Oct permissions, ownership, and sudo
26 Oct signals
31 Oct threads
Assignment 6 available
02 Nov synchronization
07 Nov networking concepts
09 Nov networking API
Assignment 7 available
14 Nov HTTP
project available
16 Nov workshop
28 Nov workshop
30 Nov workshop
05 Dec workshop & surveys: CRFs and CERP
07 Dec workshop & surveys: CRFs and CERP
11 Dec office hours: 11am–1pm, 3pm–4pm
13 Dec office hours: 11am–1:30pm, 3pm–5pm
14 Dec office hours: 11am–3pm
15 Dec office hours: 11am–1:30pm, 3pm–5pm
16 Dec office hours: 1pm–5pm
17 Dec office hours: 11am–4pm
18 Dec office hours: 10am–12pm


There will be seven assignments throughout the semester, each with their own list of requirements. No new work will be assigned after Thanksgiving break.

There will also be a final project.

There will be no exams.


All coursework (assignments and final project) may be completed in groups of two. Partnerships are not required, but they are strongly encouraged: working with someone else forces you to explain your ideas, which deepens your understanding; it forces you to come to grips with somebody else’s understanding, which may reveal weak aspects of your own; it gives you somebody to bounce ideas off of; it lightens the per-person workload; it lightens the grading burden. Okay, that last one is more for my benefit than for yours, but you get the idea.

Partnerships are not binding for the duration of the semester. That said, changing things up midway through may be a pain, so please keep that in mind.


Each assignment will contain a list of requirements. You will keep working on it until all requirements are met. I will provide weekly-ish feedback on all outstanding assignments. Assignments have no official deadline except the end of the semester. Your semester grade will be determined by how many assignments you complete.

To earn a C, you must complete 4 of the 8 assignments.

To earn a B, you must complete 5 of the 8 assignments.

To earn an A, you must complete 6 of the 8 assignments. Those 6 must include assignments 1, 2, 3, and 5.

In the above calculation, the final project is counted as an assignment. (Yes, this implies that the final project is, strictly speaking, optional.)

Final revisions of all coursework must be submitted by 12pm (noon) EST on Monday, 18 December. There will be no flexibility with this deadline.


There is no required textbook. Where pertinent, I will make suggestions for readings (both online and dead-tree).

Here are resources I’ve written that might be useful:

The best reference for using git is this online book. I have also found this description of its internals very useful to understand the common foundation of all the commands, which can seem inscrutable and/or magical without that understanding.

These are a couple classic references in this area:

The C Programming Language, Brian Kernighan and Dennis Ritchie – The original C book, written by the authors of the language. Covers ANSI C, which is (at this point) a bit of an antiquated standard, but it hits all the important parts. Both I and the school library have copies you can refer to.

Advanced Programming in the UNIX Environment, W. Richard Stevens – A massive overview of the POSIX system call interface. Unfortunately, the school doesn’t have a copy, but I do, which you are welcome to peruse. Your primary reference on this topic should, however, be the manpages.


VPN: If you want to access weathertop from off-campus (for ssh and for git), you need VPN access. Instructions here.

Academic Integrity

All work submitted in this course must be your own and no-one else’s. You are permitted to search for assistance online, but a) you may not search for solutions to entire assignments (confine your searches to individual concepts) and b) you must record which online resources you consult in each assignment’s README file. Under no circumstances may you copy or transcribe code that you didn’t write originally. When in doubt, ask me.

Use of generative AI tools (such as ChatGPT) is prohibited. If I determine that you have used such tools on an assignment, you will receive no credit for and will be ineligible to submit future solutions for that assignment. This is an elective about writing code. If you don’t want to write code, take another class.

Mask Policy

In SHS 224, during class and lab, masks are optional. If you feel gross, don’t come. (Detailed notes will be posted for catching up; Zoom is not an option.) If you recently felt gross, come wearing a mask.

In my office, for the forseeable future, masks are required. This applies both to office hours and to any lecture/lab time that entails meeting in my office.


Students who have Letters of Accommodation in this class are encouraged to contact me as early in the semester as possible to ensure that such accommodations are implemented in a timely fashion. For those without Letters of Accommodation, assistance is available to eligible students through the Disability Resource Center (DRC). Please contact ADA Coordinators Jodi Litchfield, Peter Ploegman, and Deirdre Kelly of the DRC at for more information. All discussions will remain confidential.

Last modified: