There’s a term from the tabletop RPG community — “fantasy heartbreaker.” It r originated in a glut of D&D-like roleplaying games from the 80s/90s, with basically the same Tolkien/Leiber/Vance type of setting, but different rule sets that were supposed to make combat more realistic or model your character in more detail or whatever.
And so these became basically shovelware, heartbreakers because you got excited by each one only to find out the rules were at worst unplayable or at best not any better than regular D&D.
It seems we’re in the era of “OS heartbreakers” and “language heartbreakers” now.
Cute aesthetically (I would compare it to Haiku but lugubriously 2000s/2010s instead), but what makes it interesting at the back of the cabinet? What differentiates it from everything else?
Skimming the source code, it looks as if the main thing is the complete lack of security. System calls with unknown arguments panic the kernel, others blindly trust the caller. For example, if you do an open system call, nothing validates the path length, the kernel then allocates sufficient space to hold a copy, doesn’t check for allocation failure, and then copies over the returned pointer (I don’t know how allocation failure is handled, but if it returns null then now you’ve either got a kernel-mode null-pointer dereference or a kernel-mode memory overwrite primitive, depending on how the MMU is configured - does it even have a kernel / userspace separation).
This is the kind of thing that modern C++ would make very easy to avoid, with some higher-level constructions. Starting in 2017, C++14 support was pretty mature and C++17 just provides some small cleanups rather than anything fundamentally better (auto parameters on lambdas were introduced in C++14 and they were the last thing that made particularly big improvements for things like this).
Skimming the source code, it looks as if the main thing is the complete lack of security
Ahhh, the good ol’ days! Unfortunately, I suspect a lot of people talking about “bloat” would basically consider all this unnecessary even if that’s what reality needs.
As an alternative, as much as Serenity has heart albeit not originality, they are using modern C++ effectively.
There’s a term from the tabletop RPG community — “fantasy heartbreaker.” It r originated in a glut of D&D-like roleplaying games from the 80s/90s, with basically the same Tolkien/Leiber/Vance type of setting, but different rule sets that were supposed to make combat more realistic or model your character in more detail or whatever.
And so these became basically shovelware, heartbreakers because you got excited by each one only to find out the rules were at worst unplayable or at best not any better than regular D&D.
It seems we’re in the era of “OS heartbreakers” and “language heartbreakers” now.
Cute aesthetically (I would compare it to Haiku but lugubriously 2000s/2010s instead), but what makes it interesting at the back of the cabinet? What differentiates it from everything else?
Skimming the source code, it looks as if the main thing is the complete lack of security. System calls with unknown arguments panic the kernel, others blindly trust the caller. For example, if you do an
open
system call, nothing validates the path length, the kernel then allocates sufficient space to hold a copy, doesn’t check for allocation failure, and then copies over the returned pointer (I don’t know how allocation failure is handled, but if it returns null then now you’ve either got a kernel-mode null-pointer dereference or a kernel-mode memory overwrite primitive, depending on how the MMU is configured - does it even have a kernel / userspace separation).This is the kind of thing that modern C++ would make very easy to avoid, with some higher-level constructions. Starting in 2017, C++14 support was pretty mature and C++17 just provides some small cleanups rather than anything fundamentally better (
auto
parameters on lambdas were introduced in C++14 and they were the last thing that made particularly big improvements for things like this).Ahhh, the good ol’ days! Unfortunately, I suspect a lot of people talking about “bloat” would basically consider all this unnecessary even if that’s what reality needs.
As an alternative, as much as Serenity has heart albeit not originality, they are using modern C++ effectively.
Therefore not a microkernel multiserver system.
Basically a toy like Linux. Thanks for the heads up.
Nobody said it was a microkernel. In fact, the word “micro” never appears on the gitlab page for the project.
A toy by means of not being a microkernel, if I wasn’t clear enough.