"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:
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 firstname.lastname@example.org 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: