Solar wrote:In the end, OS API design is at least as much important (and a question of personal style) as some nifty kernel features. Other things are also important, like, can different languages use the same API (and each other's libraries)...
I would say, design your lower-level libraries keeping in mind that you'll have to be able to emulate POSIX or ISO C on top of it. As long as you can do that, possibly with an unintentional or intentional speed loss, you can support older style programming and your newer style.
I only recently found the Wiki page for C++0x and just about all the things I've figured out for my own OS are in the new stdlib... so I've turned a bit around and started to implement most of that instead. It's going to be pretty bare for non-C++ programmers and they still lack a few things I did include (which are pretty easy to add, such as write&forget and read&ignore, first is a nonblocking write that just buffers in kernel memory, second is a read that imitates a read by reading to a nonpaged page).
One thing I'm struggling with is how to present the user with explicit buffers, so that you don't pass a buffer to read() but you get a buffer from it instead, and you don't retain your buffer after write() but you give it up to him instead. That way, zero-copy implementation is trivial.