Skip to content

Repository files navigation

Radix GNU/Linux Core

Radix 1.1.0 is the package manager at the center of Radix GNU/Linux. Packages live in an immutable store, profile changes create generations that can be rolled back, and recipes are Janet data rather than programs that run while they are being loaded. GNU Prolog handles the graph and policy checks built into the executable.

This repository builds packages, manages profiles, synchronizes pinned recipe repositories, constructs system closures, and can make an initramfs from a verified runtime profile. It is only the core, not a finished operating system. Package work is in radix-packages and the installer and live image are in radix-linux. The full distribution still depends on a stage-0 host bootstrap and has not completed security, update, hardware, or multi-user qualification.

Build requirements

The build host needs:

  • Janet 1.41 or newer, including headers and libjanet.a;
  • GNU Prolog 1.5 or newer;
  • a C toolchain, static libc development archives, binutils, Make, and xxd;
  • Bubblewrap for normal strict package builds; and
  • Git, curl, tar, and Python 3 for repository, download, and release checks.

Build the standalone executable with:

make build
./build/radix version

Provide explicit tool locations when necessary:

make build JANET=/path/to/janet GPLC=/path/to/gplc

The default build is static. RADIX_STATIC=0 creates a host-linked PIE for development and should not be distributed to systems with an incompatible loader or libc baseline.

Install

A per-user installation writes below ~/.local and keeps package state below $XDG_DATA_HOME/radix, or ~/.local/share/radix when XDG_DATA_HOME is unset:

make build
./install.sh

A root-managed installation uses /usr/local, /radix, and /run/current-system:

sudo ./install.sh --system

System mode is admin-managed; Radix does not yet provide a multi-user build daemon. Uninstall program files while preserving package state with:

./install.sh --uninstall

Add --purge only when the selected state root should also be removed.

Quick start

Use a checkout-local state directory for development:

export RADIX_ROOT="$PWD/.radix-state"
export RADIX_REPOSITORY="$PWD"
export RADIX_RUN_ROOT="$RADIX_ROOT/run"
export RADIX_SANDBOX=off

./radix search hello
./radix show hello
./radix install hello --libc=musl
./radix package --list-installed --list-generations
./radix remove hello

RADIX_SANDBOX=off is for trusted local testing only. Strict mode is the default for package builds. A recipe marked :bootstrap true still requires the operator to authorize host-readable bootstrap explicitly:

RADIX_ALLOW_HOST_BOOTSTRAP=1 ./build/radix build hello

System and boot-image example

The included examples/minimal-boot.janet declaration builds a Linux and static BusyBox runtime profile, verifies its closure, and writes a deterministic newc initramfs:

RADIX_ALLOW_HOST_BOOTSTRAP=1 ./build/radix system image \
  examples/minimal-boot.janet build/radix-boot
./scripts/inspect-initramfs.py build/radix-boot/initrd
./scripts/boot-vm.sh build/radix-boot

The Linux and BusyBox recipes are stage-0 bootstrap recipes. Their runtime outputs are Radix store objects, but their builds still use trusted host tools. Distributable 1.1 boot images must be assembled from the canonical /radix/store prefix.

Validation and release archives

Run the portable tests with:

make check

With Janet, GNU Prolog, and the native build toolchain available, run:

make check-native
make check-install
make release-gate

The slower QEMU gate is separate:

make check-boot

make source-dist creates build/radix-1.1.0.tar.gz and excludes local builds, test output, reports, caches, editor files, and local workspace files while retaining source tests, scripts, packages, workflows, license files, and documentation.

Documentation and licensing

DOCUMENTATION.md contains the architecture, command reference, recipe and repository formats, security boundaries, migration guidance, release history, and contribution process.

Radix is licensed under the GNU General Public License version 3 or later. See LICENSE for the project notice and COPYING for the complete GPLv3 terms.

The project does not currently publish a private vulnerability-reporting address. Until maintainers establish one, open a minimal public issue requesting private contact and do not publish exploit details for deployments you do not own.

About

A simple declarative package management system

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages