Smallsh is considered one of the more notorious projects in the OSU CS program- but it was actually really rewarding to implement (in my opinion). It involved writing a useable shell from scratch in C. From the project description the shell must: provide a command prompt, handle blank lines and comments properly, provide variable expansion, allow users execute various commands, support input/output redirection, support foreground/background processes, and support handling of SIGINT and SIGSTP. It was a good way to get familiarized with the UNIX process API, and was very powerful in understanding just how a shell works.
This was a solo project for class. All requirements were laid out and we were given a test script to run our program against. The goal of this project was not necessarily to write completely unique code but instead to foster a deeper understanding and get a handle of the Unix API for implementation. I ended up getting full marks on the code despite my signal handler for SIGINT having strange behavior. Check out the repository linked below to see my full implementation of the program.
While this assignment was admittedly, a lot of work, it definitely deepened my understanding of the materials covered in OS I. My favorite part of the assignment was dealing with process spawning. While I admittedly haven't worked with implementing anything in the UNIX API in awhile (other than socket programming), the concepts covered by smallsh and the OS I class as a whole still remain very important.