Github, sourcehut (canonical).

Bluejay is a kernel for x86. Goals include full multitasking, file system support, and some additional features copied from UNIX. Additionally I plan to support Lisp as a first-class language both for user-space programs and for kernel/driver development.

Style Guide

Here is a brief style guide for code contributed to Bluejay, more for myself than anyone else:

  • Each project should go in its own directory with its own Jmk file.
  • Run clang-format before committing
  • Important: to differentiate virtual and physical addresses, append _p to physical addresses (and probably store them as a uint instead of a pointer). The macros VIRT_TO_PHYS and PHYS_TO_VIRT work to convert only kernel-space addresses, not addresses belonging to processes outside the default 8mb kernel memory.

Building and running

Please consult the doc/building.9 manual page for building and debugging information. In short: run Jmk and make qemu.

Testing and build configuration

You can put build options in Jmk.options in the same directory as the corresponding Jmk file. This file should contain Makefile-formatted defines.

For example, to test PCI drivers and the allocator, you could put something like this in src/kernel/Jmk.options


For a list of possible tests check the #ifdefs in kmain.c


See Bluejay/Debugging.


Contributions are welcome. Please submit a patch to my mailing list, or if you prefer, submit a PR on github.

If you have any questions about contributing or just using Bluejay, feel free to email the mailing list or contact me via Jabber/XMPP at