GentleOS - A pair of hobby OSes for vintage 32-bit and 16-bit PCs
39 points by luke8086
39 points by luke8086
The fact that you booted it on real hardware is what I find the most impressive. That 16-bit version looks retro-futuristic as fuck. Cool project.
Not sure which I’m more jealous of: this awesome osdev accomplishment or the collection of vintage laptops ;)
Neat project! What exactly is the connection between GentleOS/16 and GentleOS/32? They appear to share a lot of code. Is it simply a split of the same codebase into two more target-optimized versions?
Also, looking through the kernel/gui code it looks like the whole OS is built around a single GUI event loop which then dispatches events to the relevant applications. Other than GentleOS having an idle tick event, it seems quite similar to what we did with PonyDOS to fake multitasking due to size constraints. I'd be interested in hearing your reasoning for picking a similar design.
I also saw that, at least at the moment, all the applications are linked together into the same address space as the kernel. Do you intend to add support for loadable executables?
What exactly is the connection between GentleOS/16 and GentleOS/32? They appear to share a lot of code. Is it simply a split of the same codebase into two more target-optimized versions?
So G/32 started from an older codebase, that I wrote many years ago. It was 64-bit, had preemptive multitasking, a basic read-only filesystem, and a Forth-like interpreter. The interpreter provided a shell and ran scripts from the filesystem as separate processes. You can still find it here
The idea for G/16 came some time later. It was forked off G/32 and made to build with Turbo C / OpenWatcom. I'm not happy about maintaining two separate versions, but the differences were big enough. I try to keep them as close as possible, though, in case I find a way to merge them in the future.
Also, looking through the kernel/gui code it looks like the whole OS is built around a single GUI event loop which then dispatches events to the relevant applications. Other than GentleOS having an idle tick event, it seems quite similar to what we did with PonyDOS to fake multitasking due to size constraints. I'd be interested in hearing your reasoning for picking a similar design.
I also saw that, at least at the moment, all the applications are linked together into the same address space as the kernel. Do you intend to add support for loadable executables?
My idea for GentleOS was to take a completely different approach from typical osdev - drop all the complicated "general-purpose" infrastructure, that isn't necessary in a strictly single-user hobby OS, and instead focus on the fun part - making bare-metal apps ;)
I went as far as to not have a heap allocator. Except from one buffer in G/16, everything is static, which greatly reduces time spent on debugging. Given it's a single binary in a single memory space, a single event loop felt like a natural choice.
At this point, since I'm pretty busy with my day job (and I already spent more time on GentleOS than planned), my only future plans are bugfixes, optimizations, refactoring, and maybe adding some new apps.
Btw. PonyDOS seems really impressive and cool! I haven't seen it before and I'll need to give it a closer look. Some years ago I also tinkered (https://github.com/luke8086/utris) with boot-sector apps, but didn't get nearly as far.
This is fantastic. I’m going to set it up on my 386 luggable with 8MB RAM to take to my next retrocomputing meetup.
Lovely! Nice to see some other operating systems in that memory ballpark!
aww: the GentleOS/16 image is 1.44 MB and my Amstrad PPC640 only had DD floppy drives ...
Feel free to dd the first 64KB, the rest of the image is just padded with zeros to make emulators happy