A Linux-based operating system written entirely in pure Go —
no external packages, no CGO, no POSIX compatibility.
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”.
-
Immutable system core
The OS core is mounted at/avyosand 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/linuxand 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.
You can try avyos in QEMU using prebuilt release images.
This tool downloads the right release ZIP for your architecture and starts QEMU:
go run avyos.dev/tools/runimage@latestSupported 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:
# Run with VNC on :0
go run avyos.dev/tools/runimage@latest --vnc :0
# Use 4 cores and 4G RAM
go run avyos.dev/tools/runimage@latest --cpu 4 --memory 4G
# Disable dbgd port forwarding
go run avyos.dev/tools/runimage@latest --dbg-port 0Requirements: Go + QEMU installed on your machine.
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.
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=rawqemu-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=rawNotes:
- 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.
- Building and running from source:
BUILDING.md - Architecture:
ARCHITECTURE.md - Developer workflows:
DEVELOPERS.md - Contributing:
CONTRIBUTING.md
See LICENSE.
