This is a graduate course on systems software and formal methods. The increasing complexity and scale of software systems has led to significant challenges for their reliability, performance, manageability, and security. Examples of such systems include entire operating systems, file systems, databases, networks, distributed systems, device drivers, and so on. The goal of this course is to become familiar with techniques and tools for specifying systems and proving correct systems implementations. After a few introductory lectures, students will be presenting recent research papers on provably correct systems. Students are also expected to design and execute a significant project and writing a draft paper on their project.
Lectures take place on Mondays and Wednesdays 2:55-4:10 in Hollister 206.