This course will help you develop a relatively deep knowledge of the Linux/Unix userspace programming environment, and how a userspace process interacts with the operating system kernel. Topics covered include:
By the end of this course, you will have a better understanding of how various systems and systems-level tools - such as the shell, a cron service, a key-value server, and a chat server - are implemented at the programmatic level.
This course is programming-intensive: you will develop several projects that incorporate the above topics. You will primarily use the C programming language to implement these projects. Time-permitting, the course may also cover shell scripting and the Rust programming language.
Generally, we will use gradescope for project submissions, and Blackboard for the exam submission. We will also use Blackboard for any online discussions, for posting any lecture recordings, as well as for tracking grades. Otherwise, the course materials will be published via this website.
You are free to develop the projects using whatever setup you like. The official setup is of course the gradescope environment, which is a standard Ubuntu Linux 22.04 system. The projects themselves have very few dependencies, so any recent Linux distribution will likely suffice.
If you wish, you can develop your projects on the CS department's Linux lab, which allows for remote access. If you do not already have an account, please follow the instructions for requesting access.
The course textbook is:
Time-permitting, I will also include "crash courses" in shell scripting and the Rust programming language.
For shell scripting, I will reference:
For Rust, I will reference the official online book
If you need to brush up on C programming, the following books may be useful:
The course has six programming assignments and a final exam. The programming projects account for 70% of your grade, and the final exam the remaining 30%.
Each programming assignment is scored out of 100 points and carries equal weight. For undergraduates, I will count only your four best assignments, and for masters students, your five best assignments. If a student submits more than this required number, then the student's lowest scoring assignment(s) will be counted as extra credit at 50% of their value.
For instance, if an undergraduate submits five assignments with scores of:
and earns an 87 on the final exam, then the student's total final score is:
The final score for a master's student with the same set of scores would be:
Your final numeric grade will be mapped into a letter grade "on the curve." Generally, 90 and above is an A; 80 to 89.99 is a B, and so on. I will adjust this scale downward as necessary.
There are no project extensions: every project is due on its due date. If you received a score of less than 80 points on a project (or simply did not submit), and the project is autogradable (my intent is that all will be), then you can resubmit the project by 7am on December 13th to receive up to 80 points. In other words, even if a resubmission passes all of the unit tests, its final score is capped at 80. Resubmissions can also count as one of the "extra credit" projects.
Nearly every project will have extra credit points. I also plan to post one or two smaller assignments which are purely for extra credit toward projects.
While this is the initial grading plan, I reserve the right to adapt this plan throughout the semester to best meet the needs of the class.
William & Mary has a significant tradition in its honor code, stated below:
As a member of the William & Mary community, I pledge on my honor not to lie, cheat, or steal, either in my academic or personal life. I understand that such acts violate the Honor Code and undermine the community of trust, of which we are all stewards.
For this course, programming assignments must be completed on your own. The operative rule is that you may consult with your classmates on general issues about an assignment, but code remains private. You should neither show another your program source code, nor look at another's source code. Beyond that, you should adopt an "empty hands" attitude toward collaboration: talk about the project as you wish, but leave the conversation with nothing written.
There are three corollaries to this rule:
I reserve the right to use an automated service to screen project submissions for cases of code sharing.
I do not take attendance: attendance and classroom participation are not a component of your final grade.
William & Mary accommodates students with disabilities in accordance with federal laws and university policy. Any student who feels they may need an accommodation based on the impact of a learning, psychiatric, physical, or chronic health diagnosis should contact Student Accessibility Services staff at 757-221-2512 or at sas@wm.edu to determine if accommodations are warranted and to obtain an official letter of accommodation. For more information, please see www.wm.edu/sas.
As per the university's guidance, if you have a religious observance that conflicts with a deadline, please notify me as soon as possible so that I can attempt to make an appropriate adjustment.