New Years resolution
Posted: Fri Jan 01, 2021 9:11 am
At some point in 2021, I will make a release of my OS.
It's coming along slowly, I have basic user mode with a tiny subset of Linux system calls (enough to run a very simple shell).
What I need really before it's fit for external consumption/scrutiny:
I started this project around new year 2015, having had an interest in OSes since university (some 20 years previously.) It's great putting theory into practice, and 6 years on, I'm still not bored.
I love OS dev!
It's coming along slowly, I have basic user mode with a tiny subset of Linux system calls (enough to run a very simple shell).
What I need really before it's fit for external consumption/scrutiny:
- Sort out any copyright and licensing issues. The code was originally built on the bare bones tutorial, the vast majority of the subsequent code is original code written by myself. As I understand it, the Wiki contents are CC0/public domain. My libc is pdclib, which is similarly CC0. My simple shell is modified from here, and will need to come out as it copyright and has no license.
- Set up a proper integration with git. I currently use fossil, which has an export feature to git. I like fossil, and will retain it as my primary SCM, but I need to maintain a git mirror.
- I need to get documentation up to date on how to build and use.
- Proper message logging system. Currently, I log little other than catastrophic failure, and even then only to an internal ring buffer. I currently do most of my debugging using GDB->QEMU.
- Minimal concept of user and permissions. Currently, there is no concept of a user nor permissions.
- Port or write a proper shell. I'd ideally like to port busybox, so I can have a full CLI environment on which to build.
- I need to get off the wall on what system call interface I'll provide. Currently, I use an int 0x80 Linux subset. While I can see me keeping that for the short/medium term, I do like the idea of an asynchronous message based syscall interface, on which I can build a synchronous POSIX interface. I'm more interested in how OSes work underneath, and have little interest in a new user space stack, so POSIX will be my primary goal in terms of interface.
- Have it run properly on real hardware. All my current work is in QEMU, and while I have run the code on hardware in the past, it is currently not functional on real hardware at the moment (I suspect my fledgling UHCI driver might be responsible for that.) Real hardware will really need USB, as especially desktop systems are dependent on USB for user input, but laptops can generally get away with using PS2 KB/Mouse.
I started this project around new year 2015, having had an interest in OSes since university (some 20 years previously.) It's great putting theory into practice, and 6 years on, I'm still not bored.
I love OS dev!