Nightingale is an operating system for x86_64 that I have been developing for 7 years to learn about low-level programming and operating system design.
Nightingale implements a mostly POSIX-like userland, though compliance is not a goal. I see POSIX as useful as a well-understood and documented interface, and one that permits compatability with large amounts of existing software.
For more specific feature and capability information, see ABOUT.md.
Nightingale uses the CMake build system, and you can find package requirements in the GitHub Actions workflow files.
- To build, execute
makein the root of the project. - To run, use
./run.rb- its help text will show the available options
doc: Documentationinclude: Header files for the whole systeminterface: Interface definitions for syscalls and errno valueskernel: The core of the operating systemlibc: Common userland routines, including things likeprintflinker: Kernel module loader, userland dynamic linker, andlibelfscript: Utility scripts for building and developing nightingaletoolchain: CMake toolchain filesuser: In-tree usermode programs distributed with the system
bt.bash: convenience wrapper aroundaddr2linefor backtracingdump.bash: convenience wrapper aroundobjdumpformat.bash: convenience wrapper aroundclang-formatmake.bash: core build engine for the projectrun.rb: convenience wrapper aroundqemu-system-x86_64
These manifest files define the public syscall interface of the nightingale kernel, they are rendered into C enums and metadata that is used by both the kernel and the C library.
ERRNOS: defines the values oferrno, their names, and theirperrorstringsSYSCALLS: defines syscall numbers, types, and arguments
