A minimal Linux-based operating system with a pure Go userland.
Explore the docs »
View Demo
·
Report Bug
·
Request Feature
RLXOS is an experimental operating system built from scratch with a userland entirely written in Go, using CGO_ENABLED=0
. This means all user space components are statically compiled and do not rely on the C runtime.
- Simplicity: Go is known for its simplicity and clean, unbloated syntax.
- Self-contained: Go produces statically linked binaries that don’t rely on external C libraries like
libc
. - Productivity: Go makes development fast and efficient with excellent package management, a rich standard library, and cross-compilation support.
- Low-level control: While not as granular as C/C++, Go offers enough control for low-level operations required here.
- Fun: No one has done this quite like this—so why not?
Make sure you have the following installed:
- Go 1.22+
- QEMU
- GCC
- Make
Install required packages:
sudo apt install qemu-system-x86 gcc make
- Clone the repository:
git clone https://github.com/itsmanjeet/rlxos.git
cd rlxos
- Build the OS:
make
- Run it using QEMU:
make run
- Start the debug shell:
go run rlxos.dev/tools/debug shell
Currently, after booting, you'll see a welcome message displaying the current FPS. It may look simple, but a lot is happening behind the scenes.
/cmd/init
starts as PID 1 from the initramfs and prepares the actual root filesystem, then re-invokes itself from the real root as/cmd/init
./cmd/init
launches/cmd/service
, which is the service manager.- The service manager starts
/services/display
and/services/udevd
for display and uevent listening. /cmd/capsule
listens to the QEMU serial port via/dev/ttyS0
.
- PID 1
init
andservice
manager -
cmd/capsule
: A Lisp-inspired interactive shell -
service/udevd
: Linux kernel uevent listener -
service/display
:kmsdrm
-based display service with Wayland protocol support -
service/audio
: ALSA-based audio support -
service/network
: Network interface service -
service/auth
: Authentication service
See the open issues for more.
Contributions make open-source amazing! Fork the repo and open a pull request.
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes
- Push to your branch
- Open a pull request
Distributed under the Unlicense. See the LICENSE
file for more details.