https://github.com/9xbt/bentobox
64-bit SMP-enabled operating system targeting x86_64 and aarch64
https://github.com/9xbt/bentobox
aarch64 c kernel operating-system os posix-compatible smp x86-64
Last synced: 4 days ago
JSON representation
64-bit SMP-enabled operating system targeting x86_64 and aarch64
- Host: GitHub
- URL: https://github.com/9xbt/bentobox
- Owner: 9xbt
- License: bsd-2-clause
- Created: 2025-03-18T20:03:43.000Z (10 months ago)
- Default Branch: rewrite
- Last Pushed: 2026-01-10T17:22:43.000Z (9 days ago)
- Last Synced: 2026-01-11T03:55:44.915Z (9 days ago)
- Topics: aarch64, c, kernel, operating-system, os, posix-compatible, smp, x86-64
- Language: C
- Homepage:
- Size: 8.52 MB
- Stars: 20
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# bentobox
bentobox is a 64-bit SMP-enabled operating system targeting x86_64 and aarch64.
## Features
- SMP capable preemptive modular kernel with full multi-architecture support
- POSIX compatibility
- IPC: Pipes, UNIX domain sockets, signals
- Ports: Xorg, bash, coreutils, vim, fastfetch & more
- Filesystems: ext2, devfs, tmpfs, procfs
- Block devices: AHCI
- Interrupt controllers: APIC (x86_64), GICv2 (aarch64)
- ACPI table parsing & full ACPI mode using LAI
- PCI & PCIe support
- Input devices: PS/2 (x86_64), virtio-input (aarch64)
- Elf64 modules & binaries, VMM with CoW support
## Building the toolchain
Packages required:
- git
- base-devel
Start by sourcing the environment. Run `. build/mlibc-root`.
> [!NOTE]
> To build an aarch64 toolchain, run `. build/mlibc-root aarch64` instead.
Now build binutils. Run `./util/binutils.sh`.
Then, install mlibc headers for the GCC cross compiler. Run `make -f build/mlibc.mk headers`.
Now you can build the GCC cross compiler. Run `./util/gcc.sh`.
## Building the userspace
Packages required:
- git
- meson
Start by building mlibc. Run `make -f build/mlibc.mk resetup build install`.
> [!NOTE]
> To build mlibc for aarch64, append `ARCH=aarch64` to the make command.
Afterwards, rebuild libgcc. Run `./util/libgcc.sh`.
Now proceed to build the ports below.
> [!TIP]
> Run `./build/strip-bin` after building the ports to reduce their size.
Finally, run `make hdd -j$(nproc)` to make the HDD image (or `make livecd -j$(nproc)` if you prefer an initrd).
## Ports
### bash
Run `./ports/bash.sh`.
### gnulib
Packages required:
- autoconf
- automake
- gettext
- autopoint
- m4
- wget
Run `./ports/gnulib.sh`.
### coreutils
Packages required:
- bison
- gperf
- texinfo
Dependencies:
- gnulib
Run `./ports/coreutils.sh`.
### lua
Run `./ports/lua.sh`.
### figlet
Run `./ports/figlet.sh`.
### doomgeneric
Run `./ports/doomgeneric.sh`.
### fastfetch
Packages required:
- cmake
Run `./ports/fastfetch.sh`.
### ncurses
Run `./ports/ncurses.sh`.
### vim
Dependencies:
- ncurses
Run `./ports/vim.sh`.
### nyancat
Run `./ports/nyancat.sh`.
### Xorg
Run `./ports/Xorg.sh` to build all Xorg-related libraries and `xorg-server`.
### twm
Dependencies:
- Xorg
Run `./ports/twm.sh`.
### xev
Dependencies:
- Xorg
Run `./ports/xev.sh`.
### xeyes
Dependencies:
- Xorg
Run `./ports/xeyes.sh`.
### xclock
Dependencies:
- Xorg
Run `./ports/xclock.sh`.
### nes_emu
Dependencies:
- Xorg
Run `./ports/nes_emu.sh`.
## Building the kernel
### x86_64
Packages required:
- git
- gmake
- gcc
- binutils
- xorriso
- nasm
- genext2fs
First run `make kernel-deps` to get the dependencies, then run `make run -j$(nproc)` to run it in QEMU.
### aarch64
Packages required:
- git
- gmake
- xorriso
Run `make kernel-deps` to get the dependencies, then run `make run -j$(nproc) ARCH=aarch64` to run it in QEMU.
## Screenshots