LSE/OS, an operating system for x86 (but not only).
GENERAL REQUIREMENTS OF LSE/OS
PhilosophyLSE/OS shall be viable.
LSE/OS shall abandon the monolithic model: It is true that the monolithic kernel model is simple and has been well-tried, but at long-term there is a possibility we can't master all internal links that were made among all built-in services (locks, global variables, system priority levels) and that could lead to unpredictable results (deadlocks, errors, freeze of the system).
LSE/OS shall offer the same services as in a Unix system.
LSE/OS shall emulate a Unix system with a glue.
LSE/OS shall be small but extensible (modular)
LSE/OS shall unify disk and memory handling (McKusick): otherwise it induces a lot of code redundancy.
LSE/OS shall have only one libc for kernel, drivers and processes: for the same reasons as above.
LSE/OS shall not crash: It is true that todays kernels are quite stable but they sometime crash without any reason and this is inadmissible.
LSE/OS shall rely under the hardware to the max (Mach philosophy)
LSE/OS shall not stack contexts but use "context linking": that excludes stack overflows
LSE/OS entire kernel shall work in fully "scalar" mode (without the need of an FPU).
LSE/OS shall be fully written in C language (gcc). Assembly calls are wrapped into C functions.
LSE/OS code for managing peripheral shall be out of the core kernel: making services independant leads to a better global stability (tends to eliminate deadlock conditions).
LSE/OS Drivers shall be normal userland processes.
LSE/OS Drivers shall be reusable (backward compatibility of binaries)
There shan't be spl() like functions in LSE/OS: interrupt handlers are not interruptible (this is the default for x86 taskgates).
LSE/OS shall support VM86 extension.
LSE/OS shall support SMP (Symetric Multi-Processing).
LSE/OS shall define a subset of syscalls for drivers needs (unlike POSIX).
Macro-syscalls (e.g. fork(), execve()) shall be emulated with smaller syscalls (this implies that they are not system bottle necks anymore)
LSE/OS shall manage 64bits process ids.
LSE/OS shall manage errnos but also sub-errnos for more accurate descriptions of errors
Memory manager requirements
LSE/OS shall manage infinite memory space.
LSE/OS shall not dedicate special memory for management: especially we exclude buddy allocators.
LSE/OS shall be secure: a normal user can't become a superuser.
LSE/OS shall respect anonymity: memory pages shall be cleaned when they are freed.
LSE/OS shall be MAC (Mandatory Access Control) compliant.