A tiny hobby OS kernel in Rust that boots with GRUB and plays an animated ASCII parrot (inspired by the old curl parrot.live vibe).
This project is archived and no longer actively maintained.
- Boots a 32-bit
no_stdRust kernel via Multiboot2 + GRUB - Sets up basic PIC/IDT/PIT timer interrupts
- Writes directly to VGA text memory (
0xb8000) - Loops through colored ASCII parrot frames forever
- Rust nightly (
nightly-2023-10-01, pinned inrust-toolchain.toml) - Custom Rust target:
i686-unknown-none.json build-stdforcoreandcompiler_builtins- Linker script:
linker.ld
rustup+ Cargogrub-mkrescue(and its ISO backend, usuallyxorriso)qemu-system-x86_64(only needed forscripts/run_iso.sh)- Bash
Build kernel + bootable ISO:
scripts/build_iso.shOutput:
target/rust_os.iso
Build + run in QEMU:
scripts/run_iso.shscripts/build_iso.sh- Runs
cargo build --target i686-unknown-none.json - Copies kernel + GRUB config into an ISO root
- Creates
target/rust_os.isowithgrub-mkrescue
- Runs
scripts/run_iso.sh- Calls
scripts/build_iso.sh - Boots ISO with QEMU (
-display gtk)
- Calls
cargo build --target i686-unknown-none.jsonKernel ELF output:
target/i686-unknown-none/debug/rust_os
src/main.rs- kernel entry and animation loopsrc/boot.s- Multiboot2 header +_startsrc/interrupts.rs/src/interrupts.s- IDT, PIC/PIT setup, IRQ0 handlersrc/timer.rs- tick counter +hlt-based sleepsrc/vga.rs- VGA text mode writeriso/boot/grub/grub.cfg- GRUB menu entryi686-unknown-none.json- custom compilation targetlinker.ld- kernel memory layout and section placement
scripts/run_iso.shuses-display gtk; run it in a GUI session.- If you only want an artifact,
scripts/build_iso.shis enough.
MIT - see LICENSE.