It's a microkernel, with some driver management inside the kernel. You can find a little more information about it on the Wiki pages which seem to be attached to the repository. The scheduler uses a lottery-based algorithm, but the random number generation uses FPU-based instructions and I don't like the software FPU emulation. They appear to return 0 until the FPU is initialised, so I load the bootstrap and execute it as the only process; it doesn't get scheduled out, until it initialises the FPU. IPC is exclusively message passing based for now, and I can copy across address spaces quite efficiently, without the need for kernel buffers. I use ELF as the executable format, simply because that's the one I understand the most (dynamic linking, relocations, etc.) My system calls weren't designed to be POSIX-compliant, but are relatively compatible. I still don't see the point of fork(), considering it's almost always followed by exec() or used to create a new process for incoming connections. My kernel has threads for that. However, a process can be loaded with an array of blocks which outline the contents of its address space, and a custom state. Given a little tweaking, that can work as a functioning fork() Virtual memory uses 4KiB pages for maximum compatibility with x86, and because I want a two-layer paging system so that I can keep my kernel heap consistent. At the moment, driver management isn't very secure. A driver is a process with added privileges. A process can become a driver through a simple BecomeDriver system call, passing a few details about the IRQ it needs. I'd like in future to add support for multiple IRQs, and more finely-grained port IO - at the moment a driver can access any port. I don't want this. All processes (including system and drivers) run in ring 3, so they can't freeze the system in two opcodes. Processes communicate and get access to services which aren't important to the kernel by using IPC, after retrieving the list of running processes from the kernel (there's also a fairly large amount of information which can be retrieved. I added a flags DWORD so the process doesn't get any irrelevant information.)
OSDev :)