Project Description
COP-5611 Operating Systems Design Principles

Table of Contents


Pick something that is larger than a programming homework, yet achievable in a few weeks before the end of the semester. It should be related to systems in some way, whether developing some systems code, creating or exploiting low-level interfaces, etc. Try getting your hands dirty system setup; don't just write an application in a high-level language. Any topics from the class are in scope, including, e.g., distributed systems, security, etc. If you have a personal project you are working on, that is okay as well, as long as you clearly delineate a portion to work on for the class, i.e., don't just take something you've already done. Try picking something you're curious about or interested in already. It may also be something academic, such as an in-depth study or literature review of a specific area of systems.

Final presentation guidelines

  • Suggested structure can follow the proposal
    • Motivate the problem, give the intuitive
    • State the goals
    • Briefly overview the technical aspects
    • Evaluate or show that the goals were achieved
  • Can have a recorded demo
  • Grading
    • You will be evaluated based on what you proposed, with an awareness that plans don't always work out
    • You won't be penalized if you have a good story around any changes in goals or results


  • Propose the project first by the proposal due date. Write what you want to achieve, rougly the technical steps, and how to measure achievement.
  • Prepare a brief (no more than 10 minute) presentation/demo of your project by the project due date.
  • Submit the project according to the syllabus.
  • Work on your own. Group projects possible in compelling cases.
  • Follow the rules about academic integrity

Sample project ideas

These are only suggestions and you may come up with your own.

  • kernel from scratch
  • write a shell
  • write a distributed application using low-level primitives
  • design an IoT device using a raspberry pi, e.g., automatic blinds that close when it detects sunlight
  • implement a memory allocator from scratch
  • use the nds for something (network interop, etc)
  • literature review on a particular topic (paper and presentation)
  • make a new linux kernel module
  • modify the linux kernel
  • do some kernel tracing
  • run a kernel fuzzer
  • explore library os
  • exposing hardware to higher-level software, e.g., usb thermometer, you want to write a OS driver, or raw mode I/O C application
  • adding a new syscall
  • bootloaders (EFI)
  • virtual machines
  • hack on low-level systems for mobile devices, handheld game consoles, etc
  • write simulators for some aspect of the kernel, scheduling, virtual memory, etc

Author: Paul Gazzillo

Created: 2021-04-09 Fri 15:40