Lab X: Challenges

The goal of this lab is to have fun and explore more advanced systems topics. You have the following options:

  • Finish at least two challenge problems from labs 1–5. Some challenge problems are more challenging than others. Please start early.
  • Submit at least two patches to the Linux kernel (or any other open-source kernel). The patches must be accepted by the last day of class.
  • Work on a project of your choice that involves your JOS. It must be of the same scope as the above options or larger. See a list of suggested project ideas below.


  • Nov 13: submit a short proposal on what you plan to do for lab X.
  • Dec 11: demo in class - strongly encouraged.
  • Dec 14: submit your code and a short write-up; in the write-up, describe the problems/project and why you chose them, challenges you faced (if any), your solution, and anything interesting that you would like to share.

Project ideas

If you are doing your own project, 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.

Here’s a list of ideas to get you started thinking. Feel free to pursue your own ideas.

  • Make JOS run on ARM CPUs. It would be cool to run your JOS on a Raspberry Pi!
  • Make JOS run on x86-64 CPUs. This includes redoing the virtual memory system to use 4-level pages tables.
  • Rewrite JOS in Rust.
  • Build a virtual machine monitor that can run multiple JOS instances, using x86 virtualization support.
  • Implement virtio drivers in JOS. For example, you can then replace the SATA driver with virtio-blk, or implement a NIC driver using virtio-net.
  • Do something useful with Intel’s Software Guard Extensions (SGX), Trusted Execution Technology (TXT), or Transactional Synchronization Extensions (TSX).
  • Implement ideas (e.g., packet filter) from the papers on exokernel, proof-carrying code, or Jitk.
  • Use file system ideas from soft updates, journaling, copy-on-write, LFS, or another advanced file system.
  • A window system for JOS, including graphics driver and mouse.