Seanix

Seanix Kernel Development

Seanix is aiming to be a Unix-like microkernel. I'm mostly making it for my own learning purposes, but I also have some small hope that it will become something bigger.

Design Choices

Right now, it's mostly monolithic, but it only has some very basic stuff implemented, such as a write system call and an sbrk system call. Even then, write just outputs to the serial port. Beyond that, I'm hoping the kernel can remain as a memory manager and scheduler for other tasks, such as a networking system daemon and filesystem daemons ad hoc.

Eventually, I would like to write modules and drivers in Rust with the main core remaining in C. Modules should be written in such a way that they run similar to a process, except in the kernel scheduler, rather than the user scheduler. Modules should also have the availability for hooks to be called by the kernel.

Seanix only currently loads a single, statically linked ELF binary at /bin/init. This binary could be anything, as long as it only attempts system calls that have been implemented, and does so correctly. The kernel does not put the CPU into Ring 3. At least, not yet. This probably won't be done for a while, just to make sure that everything else works in kernel space first.

Future and Next Steps

Next steps involve getting more system calls and tests for them. I would also like to rewrite some portions in Rust for the added memory safety. From there, I need to also make or port some form of userspace, particularly a C library complete enough to run a barebones GCC and binutils.

Performance

The performance of Seanix as is, is kinda not good. Memory allocation methods are extremely non-performant, and that makes the sbrk really slow. There are various other reasons for performance to not be good as well, such as the serial port logging that is still enabled. When disabled, it makes the kernel significantly faster.