Inspiration
Our team was unable to decide on a project. None of us like app dev or web dev, so we all planned on doing something with hardware.
Since all of us knew C and we wanted to do something crazy, we agreed to build an operating system.
What it does
An operating system is a difficult project that takes significantly more than 24 hours to complete. In this timestamp, we established the following:
- A build system. GNU make is not well suited for this project, so we had to write our own from scratch using shell script for maximum portability.
- VGA driver. This requires computations to perform scrolling and must keep indeces used in track.
While our accomplishments are not numerous, we do have a work in progress for the following:
- stdlib. We believe porting the C89 standard library is essential to the use of this operating system. It should have good compatibility with software that works on other unix-like OSes.
- Memory management. We decided to build a 16 KB pager that is essentially an array inside a linked list. This is the most efficient way to hold references to memory.
- Process manangement. It is important for any OS to have concurrency. A process run queue is currently being written.
- File system driver. Our team understands how to do this conceptually but are bogged down by bugs in memory and process management which will prevent us from fully realizing the file system driver in time.
How we built it
The use of the TCNJ classrooms was highly beneficial to us. Since most of us had little to no knowledge of OS dev prior to this hackathon, it was beneficial to use the chalkboard and the projector to teach how registers, the assembly language, and the process of an operating system should work. Riley is the only one who was fully equipped with the knowledge necessary to carry on this project before the hackathon.
Challenges we ran into
The build system was very buggy and required us to waste several hours on trying to make the recursive Makefile building system work. We decided quickly to replace it with a simple shell script for peace of mind.
The VGA driver required us to perform scrolling. This required extensive code testing and the output was very confusing. There was no way to check the value of variables at certain times because there is no way to output it. We had to test it line by line in a multitude of different scenarios to fix each bug at a time, repeating this process for several hours.
Memory management requires us to build a reference table as well as seperate program and kernel memory. It is very difficult and requires proper separation which is easier in 32-bit mode. However, this is still a big work in progress.
Accomplishments that we're proud of
While this project is largely unfinished, we are proud of the fact that we were able to run a kernel in qemu at all. We had barely any understanding at the beginning of this project and we are learning as we go through the project which is one of the reasons our project was developed so slowly within these 24 hours. We made a lot of mistakes, a lot of broken commits, and could not even build the kernel image for the longest time. But, we made it work in the end and we are excited to continue working on it in the future and presenting a proper, finished operating system one day.
What we learned
We gained a much stronger conceptual understanding of kernel development. We established what a kernel is supposed to do even before it can load a shell to the user and have a strong understanding of the algorithmic programming involved in even simple functions like vga_write() due to scrolling.
What's next for omOS
omOS is going to finish its memory management unit, write a process scheduler, a filesystem driver that will include FAT16 and FAT32 before implementing any major filesystems. We will write our own filesystem. Then, once the shell is loaded, there will be a user management system and from there we can begin to work on cryptography so that we can connect to ethernet. However, this portion of the project will take at the minimum several months. It's a big project, and not exactly designed for a hackathon.

Log in or sign up for Devpost to join the conversation.