6.828 Fall 2012: Final project

In the second half of the course you'll work on an operating systems project of your choice in teams of two or three. The goal is to have fun and explore more advanced O/S topics; you don't have to do novel research.

We'll grade you on how much you got working, how elegant your design is, how well you can explain it, and how interesting and creative your solution is. We do realize that time is limited, so we don't expect you to re-write Linux by the end of the semester. Try to make sure your goals are reasonable; perhaps set a minimum goal that's definitely achievable and a more ambitious goal if things go well.

Schedule and Deliverables

Submission repository

Since most of you will be working in groups for this lab assignment, you may want to use git to share your project code between group members. We have provided each group a shared repository on our submission server. After handing in your group proposal, you can access your group's shared repository with this URL: ssh://josgit@am.csail.mit.edu/project.git.

You will need to decide on whose source code you will use as a starting point for your group project. That group member should run the following commands to place his or her JOS (or xv6) source code into the group repository.

athena% cd ~/6.828/lab
athena% git remote add group ssh://josgit@am.csail.mit.edu/project.git
athena% git checkout -b project
Switched to a new branch 'project'
athena% git push -u group project
Counting objects: 4343, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3010/3010), done.
Writing objects: 100% (4343/4343), 11.65 MiB | 1.53 MiB/s, done.
Total 4343 (delta 1652), reused 3990 (delta 1329)
To ssh://josgit@am.csail.mit.edu/project.git
 * [new branch]      project -> project
 Branch project set up to track remote branch project from group.

The other members of your group can then checkouts the project from this shared group repository, as follows:
athena% git clone ssh://josgit@am.csail.mit.edu/project.git lab
Cloning into 'lab'...
remote: Counting objects: 4346, done.
remote: Compressing objects: 100% (2690/2690), done.
remote: Total 4346 (delta 1654), reused 4343 (delta 1652)
Receiving objects: 100% (4346/4346), 11.65 MiB | 2.68 MiB/s, done.
Resolving deltas: 100% (1654/1654), done.
warning: remote HEAD refers to nonexistent ref, unable to checkout.
athena% cd lab
athena% git checkout project
Branch project set up to track remote branch project from origin.
Switched to a new branch 'project'

At this point, all of your group members should be able to pull and push commits from the shared repository by running git pull and git push on the project branch, respectively. Pushing code to our repository is equivalent to submitting your project. As before, you can submit as many times as you want. We always take the latest submission before the project deadline.

Note that the shared project repository authenticate you using the same public key that you have used to submit your previous labs. If for some reason git clone, git pull or git push promote for a password, you can fix the problem by running make handin-prep in your JOS directory to update your public key with our submission server.

Keep in mind that git only tracks files that you have explicitly committed, so you may want to run git status periodically to see if there are any lingering files in your checkout that you haven't committed. You can use git add filename to tell git about files you would like to commit with the next git commit command. If there are files that you will never want to commit, and you want to prevent them from showing up in the output of git status, you should create a file named .gitignore and add the filenames that you'd like git status to ignore to that file, one per line.


Here's a list of ideas to get you started thinking -- but you should feel free to pursue your own ideas.