just a word about language vs os: long time I have thought of ways to make a better programming-language, especially with parallel processing in mind. I realized several things:
the difference between os and language is that in addition to what an os does do a language provides a human user interface. i.e. the ideal language would allow any input to produce any program possible. sort of like a programming language programming language. the ideal language would not be so ideal at all since humans do not like their interface having too many options. so one can drop this aspect and cope with it some centuries later.
something an os does provide but is better handled by language would be the notion of abstraction. for example linux provides an abstraction layer for the file-system, so that programmers can handle their files in an unified standard way. the reason why this would better be handled by languages is that bureaucracy is added and there's no possibility to optimize it out during compile-time. if this were part of the language then the things could be handled by inline-code. in reality however the overhead isn't that bad, and a language would need to provide non-inlined too.
the major problem with parallel processing has been introduced by the attempt to wrap it into an abstraction: threading! when I run multiple programs at the same time, the output of each is sent to one and the same console, and afterwards cannot be seperated. while debugging also it isn't visible how the different threads interoperate as they all are in the same debugging session. wouldn't it be better to run a separate os on each core, handling the code as single-core os? well, of course not, these problems can be solved at the level of programming language.
the reason why the compiler cannot automatically create threads on its own without being programmed to do so is that our concept of programming is centered around procedual execution. for example in mathematics every algorithm is a sequence of things that need to be done one after the other. there are attempts to break out of that though. for example the startup-files of my os are started according to what requirements they have. so instead of writing what sequence needs to be computed, let the software figure out in what order the commands need to be executed and if at all. I think it's obvious now, this is something the os should do, in cooperation with the programming-language. I think this is the direction os4e should be heading to. mere memory-management wont cut it! so forget threading-support, build a scheduler instead!