logo

Halos: a light operating system

Halos has the following goals:

  • To run the Jail VM
    Provide the services necessary for the Jail virtual machine to run. The Jail VM is being developed here
  • To be POSIX/SUSv3 compliant
    That does not mean "to provide all the tools that POSIX prescribes for operating systems": it means "to provide the semantics for system calls as prescribed by POSIX/SUSv3". The tools that will run on Halos are outside the scope of this project
    Note: Halos-the-kernel provides nothing even close to system calls. However, there will be a kernel-space driver that will provide the necessary system calls for POSIX compliance..
  • To develop a micro-kernel
    Halos will be based on a micro-kernel architecture: it will provide:
    • memory management for physical memory
    • event management for hardware events (i.e. the possibility to register handlers for hardware events)
    • all the necessary building blocks to add things like:
      • scheduling
      • inter-process communication
      • driver development
    • it will at most provide a minimalist API for kernel services but all drivers that can live in user-space, shall live in user-space. Note, though, that you need a driver to be able to live in user-space...
  • To target x86, PowerPC and SPARC (first)
    These are the three platforms that are deployed on the widest scale, and present the interesting challenge of being big-endian and little-endian, not having the same atomic instructions, etc.
    These are also the primary target architectures for the Jail VM
  • To be multi-boot compliant
    at least on x86, be loadable by the GRUB
  • To use Newlib as a libc
    so as to not have to write a libc ourselves

The architecture

The kernel's life-cycle goes through three phases: bootstrapping, initialization and running. Bootstrapping is basically the process of being loaded by a boot loader such as GNU's GRUB. Initialization basically means preparing the different subsystems for action and running can either be a simple while (1); or a call into a scheduler. The subsystems are:
  • event handling
  • physical memory management
  • driver management
Did you note that there is no virtual memory, no scheduling, no filesystem, no networking, no human interface, ... in there? That's because Halos is a micro-kernel. Usually, with a micro-kernel we mean a kernel that doesn't do much of anything other than inter-process communication. Halos doesn't assume that there is such a thing as a process (though it provides a convenience API for those that want to use it, to make sure schedulers will be compatible with eachother at least on that point). It doesn't assume that there is such a thing as a file system, or a human interface, or a human being for that matter. Halos provides the basic architecture to take control of the machine. To do anything more than that, you need drivers - which it will be happy to manage for you. Hence, some would say Halos is not a micro-kernel: it's a nano-kernel. I'm fine with that - as long as you get the meaning, all is well.