Project Documentation
README.md
Overview
AvyOS
A Linux-based operating system written entirely in pure Go —
no external packages, no CGO, no POSIX compatibility.
What is avyos?
avyos is an operating system project. It uses the Linux kernel for hardware support and booting, but rethinks the “system layer” (init, services, core tools, UI stack) in pure Go with CGO disabled.
If you’re not an OS person: you can think of avyos as “a Linux-based OS image with its own Go-written system core”.
What makes it different?
- Immutable system core
The OS core is mounted at /avyos and treated as read-only at runtime.
- Clear separation of state
Apps, configuration, user data, and runtime files live in separate writable locations (/apps, /config, /users, /cache).
- Service-driven capabilities
Instead of letting apps poke low-level system resources directly, privileged operations are intended to be exposed via services and accessed through authenticated IPC.
- Optional Linux compatibility layer
A distro root filesystem can be provided at /linux and run in a restricted container for compatibility and reuse of existing Linux userland resources.
For the detailed system breakdown and code map, see ARCHITECTURE.md.
Try avyos (no source code required)
You can try avyos in QEMU using prebuilt release images.
Option A: One-command runner (recommended)
This tool downloads the right release ZIP for your architecture and starts QEMU:
go run avyos.dev/tools/runimage@latest
Supported flags (from tools/runimage):
--arch <arch>: target architecture (default: your hostGOARCH, e.g.amd64,arm64)--branch <name>: release tag/branch to download (default:main)--cpu <n>: CPU cores for QEMU (default:2)--memory <size>: RAM for QEMU (default:2G)--vnc <display>: start VNC server (example:0)--dbg-port <port>: forwardhost:port → guest:5037(default:5037,0disables)
Any extra arguments after the flags are passed directly to QEMU.
Examples:
go run avyos.dev/tools/runimage@latest --vnc :0
go run avyos.dev/tools/runimage@latest --cpu 4 --memory 4G
go run avyos.dev/tools/runimage@latest --dbg-port 0
Requirements: Go + QEMU installed on your machine.
Option B: Download a release ZIP and run QEMU manually
Releases are published on GitHub Releases page
Each release provides assets arch-specific ZIP named like:
avyos-<release>-amd64.zipavyos-<release>-arm64.zip
The ZIP contains:
disk.imgfirmwarevariables
Unzip it, then run QEMU from that directory.
amd64
qemu-system-x86_64 \
-smp 2 -m 2G \
-serial mon:stdio \
-nic user,model=virtio-net-pci,hostfwd=tcp:127.0.0.1:5037-:5037 \
-vga none \
-device virtio-gpu-pci \
-device virtio-keyboard-pci \
-device virtio-mouse-pci \
-drive if=pflash,file=firmware,readonly=on,format=raw \
-drive if=pflash,file=variables,format=raw \
-drive file=disk.img,format=raw
arm64
qemu-system-aarch64 \
-M virt -cpu cortex-a57 \
-smp 2 -m 2G \
-serial mon:stdio \
-nic user,model=virtio-net-pci,hostfwd=tcp:127.0.0.1:5037-:5037 \
-vga none \
-device virtio-gpu-pci \
-device virtio-keyboard-pci \
-device virtio-mouse-pci \
-drive if=pflash,file=firmware,readonly=on,format=raw \
-drive if=pflash,file=variables,format=raw \
-drive file=disk.img,format=raw
Notes:
- The networking rule forwards host TCP
5037to the guestdbgdservice on5037. Remove thehostfwd=...part if you don’t want it. - Add
-vnc :0to enable VNC output.
Docs
- Building and running from source:
BUILDING.md - Architecture:
ARCHITECTURE.md - Developer workflows:
DEVELOPERS.md - Contributing:
CONTRIBUTING.md
License
See LICENSE.