This is really great work! Always impressed to see hobby OS projects that get this far, well done.
That said, I’m once again reminded that we sorely need some updated resources for aspiring OS developers in 2025. Targeting 32-bit x86 and legacy devices that haven’t been “the norm” for decades suggests to me a heavy influence from resources like the osdev wiki which, while occasionally useful, are increasingly outdated in the modern world and lead to many questionable choices early on.
I have come to believe (through multiple iterations of my own OS projects) that there’s more value in largely ignoring resources such as osdev and focusing instead on first-principles design, correct layering, and building based on modern platforms (be that x86_64 or something else) and ignoring legacy devices like the PIT and PS2 etc.
I just wish we had good introductory documentation resources to reflect that, and that outdated resources weren’t overwhelmingly surfaced by search engines and now AI “summaries”.
None of the above is intended to take away from OPs achievement, which is fantastic, or from the work done over the years by the osdev community, who I’m sure largely do the best they can with what they have.
i would suggest to providing an iso or co-operating / looking into copy.sh which provides a large number of iso files which you can boot/play around with in the browser itself!
I was just today tinkering around with the ibm iso (exploring ibm) and others too, its always fun seeing new operating system!
I would love if you could, as I said, co-operate with copy.sh/v86 team to also include your iso and also provide iso files in github releases if possible
Well done to you both. I'm only a 1/4 way down your useful TODO list after 12 months. I got bogged down in setting up IRQ vector tables on armv8 and took a huge detour to refresh my assembly skills. So I feel some of the journey you have been on. It takes a lot of patience, but can be very rewarding. Congrats!
This is quite amazing. I'm not anything like a serious C coder and haven't tried ASM. I've written "filesystems" in higher level languages (stuff that imposed a directory structure and metadata on what were just bins of data), so I was just looking at parts of your code at random. I think that triple pointer dir_entry_t*** is where my head exploded. Pretty amazing code, you should be very proud.
Thank you so much!
I also made a few years ago an high level filesystem, which helped me during I made this one.
I think the main difference is just that you need to work with drivers here for every disk operation.
This feels like a fresh breath of air after all "I vibe coded this in 4 hours with Claude". Don't get me wrong, vibe coding had its own place, but it feels that projects like this one have become a rarity.
Thank you so much! That’s great to hear :)
I feel like vibe coding projects like this, where the whole idea is to learn, vibe coding only makes it harder
On the other hand, for future employers you might wanna simply showcase the creation. They don’t have all the knowledge to appreciate the technicals or even the time to sit through it.
One of the biggest headaches for me is memory bugs when codebase grows large. So I 'm very interested: is this a headache for you too and how do you deal with this?
You can read about how NASA writes their code, I remember reading an article about it, which includes some great tips with how to avoid these kind of bugs.
And I think also as other commenter said, new languages like Rust really help with avoiding bugs like that.
wrongfully assuming 128MB for the whole OS was enough
If I were you I'd investigate why it needs so much. Keep in mind how much functionality older OSs had, and how much computing power they needed. Always good to see more OS projects nonetheless, but always remember that efficiency is important.
I had to just go find the details for the original 386 Unix server [1] I was running ~1995 because I thought it was running just fine on 8MB RAM, running an EFnet IRC node, FTP, MUDs and some early web apps. And... yep, 2 x 4MB SIMMs. Wild times. A single photo from my phone is three times that size.
(I later took that PC home and used it as the test machine for my own hobby OS, which had to run from a 1.44MB floppy because there was no other sane way to transfer the dev images from my desktop)
Eh, I tend to do the same (significantly over-estimate RAM requirements) since it's hard to know just how much RAM you'll need to begin with. Though usually for something like the stack I start with 256-512K.
I did this (worked on an OS) from 2019-2022 or so, during college. Didn't get to user mode sadly. Did it in Rust because back then Rust was what I was really into. It was really fun! :) OS dev has always been fun/interesting :)
That’s your call to make but I think it’ll be easier to write tests for the trickier parts and avoid the memory safety issues you flagged as being your biggest annoyance by isolating into unsafe that’s better unit tested (+ maybe cover with Miri to double check the unsafe code is still sound)
I’ll flag one thing which is that the page table stuff mentioned is unlikely something rust can protect you against - if you set up the wrong memory mapping that’s a higher level logic bug that would make rust unsound and result in weird failures. Rust can only protect you within the bounds of the memory model it defines for its abstract machine.
This is really great work! Always impressed to see hobby OS projects that get this far, well done.
That said, I’m once again reminded that we sorely need some updated resources for aspiring OS developers in 2025. Targeting 32-bit x86 and legacy devices that haven’t been “the norm” for decades suggests to me a heavy influence from resources like the osdev wiki which, while occasionally useful, are increasingly outdated in the modern world and lead to many questionable choices early on.
I have come to believe (through multiple iterations of my own OS projects) that there’s more value in largely ignoring resources such as osdev and focusing instead on first-principles design, correct layering, and building based on modern platforms (be that x86_64 or something else) and ignoring legacy devices like the PIT and PS2 etc.
I just wish we had good introductory documentation resources to reflect that, and that outdated resources weren’t overwhelmingly surfaced by search engines and now AI “summaries”.
None of the above is intended to take away from OPs achievement, which is fantastic, or from the work done over the years by the osdev community, who I’m sure largely do the best they can with what they have.
Hey, what an amazing project, bravo!
i would suggest to providing an iso or co-operating / looking into copy.sh which provides a large number of iso files which you can boot/play around with in the browser itself!
I was just today tinkering around with the ibm iso (exploring ibm) and others too, its always fun seeing new operating system!
I would love if you could, as I said, co-operate with copy.sh/v86 team to also include your iso and also provide iso files in github releases if possible
Source: https://copy.sh/v86/ Their github page : https://github.com/copy/v86
Thanks! I’ll look into it
Well done to you both. I'm only a 1/4 way down your useful TODO list after 12 months. I got bogged down in setting up IRQ vector tables on armv8 and took a huge detour to refresh my assembly skills. So I feel some of the journey you have been on. It takes a lot of patience, but can be very rewarding. Congrats!
Thank you and good luck!
This is quite amazing. I'm not anything like a serious C coder and haven't tried ASM. I've written "filesystems" in higher level languages (stuff that imposed a directory structure and metadata on what were just bins of data), so I was just looking at parts of your code at random. I think that triple pointer dir_entry_t*** is where my head exploded. Pretty amazing code, you should be very proud.
Thank you so much! I also made a few years ago an high level filesystem, which helped me during I made this one. I think the main difference is just that you need to work with drivers here for every disk operation.
Damn man, this is awesome. This should land you a job damn near anywhere.
I really hope so! :)
Wow! Looks great! Id suggest checking out https://oshub.org/ it has a lot of hobby operating systems similar to this one.
This feels like a fresh breath of air after all "I vibe coded this in 4 hours with Claude". Don't get me wrong, vibe coding had its own place, but it feels that projects like this one have become a rarity.
Thank you so much! That’s great to hear :) I feel like vibe coding projects like this, where the whole idea is to learn, vibe coding only makes it harder
What an amazing project! They don’t know what they missed.
Would recommend making a good youtube video with demo.
Yes, you are right. Do you think I should make the video technical or just a showcase?
I'd go for something more technical, it feels like your target audience are hackers and not people shopping for an OS.
But as always, it's your project done for yourself, so whatever feels like more fun recording.
On the other hand, for future employers you might wanna simply showcase the creation. They don’t have all the knowledge to appreciate the technicals or even the time to sit through it.
Do both :-)
One of the biggest headaches for me is memory bugs when codebase grows large. So I 'm very interested: is this a headache for you too and how do you deal with this?
Yes, I think most of the time working on the project was working ob fixing memory bugs. GDB did a great job for me, have you tried to use it?
Yeah, it's kind of annoying to fix these bugs for me, even though GDB is a great debugging tool.
I always wonder if there are any techniques to avoid these kind of bugs in huge projects like OSes and browsers, otherwise it can be a nightmare
You can read about how NASA writes their code, I remember reading an article about it, which includes some great tips with how to avoid these kind of bugs. And I think also as other commenter said, new languages like Rust really help with avoiding bugs like that.
wow, just wow
i did something similar when i was 18. got to the point of filesystem and mouse driver.
wrongfully assuming 128MB for the whole OS was enough
If I were you I'd investigate why it needs so much. Keep in mind how much functionality older OSs had, and how much computing power they needed. Always good to see more OS projects nonetheless, but always remember that efficiency is important.
I had to just go find the details for the original 386 Unix server [1] I was running ~1995 because I thought it was running just fine on 8MB RAM, running an EFnet IRC node, FTP, MUDs and some early web apps. And... yep, 2 x 4MB SIMMs. Wild times. A single photo from my phone is three times that size.
(I later took that PC home and used it as the test machine for my own hobby OS, which had to run from a 1.44MB floppy because there was no other sane way to transfer the dev images from my desktop)
[1] One of these: https://www.computinghistory.org.uk/userdata/images/large/75...
Wow 8MB of ram… that’s really amazing! Which hobbyOS did you made?
Hey, it was enough for most basic stuff, but only running Doom or more advanced things would need above that.
Doom was released in 1993. 128MB of RAM wouldn't even fit in the typical mobo of the time.
http://www.dosdays.co.uk/topics/1993.php
It only supported 320x200 as resolution at the time though.
Yes you are right, could be a memory leak somewhere, I’ll need to take a look at it
Eh, I tend to do the same (significantly over-estimate RAM requirements) since it's hard to know just how much RAM you'll need to begin with. Though usually for something like the stack I start with 256-512K.
This is beautiful.
Thank you!
I did this (worked on an OS) from 2019-2022 or so, during college. Didn't get to user mode sadly. Did it in Rust because back then Rust was what I was really into. It was really fun! :) OS dev has always been fun/interesting :)
Absolutely, I learned so much from this project! Do you think I should make a new version in Rust?
That’s your call to make but I think it’ll be easier to write tests for the trickier parts and avoid the memory safety issues you flagged as being your biggest annoyance by isolating into unsafe that’s better unit tested (+ maybe cover with Miri to double check the unsafe code is still sound)
That’s a great idea, could’ve really improved the overall project structure
I’ll flag one thing which is that the page table stuff mentioned is unlikely something rust can protect you against - if you set up the wrong memory mapping that’s a higher level logic bug that would make rust unsound and result in weird failures. Rust can only protect you within the bounds of the memory model it defines for its abstract machine.
מגניב ממש אחי, תמשיך ככה
Awesome. Should take a look at TempleOS as well.
Thank, I’ll do!