The objective of this course is to study existing approaches for building an OS kernel. We aim to discuss monolithic kernels, lightweight kernels, embedded OS, distributed OS, etc. We will discuss the pros and cons of each of these design decisions. We will see how modern languages play a crucial role in designing the end to end software stack. Students are expected to read research papers before the class discussions.