Writing a RISC-V OS in Rust: System Calls
osblog.stephenmarz.com
osblog.stephenmarz.com
http://aiju.de/plan_9/plan9-syscalls
This is how you make a simple yet flexible OS. Use an rpc protocol to do all the talking to objects within the system which are exposed as files. It's very REST like and allows any programming language to interact with those objects by reading/writing them as files. So you have a very uniform interface that eliminates a lot of binaries as now simple scripts can handle the work of reading and writing those files. Then realize that you can easily export those files to other machines on a lan or the internet. So the tcp stack of an internet facing machine can be exported and mounted on multiple machines who now all talk to the internet via that one machines tcp stack. And that can even be done across the net to bypass "great firewalls". Bye bye nat.
As far as I can remember Inferno did syscalls in a different way, given that Limbo with DisVM was the main programming language.
At some point, you're just adding pointless layers of indirection by doing this. NT tried this approach, and it is anything but "simple".
You can do many things quite naturally by interacting with bytestream-like or block-like objects that are exposed via some sort of hierarchical namespace ("files"), but this doesn't really cover everything. Some things may be better done, even in a script, by interacting with a "binary" that in turn just wraps a binary library exposing some kind of ABI.
Could someone say if the kernel runs in Supervisor mode what is the intention of machine mode in RISC-V?
It's also been handy for trying out supervisor mode concepts and adding software based support on chips that don't support all the features like hypervisor extensions.
this short video explained it well (to me anyways): https://www.youtube.com/watch?v=4JIvnWEs_pA
(hypervisor trap explanation at 11m20s mark)
If anyone agrees with me and wants to help out making that happen on an open source code base, hit me up.
I think it's likely the #1 threat to the Linux dominance in the backend, ironically by hijacking the front end first. Based on market share, it could create an expectation that AWS, Azure, etc, provide backend support. Doesn't hurt that Google owns K8S as well. See, for example, EKS. Google can manipulate Amazon in select spaces.
Android or ChromeOS would never have taken off the ground without Google's keeping pushing them forward no matter what. In both OSes the kernel is hardly exposed to userspace, Google could move to something else and it would be hardly noticeable to app developers (OEMs and rooted phones is another matter).
And then there is Fuschia.
Outside general-purpose domain, the IoT world is getting full of BSD licensed OSes, RTOS, Zephyr, NuttX, Tizen RT.
Ironically Zephyr is managed by Linux Foundation, although it doesn't have anything to do with Linux code.
Dog knows IoT needs something a lot better than Linux to run on; fat flabby old-school hacker-culture footguns are absolutely not an option when smart tech is being built into everything and everyone. That tech must be small, hard, absolutely focused, and take ZERO shit from NO-ONE; starting with itself.
Remember, the only code which can be 100% guaranteed impossible to compromise is code that isn’t there. Today’s Linux kernel is around 20 MILLION LOC, and counting. No prizes for figuring what any competing product’s USP must be.
..
“General-purposeness” designed into the product at the start enables it to adapt to each new market quicker and easier, but it shouldn’t be a public selling point in itself. Because the moment you start pitching it as being “everything to everyone”, everyone wants to throw their own crap into it as well—and you’re back to building ”another Linux”, in a market that already has a resident Linux and no room or need for another. Think smart. Don’t covet all the things that Linux does well and try to replicate those. Instead, identify the things Linux doesn’t do well (and CAN’T ever do well because of why and how it’s built) and knock those balls clean out of the park.
Think about how Steve Jobs finally beat Microsoft at its own game. Not by building a better PC, but by fundamentally redefining what “Personal Computing” means; and then being first to market with the perfect product for that.