Thanks! This is intentionally not going to be a Unix-like OS, so no POSIX :)
I haven't thought about the API yet, there's much to be done before I get to that stage. But I have some rough ideas: * User tasks should communicate with the kernel and other userspace tasks through statically typed channels (both sync and async) * Those statically typed channels are going to drive one or more state machines within each task * This allows composing processes around a Channel[T] interface, with special types of channels for Source[T] and Sink[T] (there could be multiple of these per task). No more text-oriented stdin/stdout composition. * No signals; tasks can receive async events through channels and react accordingly. I'm still not sure how to safely handle CPU-bound tasks that need to be interrupted (i.e. cancellation). * No threads; tasks will be single-threaded with an event loop. Concurrency can be achieved through coroutines (which requires a userspace scheduler). All of this is obviously just ideas at this point. But it's what I'm aiming for.