Packages
GoNIX has its own package manager, pkg — a CRUX-style, Go-native tool with
a binary repository, dependency resolution, checksum verification, and in-place
upgrades of a running system.
Hybrid: binary by default, source when needed
pkg ships a binary package for everything in the repository. When a port has no
prebuilt binary, pkg falls back to building it from source on the device —
GoNIX carries a small C toolchain (musl + tcc) and a Go toolchain for exactly
this.
$ pkg update # refresh the cached index
$ pkg install htop # resolve deps, verify sha256, install
$ pkg search browser # search the ports catalog
$ pkg upgrade # move installed packages forward
Packages are plain (uncompressed) tar archives named
name#version-release.tar.gz, with a /var/db/pkg database tracking what’s
installed. Versions order with dpkg-style comparison, so upgrades only ever move
forward (unless you force them).
The uLinux package foundation
The repository lives at pkgs.ulinux.org — the uLinux package ecosystem GoNIX is built on. It serves both architectures at parity:
| Arch | Index |
|---|---|
amd64 |
https://pkgs.ulinux.org/amd64/PKGINDEX |
arm64 |
https://pkgs.ulinux.org/arm64/PKGINDEX |
Everything — the base system, the C/Go toolchains, the from-source library stack, the Wayland desktop, the browser and editor suite — is a package there.
Self-upgradeable base
Even GoNIX’s own base — coreutils, init, pkg itself — ships as tracked,
versioned packages. pkg upgrade coreutils hot-swaps the userland on a running
machine; only init (PID 1) waits for the next reboot. The OS updates itself the
same way it updates anything else.