Hey Everyone!
I wanted to share something I've been working on for the past few years on and off - this is the OS I've been working on, nightingale!
I can't give you a screenshot, since nightingale doesn't support any video output, but here's a paste of an interactive serial session showcasing some of my favorite features!
https://pastebin.com/raw/GL888kV1
Nightingale supports a vaguely UNIX-like userland, multiple processes, etc.
UNIX isn't a design goal, I'm just going that direction for now for ease of implementation (well documented interfaces to implement) and ease of porting.
I've already ported lua as a proof of concept, and I have a branch where I'm working on tcc.
If anyone is interested in giving it a try, I upload ISO images built by CI. There's a download link in the README, or you can grab it here, there are running instructions in the 'Running nightingale' section of the github README.
I hope someone finds something interesting here, and I am definitely open to any comments or suggestions!
The Nightingale Operating System [v0.8.8]
-
- Posts: 1
- Joined: Thu Oct 17, 2019 2:21 pm
Re: The Nightingale Operating System [v0.8.8]
Good job! How did you implement lua? Also how do you run it from qemu? I cannot use the run.rb file.
Re: The Nightingale Operating System [v0.8.8]
Thanks!
The qemu invocation I use is this:
It's also noted in the project readme if you want to refer to it later.
Getting lua building for the system was fairly easy, I had to hack up the makefiles to support my build system, but getting an executable that would run wasn't too hard thanks to lua's great portability. The main hurtle was improving my libc to the point where it would do anything useful. The main loop became (compile, stub out libc functions to get it to link, implement whatever function caused a failure at runtime).
There's still a bunch of functions stubbed out that you can see in nc/todo.c, stuff that I needed to have to link lua, but that I haven't exercised in any code I've run on it.
Lua was the catalyst for me to write most of the C stdio functions (fread, fwrite, etc) with FILE*s and buffering, as opposed to just using raw file descriptors, and that was where most of the time (and bugs) went for that project.
The qemu invocation I use is this:
Code: Select all
qemu-system-x86_64 -cdrom ngos64.iso -vga std -no-reboot -m 32M -s -serial stdio -display none
Getting lua building for the system was fairly easy, I had to hack up the makefiles to support my build system, but getting an executable that would run wasn't too hard thanks to lua's great portability. The main hurtle was improving my libc to the point where it would do anything useful. The main loop became (compile, stub out libc functions to get it to link, implement whatever function caused a failure at runtime).
There's still a bunch of functions stubbed out that you can see in nc/todo.c, stuff that I needed to have to link lua, but that I haven't exercised in any code I've run on it.
Lua was the catalyst for me to write most of the C stdio functions (fread, fwrite, etc) with FILE*s and buffering, as opposed to just using raw file descriptors, and that was where most of the time (and bugs) went for that project.
My OS: nightingale
Re: The Nightingale Operating System [v0.8.8]
Hey I saw your code and it was pretty. I enjoyed it. you write clean and managed. good luck.