The 6.033 lab is an elective 6-credit add-on to 6.033 designed to provide hands-on experience with building computer systems. Three projects, each progressively more challenging, comprise the lab. The first is coding a simple Web server. This project introduces the tools you'll be using for the later projects. The second project involves designing and implementing a network protocol for remote procedure calls. The final project will be in the area of file systems, though the design will be very open ended. The lab will be run on Athena under UNIX and the programming will be done in C.
A word on terminology: we will refer to the unchanged 12-credit 6.033 subject as "6.033." The add-on lab will be called the "6.033 lab." We will use the word "system project" to refer to the projects in the 6.033 lab. The projects in 6.033 are called "design projects."
To take the lab, you must be enrolled in 6.033 this term. We require fluency in C or C++; this is not the right place to learn C. UNIX experience is useful but not required. In addition, you should have taken 6.170 so that you have a working understanding of how to construct large programs. Unlike the programming assignments associated with 6.001 or 6.034, you will be required to build the systems from scratch.
This lab is work intensive and should only be taken by those who really have the time and interest in the material. There are easier ways to earn six units. Also, you don't need to take the lab to do well in or get a lot out of 6.033.
If you don't understand what all the terms mean in this section, don't worry! We'll be covering them in class and in special recitation sections for the lab. Subsequent handouts will cover the assignments in much greater detail.
To cut your teeth on UNIX programming and refresh your C skills, the first project will be a simple web server, supporting only basic HTTP requests. We imagine this initial project will take about five hours, but we are giving you about two and a half weeks to complete it. There will be no papers to write for this project, but you must hand in the code for a functional web server.
In the second system project, you are to design and implement a reliable remote procedure call protocol over an unreliable network. Though we will specify the base set of semantics for the protocol, you will be free to choose an implementation and any additional semantics you wish to support. Early on, we will ask you to give us a preliminary design document including rationale for the design as well as an anticipated schedule. Then, after the implementation is done, you will hand in a second paper, describing the final design and implementation. This paper can be used instead of your design project 1 for 6.033.
The final system project will be a file system, though the design will be very much up to you. For example, the file system could include security, work across a network, or provide guarantees in case of sudden shutdown. You will get to choose what functionality you wish to support within the constraint of basic file system functionality. The last system project is designed to take five weeks for a team of two or three students to complete: one week for writing the initial design document, and four weeks to implement the design, evaluate it, and document it. The final design document for this project can be used to satisfy design project 2 for 6.033.
Every student enrolled in the lab should also be enrolled in 6.033. In addition to the 6.033 recitations, special recitations for the lab section will be scheduled for Friday from 2 to 3pm. You should already have this slot open for 6.033 and we will attempt to not conflict with any special events schedule for those Fridays.
6.033 has two design projects. For each design project you have to write up a paper. If you are enrolled in the lab, you can substitute the system project papers for papers on the design projects, a sweet deal.
We have made the due dates for the final design documents correspond to those for the 6.033 design projects. In addition, the final code for the second and third projects is due two days before to give you time to refine the design documents.
Simple Web Server Code due February 18 Remote Procedure Call Preliminary Design February 25 Code due March 18 Final Design Paper March 20 File System Preliminary Design April 8 Code due April 29 Final Design Paper May 1
Projects 2 and 3 are large, complicated projects, similar in scale to the fourth and final projects of 6.170. As such, you should start early on the coding (February 26th for the Remote Procedure Call and April 9th for the file system). If you start coding only one or two weeks before the due date, you will most probably be swamped with work. In addition, there are many aspects of the design which do not become clear until coding has begun. The earlier you begin to code, the more time you have to play with your design and come out with something truly excellent.
Successful completion of the 6.033 lab will earn you 6 credits and 6 Engineering Design Points.
Your lab grade will be composed as follows: lab grade = 1/6 P1 + 1/3 P2 + 1/2 P3.
The lab grades will reflect the correctness and creativity of the design as well as the correctness of the implementation. The clarity of your design documents will help us greatly in understanding your design. In addition, if you choose to substitute the system project papers for the design papers in 6.033, they will partially determine your 6.033 grade.
The first two projects must be done individually; the third project can be done in teams of two or three students. For the first two projects you are allowed to discuss the problem with other students, but we expect you to work out the project on your own (i.e., you should do the coding and writing of design documents on your own). Similarly, for the last system project, each team is responsible for its own code and documentation.
On the recitation preference sheet handed out during the first lecture, please mark that you are interested in the lab. We will try to fit as many people in as possible. However, enrollment may be limited because of scarce teaching resources. Please do not enroll in 6.906 until we have determined that we can accommodate you in the lab.
6.033 Lab Handout 1, issued 2/3/97