Deploy Operator OS on resource-constrained hardware including Raspberry Pi, RISC-V boards, and other ARM/x86 edge devices. Covers cross-compilation, auto-start with systemd, and hardware interface access.
Operator OS was designed from the ground up for constrained environments. Its Go runtime, CGO-free build, and single-binary distribution make it uniquely suited to edge hardware that cannot run typical Node.js or Python agent frameworks.
<10 MB RAM
99% smaller memory footprint than equivalent Python or Node.js agents.
<1s boot
Cold starts in under one second, even on single-core 0.6 GHz processors.
Single binary
No runtime dependencies, no package manager, no interpreter — copy and run.
Operator OS uses CGO_ENABLED=0, which means you can cross-compile for any target from any host with Go 1.25+ installed. No toolchain, no sysroot.
ARM64
ARMv7
RISC-V 64
All platforms
# For Raspberry Pi 3, 4, 5 and Zero 2 W (64-bit OS)GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build \ -tags stdjson \ -ldflags "-s -w" \ -o build/operator-linux-arm64 \ ./cmd/operator
Or use the Makefile shortcut:
make build-linux-arm64
# For Raspberry Pi Zero 2 W (32-bit OS) and other ARMv7 boardsGOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=0 go build \ -tags stdjson \ -ldflags "-s -w" \ -o build/operator-linux-arm \ ./cmd/operator
Or use the Makefile shortcut:
make build-linux-arm
To build both 32-bit and 64-bit Pi binaries at once:
This produces binaries in build/ for: linux-amd64, linux-arm64, linux-arm (ARMv7 and ARMv6), linux-riscv64, linux-loong64, darwin-arm64, and windows-amd64.exe.
On the Zero 2 W, expect roughly 6–8 MB RSS at steady state when connected to one channel.
The original Pi Zero uses a single-core ARM1176JZF-S (ARMv6). Use the GOARM=6 build:
# Cross-compile on your build machineGOOS=linux GOARCH=arm GOARM=6 CGO_ENABLED=0 go build \ -tags stdjson \ -ldflags "-s -w" \ -o build/operator-linux-armv6 \ ./cmd/operatorscp build/operator-linux-armv6[email protected]:/usr/local/bin/operatorchmod +x /usr/local/bin/operator
The Pi Zero (first generation) has only 512 MB RAM and a 700 MHz single-core CPU. Disable all unnecessary channels and use a fast, low-latency model to avoid timeout issues.
SPI devices are accessible via /dev/spidev*. Enable SPI on Raspberry Pi by adding dtparam=spi=on to /boot/config.txt and rebooting. The spi-tools package provides spi-config and spi-pipe for testing.
You can instruct the agent to periodically poll sensors using the built-in cron tool and store readings in the workspace. This enables autonomous environmental monitoring without any additional application code.
sudo systemctl status operator.servicesudo journalctl -u operator.service -f
On systems without systemd (e.g., Alpine Linux with OpenRC), use a similar /etc/init.d/operator script or run the gateway under supervise / s6-svscan. The binary has no dependencies on systemd itself.