https://github.com/tyler569/nightingale
A small operating system where I experiment and learn osdev.
https://github.com/tyler569/nightingale
kernel nightingale operating-system os osdev
Last synced: 12 days ago
JSON representation
A small operating system where I experiment and learn osdev.
- Host: GitHub
- URL: https://github.com/tyler569/nightingale
- Owner: tyler569
- License: gpl-3.0
- Created: 2017-02-01T15:28:03.000Z (about 9 years ago)
- Default Branch: main
- Last Pushed: 2025-12-25T23:09:35.000Z (3 months ago)
- Last Synced: 2025-12-27T09:34:34.012Z (3 months ago)
- Topics: kernel, nightingale, operating-system, os, osdev
- Language: C
- Homepage:
- Size: 9.34 MB
- Stars: 133
- Watchers: 10
- Forks: 10
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Nightingale
## About
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](/doc/ABOUT.md).
## Building nightingale
Nightingale uses the CMake build system, and you can find package
requirements in the GitHub Actions workflow files.
- To build, execute `make` in the root of the project.
- To run, use `./run.rb` - its help text will show the available options
## Project map
### Directories
- `doc`: Documentation
- `include`: Header files for the whole system
- `interface`: Interface definitions for syscalls and errno values
- `kernel`: The core of the operating system
- `libc`: Common userland routines, including things like `printf`
- `linker`: Kernel module loader, userland dynamic linker, and `libelf`
- `script`: Utility scripts for building and developing nightingale
- `toolchain`: CMake toolchain files
- `user`: In-tree usermode programs distributed with the system
### Scripts
- `bt.bash`: convenience wrapper around `addr2line` for backtracing
- `dump.bash`: convenience wrapper around `objdump`
- `format.bash`: convenience wrapper around `clang-format`
- `make.bash`: core build engine for the project
- `run.rb`: convenience wrapper around `qemu-system-x86_64`
### Interface Manifests
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 of `errno`, their names, and their `perror`
strings
- `SYSCALLS`: defines syscall numbers, types, and arguments