Currently I have basic TTY and GUI environment with some of the basic UNIX utilities like cp, ls and stat. I have basic support for USB (keyboard/mouse/storage), disks (NVMe, AHCI), custom networking stack with TCP and UDP support, and a UNIX-like filesystem with /dev /tmp /proc filesystems.
The whole project is written in C++ except for my BIOS bootloader that is written in 16-bit real mode assembly. I have been testing the OS mainly on virtual machines but also frequently on real hardware.
There hasn't been any major roadblocks. Sometimes I give up on a feature and come back to it maybe month or two later though.
Not to trash this guy's project, but there's no similar perfect storm going on right now.
That being said , I still think that this wouldn't reach mass adoption "just for being an alternative to linux" and that this has to have a specific purpose
For example serenity os has a really cool old - ui and some people think its a fun os in general , out of which came the ladybird project.
Redox os is trying to write it in rust , something which can have some practical meaning in my opinion
Writing an operating system is challenging. Not as challenging as a compiler, but certainly more work (so much hardware, so many specifications ugh).
In 91-92, people were clamoring for a free, unencumbered 386 Unix. Enter Linux.
Every successful (non-commercial) OS undertaking needs and has a hook.
Redox? Rust (enough said).
Serenity? Live coding and mental health (no knock there).
And on the flip side, look at ReactOS. Languishing. Painfully slow 15+ years in development, and people would still rather pay Microsoft or roll the dice running applications under Wine. It's hook just isn't strong enough.
Again, not to knock this guy, because just the fact that he wrote his own AML interpreter is super impressive to me (I've floundered around in those same ACPI specs for far, far (far, far) too many sleepless nights), and never put out 1 line of AML code. So mad props.
But there's just no hook. C++? Passe. No microkernel / hypervisor / <insert_feature_here>? No capability model?
It'll be tough. But I know that OS'ing is a labor of love, even if not a single other person cares. Cheers.
You say you're a student on your profile - does that mean university? If so, have you also worked on the OS directly as part of your studies?
How much time I put to this really depends on what else is happening in my life at the moment. There has been months where I've put total of 5 hours into this and some weeks alone I may reach close to 40 hours.
I would imagine this will set you up incredibly well for a career in the industry, arguably moreso than your actual degree. Any reasonable prospective potential hirer is gonna be super impressed by it I think.
That's what I hope at least. This is something I would want to do for my career in the future. Good portfolio never hurts :)
Love this! Well done. Best way to skip classes ever!
One more set of questions: was there something you would call an "it's alive!" moment in the beginning of the project? A part where it would start to get _really_ fun for you? If so, what was it and how long did it take you to get there?
I think it became actually fun after I got all the basic requirements done and could start deviating from more or less standard OS code. When I could actually decide what I want to work on. Maybe after couple of months it was in that state. It was also fun at the beginning. it was just way harder as I didn't have any prior knowledge and I was trying to wrap my head around some basic concepts :D
One of these is really a lot more impressive (and indicates a far more mature and finished product) than the rest. I love how it's just listed in there next to the basics. Nice job.
What stand out challenges have you encountered?
NVMe base specification https://nvmexpress.org/wp-content/uploads/NVM-Express-Base-S...
xHCI (USB controller) https://www.intel.com/content/dam/www/public/us/en/documents...
I bet you learned a lot with this - how do you keep notes and track your development? Or is the OS your live journal. Thanks
Generally I decide a feature I want to add. Then I do a general overview of the corresponding specifications and sometimes look at how already existing OSs handle that. I try to make some kind of mental model about the system and what it needs. Then I basically just write what ever I come up on the spot.
I have a really bad habit of not writing docs or taking notes. Basically I just hold everything in my head (and forget about it when I would need that information again). For some more complex stuff I do draw diagrams and write notes but I pretty much only keep those locally for myself.
This was me for a very long time. I started making notes now, knowing that I will most likely forget (some of it). I still have all sorts of files scattered around though with my notes, i.e. the notes are disorganized (to some extent). I thought of using Obsidian for them and I have tried it but I do not use it consistently, I just go for my XTerm window with emacs or vim.
Is this how linux manages to avoid needing to "install drivers" in the vast majority of cases? And if there are standard device APIs, why does windows have to go through that whole install driver routine every time I plug something in?
I'm not really familiar with how Linux nor Windows handle drivers. While compiling the Linux kernel you specify which drivers you want to build into the kernel and which ones you want as modules. Usually most common ones compiled along side the kernel so there isn't really need to install them later, just load the driver modules. There are also devices that work with just a generic driver but would have more features with a specific one (e.g. led settings on a gaming mouse). I think Windows is maybe installing these optional drivers.
Microsoft, having the resources it does, was able to design and implement a stable driver ABI. In fact, they also have a stable userspace ABI. Both have evolved, but that's not the point.
Linux conversely (whether by design or by limitation) does not have stable ABIs (although userspace compatibility isn't terrible). Even though you can build kernel drivers as modules (and then load/unload), those modules are unique to each specific kernel build.
Remember those guys didn't write the compiler & linker toolchains they were using like Microsoft was able to do.
I will be honest, I understand why Linus & Co. have decided to keep it this way, because it encourages hardware manufacturers to submit either their drivers or their specifications to the upstream kernel, which promotes software freedom. It is a noble goal and has served them well.
BUT - thieir decision has caused me no small amount of consternation over the years as a system administrator. Once you use Linux for something that is not "server software" (be it auth, file sharing, web, etc.), you are generally using it to drive some piece of hardware (CNCs, industrial tools, cough phone systems cough). Vendors, especially those that deal in low-volume / high-margin products, do not want to release their source code. They're allergic to the idea even. So I have gotten stuck in outdated kernel hell on several occasions because the kernel devs have decided to change internal interfaces in a point-point release that my driver software relied upon.
I so wish that Linux would move to a stable driver ABI. It would make administration & upgrades so much easier, especially on the embedded side.
But I also know that it'll never happen.
FWIW, the "no stable kernel ABI" is unique to Linux, although no one really does this like Microsoft (i.e. the BSDs can break between releases, but I do believe NetBSD is superior to FreeBSD in this respect).
Do you plan on porting more software?
I have some ports locally that are not yet working. I have git, binutils, gcc, make all compiling but they are giving some weird errors. Probably a bug in my libc or syscalls.
It looks like ".." entries don't exist beneath /proc.
What do you think it will take to target RISC-V?
I'm not familiar with other architectures than x86 so I can't really say what it will take. At least a lot of work :D
Doom wasn't loading for me (Brave browser on Ubuntu without javascript disablers).
Very good work. It was fun without doubt.