Computer Sciences Dept.

CS739 Spring 2009: Distributed Systems

Instructor: Andrea C. Arpaci-Dusseau
When: TR 2:30 - 3:45
Where: 1289 CS
Office: 7375 CS
Mailing list archive



Welcome to the graduate Distributed Systems class. In this course, we read classic papers on distributed systems as well as more recent research papers published in places like SOSP and OSDI. From our reading, you will learn about the fundamental principles behind such systems used to build scalable distributed services like Google. We will also be experimenting with Erlang, a programming language for highly parallel, distributed, fault-tolerant systems.

The work in this course will have two components: reading papers and programming in Erlang.


For reading papers, you will have three responsibilities: writing a short essay to answer a discussion question for each paper, participating in the discussion of each paper in class, and a short midterm and final exam.

Our reading focuses on the distributed system knowledge that is needed to build scalable, fault-tolerant services. We will be mostly reading recent papers from the two top systems conferences: Symposium on Operating Systems Principles (SOSP) and Operating Systems Design and Implementation (OSDI). We will also read a few of the most classic distributed system papers to fill in some necessary background.

The complete list of papers is available here

These papers assume that you already know the relevant background in the operating systems literature. Therefore, I expect that you have already taken CS736 (Graduate Operating Systems) before taking this course; if you have not, then please see me on the first day of class.

  1. Paper Write-ups: To help make our discussions more interesting, you are expected to read each paper before class. To ensure this, before each class you must e-mail me a short write-up that addresses the question for that paper. The question for each paper is listed here. Your write-up should be approximately three paragraphs. Your e-mail should be in plain text (no attachments) and the subject should be "739: [keyword for paper]" where [keyword for paper] is the one word I used in the Lecture Schedule.
  2. In-class Discussion: The format of most classes is very loosely structured around a list of questions for each paper. I expect that everyone in the class will participate each and every day. In case you want to prepare for the questions, I'll try to make them available ahead of time; but, you really shouldn't need to look at them if you don't want to. The exception to this format is when we are discussing a more "theoretical" paper; in this case, I'll present a more formal lecture with power point slides.
  3. Exams: We'll have an in-class midterm and final exam. The exams should be straight-forward.


This semester, we as a class will be learning Erlang. Erlang is a functional programming language that lets you build highly distributed fault-tolerant programs. Many different domains are leveraging Erlang recently, from Facebook to Amazon.

Throughout most of the semester, we will have straight-forward programming assignments so that everyone masters the basics. Then, for a final project, everyone will develop and evaluate some new Erlang application of your choice.

I assume that everyone will buy the book Programming Erlang: Software for a Concurrent World by Joe Armstrong, from The Pragmatics Programmers series. It is available from Amazon for about $25.

Erlang is now installed on the Linux machines in the department. See /s/erlang for everything you need. Interested in reading more for thinking about projects? Then you might like the following links.

Computer Sciences | UW Home