The course is designed to introduce students to system-level software development. The lecture-component is designed to present students with a software developer's view of operating system services, including those that expose features such as process, memory, file, and communication management and concurrency control. The course will also explore system services outside of the operating system, including mechanisms for dynamic and static linking and loading. The lab component will provide students with a practicum-like experience developing real-world system software. Over the course of the semester, students will develop software utilities for practical tasks such as process accounting and management, process suspension, recovery, and migration, execution tracing, and file-system recovery, as well as software development aids such as tools to manipulate and trace process execution and dynamic library calls.