CSE 522S: Course Projects

"Everything changes and nothing stands still."

— Heraclitus of Ephesus (as quoted by Plato in Cratylus)

The course project gives a team of two or three students an opportunity to propose and complete their own significant modification to the Linux kernel. This might be an entirely new capability or it might be an alteration or extension to some existing functionality. The team will evaluate the effectiveness of their modification by developing their own test cases and user and/or kernel test code that can successfully demonstrate and evaluate the new behavior. Students are encouraged to look to their own interests and/or research projects for inspiration, and we will also suggest some possible options.

In either case, each team of students must justify their intended approach in a written proposal document, in order to ensure that the scope of the project is achieveable and meaningful. The proposal document must:

  1. propose a modification,
  2. clearly explain the purpose of the modification,
  3. identify kernel files that will need to be changed,
  4. identify kernel data structures that will need to be changed,
  5. identify kernel control paths and/or other features that will need to be changed,
  6. propose a set of tests and/or experiments that can demonstrate the modification and evaluate its effectiveness and/or correctness, and
  7. include a five-week planned schedule for the project.

When you are finished writing-up your proposal document, please e-mail it to eng-cse522@email.wustl.edu with the phrase Project Proposal in the subject line.

The project itself will be graded in part based on a 15-20 minute presentation at the end of the semester, as well as based on submitted code and documentation. This presentation should explain the modification to the class; describe the final alterations to kernel files, data structures, concepts that the students enacted; present timing graphs or other data to verify the behavior of the modified system; and may include a short demo (if possible within the allotted time).

As you work on your course project, please take notes regarding (1) what did or did not work out from your original proposal, and how your approach evolved as you worked on the project; (2) what techniques from other labs and studios in the course were relevant to your approach, and how you applied them in your project; (3) how successful your approach was in achieving the goals you had originally proposed; and (4) how (and why) you conducted evaluations of your solution (e.g., using tracing and other means to collect empirical evidence of it's strengths and limitations, and what hypotheses were tested in those evaluations).

When you are finished with your project, please write-up a cohesive report (see next) and e-mail it along with your code files, Makefile, etc. to eng-cse522@email.wustl.edu with the phrase Course Project in the subject line.

The course projects will continue to build on the style of reporting that was required in the second lab assignment. In addition to submitting a cohesive report that unifies your observations and thoughts, you will also give a project presentation to the entire course that (1) gives an overview of the goals of your project, (2) explains core technical challenges that were encountered in your project, (3) describes your approach in detail (including the files, data structures, functions, and other artifacts that were created, modified, or leveraged in your solution), (4) motivates and describes how you evaluated your solution, and (5) presents results of those evaluations (along with an assessment of how effective your solution was based on them).

Note: while the kernel-level modifications should be done in C, user-level code may be written in any language of your choosing as long as we can successfully follow your instructions for how to build and reproduce your evaluations of your solution on our Raspberry Pi 3 machines.

What to turn in: (1) all the code and compilation files used to implement and run your solution (including a Makefile if you used one, etc.); (2) a readme.txt file with the contents described next, and (3) other files (e.g., with screen-shots from Kernelshark) that enhance your report.

The first section of your readme.txt file should include:

  1. The name and number of the lab.
  2. The name and email address of everyone who worked together on this lab.
  3. Attribution of sources for any materials that were used in (or strongly influenced) your solution.
  4. Design decisions you made in creating your solution (and their rationale), including your rationale for using the programming language(s) you chose and for how you structured your code.
  5. A cohesive and thorough writeup of your project that discusses and explains:
  6. Any insights or questions you may have had while completing this assignment.
  7. Any suggestions you have for how to improve the assignment itself.
  8. The amount of time you spent on this assignment.
The second section of your readme.txt file should include detailed instructions for how to:
  1. unzip or otherwise unpack your files,
  2. build your programs (including on which machines to do that), and
  3. run your programs on the Raspberry Pi 3 (including detailed instructions for how to perform all of the evaluations you used to evaluate your solution - if you would like to provide script files to run your tests, please make sure you say in which shell or shells to run them, or any other details that are needed in order for them to run successfully and correctly).