5 ms·
Is the OS implemented from scratch, or is it a stripped down version of some existing OS?
by mixedbit 6mo ago
Is the OS implemented from scratch, or is it a stripped down version of some existing OS?
- toast0 6mo agoThe 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. [1] https://github.com/russor/crazierl/blob/main/Makefile#L23 https://github.com/russor/crazierl/blob/main/Makefile#L23 [2] https://github.com/russor/crazierl/blob/main/src/rtl_8168.erl https://github.com/russor/crazierl/blob/main/src/rtl_8168.er...
- asenchi 6mo agoDragonFlyBSD would be really interesting here as well since its kernel has Light Weight Kernel Threads that use message passing. Similar in shape to Erlang/BEAM. Though I guess you've built the kernel in Erlang... so wrong abstraction.
- toast0 6mo agoMy kernel is in C. BEAM is in userspace. Most of the drivers are in userspace too. Turns out, if you let userspace mmap whatever address it wants to, and have access to all the i/o ports, plus have a way to hook interrupts, you can write drivers in userspace. You could run beam as init with an existing kernel, but I wanted to explore something with less kernel.