What an astounding achievement. In 6 years, this person has written not only a very well-designed microkernel, but a build system, UEFI bootloader, graphical shell, UI framework, and a browser engine.
The story of 10x developers among us is not a myth... if anything, it's understated.
Didn’t expect to see my project on the main page today ‘^^
Right now the build is broken, so you can’t test the full OS, but you can run individual apps with:
Impressive achievements, congrats! You said that your microkernel is "influenced by Zircon". Did you also study other architectures like e.g. sel4, Minix or openQNX? What do you consider the important design choices in your microkernel design? Is there a document where you go into this? Have you done performance measurements, i.e. to which other microkernel design do you think your kernel is comparable in terms of performance?
Thanks! Skift is basically a patchwork of all the OS ideas I like. The UI takes inspiration from SwiftUI/Flutter, the microkernel is influenced by Zircon, and there are some Plan 9 ideas where everything is a URL. A few bits are probably inspired by NT and Darwin too, though I don’t remember exactly which.
Maybe adding some Xerox PARC, Oberon, NeXTSTEP / NeWS style, Powershell ideas could also be interesting, on how the shell, UI, and dynamically loaded code (or OS IPC), makes the whole OS customizable, , just throwing another set of ideas into your bucket.
Wow, you did it yourself?! This is just wow, as a C/C++ developer I know how to create an OS, but at most I could come up with an idea, but writing all this myself, I have no words.
What ideas do you employ around security? Do apps have full access to memory? To hardware? Is there a permissions system? Sorry I'm not that familiar with how microkernels work.
Apps don’t get full access to memory or hardware. The kernel only maps what they’re allowed to see. Drivers live in user space, and apps talk to them through capabilities (handles you can pass around). There’s no ambient authority, you only get access if you’ve been given the key.
What about filesystem access rights? Does any application have full access to all user's files? Or only to files belonging to this particular application?
I dove deep into the code base. Found lib-sdl. Found impl-efi. Found co_return and co_await's. Found try's. Found composable classes. Found my codebase to be a mess compared to the elegance that is this. We are not worthy...
What else does it have rather than beautiful UI? Network support? Sound? What file systems does it support? What about multiple users? What about applications isolation?
It would be nice to have such information displayed somewhere on the site.
It’s a microkernel-based operating system. Mostly just a learning/fun side project for me. It implements something akin to the NixOS /store. Hardware, networking, sound, and the file system are all very barebones. Most of the work so far has been put into the framework, some example apps, and the browser.
Every modern commercial OS is a hybrid architecture these days. Generally subsystems move out of the kernel when performance testing shows the cost isn't too high and there's time/money to do so. Very little moves back in, but it does happen sometimes (e.g. kernel TLS acceleration).
There's not much to say about it because there's never been an actual disagreement in philosophy. Every OS designer knows it's better for stability and development velocity to have code run in userspace and they always did. The word microkernel came from academia, a place where you can get papers published by finding an idea, giving it a name and then taking it to an extreme. So most microkernels trace their lineage back to Mach or similar, but the core ideas of using "servers" linked by some decent RPC system can be found in most every OS. It's only a question of how far you push the concept.
As hardware got faster, one of the ways OS designers used it was to move code out of the kernel. In the 90s Microsoft obtained competitive advantage by having the GUI system run in the kernel, eventually they moved it out into a userland server. Apple nowadays has a lot of filing systems run in userspace but not the core APFS that's used for most stuff, which is still in-kernel. Android moved a lot of stuff out of the kernel with time too. It has to be taken on a case by case basis.
What an astounding achievement. In 6 years, this person has written not only a very well-designed microkernel, but a build system, UEFI bootloader, graphical shell, UI framework, and a browser engine.
The story of 10x developers among us is not a myth... if anything, it's understated.
And unlike a similar project, they accomplished it without the benefit of divine guidance.
Very impressive!
[dead]
Writing an OS with God's help might be more of a handicap than anything.
Not with Messiah.ai :D
Oh my God. That domain is parked and for sale for $125,000?!?!
Wild.
Oh that is nothing. Check out god.ai..... domain parking is back. At this point we might as well just have a TLD for .god
Not to mention a media player, games, Paint equivalent, text editor -- it's a considerable achievement
Didn’t expect to see my project on the main page today ‘^^ Right now the build is broken, so you can’t test the full OS, but you can run individual apps with:
```bash ./skift.sh run --release <app-name> ```
on Linux or macOS.
To see all available apps:
```bash ls ./src/apps ```
This works for everything except the browser. For that, use:
```bash ./skift.sh run --release vaev-browser -- <url-or-file> ```
The HTTP stack is super barebones, so it only supports `http://` (no HTTPS). It works with my site, but results may vary elsewhere.
Most of my time so far has gone into the styling and layout engine rather than networking.
Impressive achievements, congrats! You said that your microkernel is "influenced by Zircon". Did you also study other architectures like e.g. sel4, Minix or openQNX? What do you consider the important design choices in your microkernel design? Is there a document where you go into this? Have you done performance measurements, i.e. to which other microkernel design do you think your kernel is comparable in terms of performance?
Skift, Karm, Hjert, Opstart.
As a Norwegian, the name of this system and those components sound Danish (Skift, Karm, Opstart) and Danish-inspired (Hjert). Am I right? :)
Kudos for exploring other avenues outside UNIX.
Thanks! Skift is basically a patchwork of all the OS ideas I like. The UI takes inspiration from SwiftUI/Flutter, the microkernel is influenced by Zircon, and there are some Plan 9 ideas where everything is a URL. A few bits are probably inspired by NT and Darwin too, though I don’t remember exactly which.
Sounds like really solid ideas. You must have a lot of experience to inspire yourself from so many diverse niche worlds. GL!
Maybe adding some Xerox PARC, Oberon, NeXTSTEP / NeWS style, Powershell ideas could also be interesting, on how the shell, UI, and dynamically loaded code (or OS IPC), makes the whole OS customizable, , just throwing another set of ideas into your bucket.
Overall it looks interesting, all the best.
How much time did it take you to get the project to this phase?
I had multiple rewrites, but this last iteration is two years old
How long did the first iteration take?
This is your chance! As a clean slate design, you can abandon the concept of a hierarchal file system and replace it with rdbms.
How devs can create something like this with normal time constrains? I couldn't squeeze this kind of project having day to day 9 to 5 job as dev.
I wonder the same thing.
The code is really well written - very understandable and modern, kudos on that!
I'm curious, how come the app I just compiled works on macOS?
I find every project of this nature so so beautiful and incredible. Congrats.
Wow, you did it yourself?! This is just wow, as a C/C++ developer I know how to create an OS, but at most I could come up with an idea, but writing all this myself, I have no words.
What ideas do you employ around security? Do apps have full access to memory? To hardware? Is there a permissions system? Sorry I'm not that familiar with how microkernels work.
Apps don’t get full access to memory or hardware. The kernel only maps what they’re allowed to see. Drivers live in user space, and apps talk to them through capabilities (handles you can pass around). There’s no ambient authority, you only get access if you’ve been given the key.
What about filesystem access rights? Does any application have full access to all user's files? Or only to files belonging to this particular application?
Applications will each have their own namespace, and will only have access to user files if given the right to, on a per directory/file basis
This is a very nice approach. You should mention it on the main page of your OS site.
Interesting. Thanks.
Looks great. I did pick up pretty strong NIH vibes, though. As an example, would CMake or Meson not work as a build system?
Obviously not her first rodeo...
I dove deep into the code base. Found lib-sdl. Found impl-efi. Found co_return and co_await's. Found try's. Found composable classes. Found my codebase to be a mess compared to the elegance that is this. We are not worthy...
The modules... :chefs-kiss:
This looks really cool! congratulations to the person who made this! Is there a video demo of this somewhere?
I am amazed that you also managed to write a browser engine!
Video demo would be amazing.
It should be embedded into the website alongside the pictures, in a carousel.
What else does it have rather than beautiful UI? Network support? Sound? What file systems does it support? What about multiple users? What about applications isolation?
It would be nice to have such information displayed somewhere on the site.
It’s a microkernel-based operating system. Mostly just a learning/fun side project for me. It implements something akin to the NixOS /store. Hardware, networking, sound, and the file system are all very barebones. Most of the work so far has been put into the framework, some example apps, and the browser.
Slightly related and coming from ignorance here, but what is the general intuition for the pros and cons of a microkernel approach in OS development?
Every modern commercial OS is a hybrid architecture these days. Generally subsystems move out of the kernel when performance testing shows the cost isn't too high and there's time/money to do so. Very little moves back in, but it does happen sometimes (e.g. kernel TLS acceleration).
There's not much to say about it because there's never been an actual disagreement in philosophy. Every OS designer knows it's better for stability and development velocity to have code run in userspace and they always did. The word microkernel came from academia, a place where you can get papers published by finding an idea, giving it a name and then taking it to an extreme. So most microkernels trace their lineage back to Mach or similar, but the core ideas of using "servers" linked by some decent RPC system can be found in most every OS. It's only a question of how far you push the concept.
As hardware got faster, one of the ways OS designers used it was to move code out of the kernel. In the 90s Microsoft obtained competitive advantage by having the GUI system run in the kernel, eventually they moved it out into a userland server. Apple nowadays has a lot of filing systems run in userspace but not the core APFS that's used for most stuff, which is still in-kernel. Android moved a lot of stuff out of the kernel with time too. It has to be taken on a case by case basis.
Microkernels are conceptually cleaner, and easier to make secure, but in practice generally slower than unikernels.
Gernot Heiser would strongly disagree with you on the last one :D
Very impressive! Do you support GPUs or is the UI completely CPU rendered? It looks really beautiful.
It's CPU rendering, GPU is on the roadmap
What a great project.
Looks beautiful.
looks like a cool project
dang, so cool
so cool! building from past 6 years (impressive)
damn this is really good. I hope the register folk sees this.
[flagged]