The kernel is pretty much from scratch. It provides a FreeBSD compatible syscall interface for the syscalls that BEAM calls, as well as the FreeBSD runtime loader. I do make healthy use of FreeBSD libraries to provide the OS, you can get an idea of what I pull from the file names in the Makefile [1]. Building an OS is a lot, so I tried to stick to the parts I find fun and interesting. Things like a NIC driver in Erlang [2] (with NIFs to copy to/from device memory). But process / thread creation is original, memory management is original (not necessarily good), time keeping is original, etc. I used existing code and interfaces so I didn't have to write a bootloader, memcpy, and lots of other stuff.<p>[1] <a href="https://github.com/russor/crazierl/blob/main/Makefile#L23" rel="nofollow">https://github.com/russor/crazierl/blob/main/Makefile#L23</a><p>[2] <a href="https://github.com/russor/crazierl/blob/main/src/rtl_8168.erl" rel="nofollow">https://github.com/russor/crazierl/blob/main/src/rtl_8168.er...</a>