So far no major OS has picked C++, Java or any other language than C as a first class citizen either. All of the OS related loadable library APIs are still C.
Doesn't seem to slow down any of those languages, though.
For the sake of clarity, Windows is supposed to be written in C and C++ (the kernel in C, the rest in C++).
2. I'd be interested to know why Servo is a "pipe dream".
3. Why does a major OS need to pick up Rust as a "first class citizen", when they haven't done so for JavaScript, Java, Python, PHP, Ruby, Go, D, Scala, Haskell, Lua, Clojure, etc. etc.?
Those guys are insanely good. And you can help them make redox a major OS by contributing.
> no major OS seems to be picking up Rust as a first class citizen,
What would this mean to you?eg Python and Perl get shipped by default in most Linux distros base image, whereas Java or Ruby don't tend to be.
Whereas C doesn't have a compiler shipped in some/most base images - despite C being about as first class as languages get on Unix.
Only C (and therefore to some extent C++) is the first class citizen in all the major OS families we care about, because the C ABI is the standard for compiled objects (whether executable or library).
Without question.
The interesting question to me is (if starting again) whether ABI stability/compatibility is something that is necessary or desirable for userspace citizens to interoperate with each other and the kernel.
Well, on Windows there's COM for this, which is technically the C ABI too, but really deserves to be considered its own thing.
It's regrettable that C++ currently has an advantage over Rust in this regard...
The C++ ABI of Microsoft Visual Studio is stable since practically forever, albeit with a severe restriction: the language ABI is stable, but not the C++ (or even C) standard library ABI - every Visual Studio release comes with a new incompatible msvcrNNN.dll. But you can load as many different runtime libraries into a process as you like, the big practical restriction is that you can't pass standard library objects allocated by one runtime to a different one.
The C++ ABI of GCC is stable since version 3.2, released in 2002, on x86 platforms (there were numerous fixes in later releases for other platforms). They even managed to retrofit new incompatible C++11 requirements on std::string with some preprocessor hackery and namespace mangling, without bumping the libstdc++ SONAME.
As usual, on macOS the situation isn't as good because they threw out libstdc++ for some clang reinvention of the wheel.
In summary, if you're writing a C API/ABI, source compatibility is still a major advantage, there is no two ways around it.