Current features include:
- SMP
- RTTI, Exceptions, STL-like scoped locks, smart pointers, vectors, and minimal undefined behavoir sanitizer in the kernel
- full runtime support in user space using the musl C library and GNU libstdc++
- GCC cross compiler for the
*-zagtos
target for user space code - ZBON, a binary data serialization format, used for message passing and for program binaries, which are converted from ELF
- Memory Management and Futexes with a Linux-like syscall interface
- Message passing IPC which is also used for passing handles for access restricted things, like a region of physical address space, or an IPC Port of another user-space Process
- Interrupt handling by user space Processes (still missing a lot of cases)
- Bootloader/Kernel handover protocol designed with Live Kernel upgrades in mind (currently the bootloader loads a first Process, which contains the following processes, instead of an initrd-like mechanism)
- Bootloader for both UEFI and Multiboot2
- An own build tool to track dependencies between subprojects
- DebugBridge that can collect core dumps of Processes over the (virtual) serial port
- Currently only x86_64, but written with portability in mind
- Current area of work: first device drivers (PS/2 and AHCI)
Requirements
- everything required to build gcc
- GNU EFI for the UEFI loader
- GNU parted, mtools, GRUB to create the disk image
If all of these are installed, you should be able to build with just:
make
(This has not been tested on many systems yet, please let me know in which way it goes wrong)
Once the build is complete, a BIOS and UEFI bootable disk image is created at out/disk.img
. Scripts for running the system in different emulaters are in the emulate
directory, intended to be used from the project root like:
./emulate/kvm.sh
For VirtualBox, additional setup of the VM is required. The Paravirtualization type needs to be set to minimal
, and for the DebugBridge to work, the serial port COM1 needs to be bound to TCP port 30000. The script currently assumes the VM is called Test
. On launch it coverts the disk.img
to disk.vdi
which can be added to the VM.
src/ACPIHAL/acpica
The ACPICA ACPI library. Used for user-space ACPI support (GPLv2)src/kernel/memory/dlmalloc.c
dlmalloc Allocator used in the Kernel (Public Domain)src/binutils
GNU Binutilssrc/gcc
GNU GCC, incldung libgcc, libsupc++, libstdc++src/gmp
,src/mpc
,src/mpfr
GCC dependencies, not yet usedsrc/musl
musl C library (MIT/BSD)
ZagtOS is released under the GNU General Public License (GPLv3)