Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

For Linux (and NixOS) users

You know Linux. Maybe you know NixOS. solnix is neither — it is illumos managed with Nix. Most of your instincts transfer, but the substrate is different: a different kernel, a different init, a different filesystem, a different firewall, a different way to run containers. This page is the map. Each row points at the deeper handbook page.

If you know Nix already, the Nix half transfers almost unchanged (same language, store, module system) — see Learning Nix. What changes is everything the packages target. If you also came from Solaris/IPS packaging, read Learning Nix for the pkg → Nix mapping.

The one-screen map

You know (Linux / NixOS)On solnix (illumos)Where
systemd (systemctl, unit files, journalctl)SMF (svcs, svcadm, svccfg, XML manifests)SMF services
systemctl status / journalctl -usvcs -x + /var/svc/log/<fmri>.logSMF · Debugging
iptables / nftablesipfilter (ipf, ipnat)Networking
bridges / veth / tc / netnsCrossbow: dladm, ipadm, flowadmNetworking (Crossbow)
cgroups + namespaces / Docker / LXCZones (native), LX zones for Linux binsZones · LX zones
ext4 / xfs / btrfs + LVM / mdadmZFS (pool + datasets, checksums, snapshots)ZFS storage
/proc + strace / perf / ftrace / eBPFDTrace (+ truss, pargs, pfiles, procfs)DTrace · Debugging
apt / dnf / pacmanNixpkgs.solnix.*, declarative configLearning Nix
NixOS generations (Linux)Nix generations → ZFS boot environmentsBoot environments
GRUBloader (x86, FreeBSD-derived) / OpenBoot (SPARC)Boot environments
glibcillumos libc (pkgs.solnix.libc, not glibc)How solnix is built
ldd / patchelf / RPATH (GNU)elfdump + Solaris link-editor writing RUNPATHHow solnix is built
sudopfexec (RBAC/privilege-backed)see RBAC below
gdb / core dumpsMDB (mdb), coreadm, crash dumpsDebugging
hardware errors in dmesgFMA (fmadm faulty, fmdump)illumos features

The differences that actually bite

A few of these are more than a command swap — they change how you think:

Init is SMF, and SMF is always running. You do not write systemd units; you describe smf.services.* and solnix renders SMF manifests. When something is broken, the reflex is not journalctl — it is svcs -x, which walks the dependency graph and tells you which service is stuck and where its log is. A service that keeps crashing lands in maintenance (not a restart loop) until you svcadm clear it. See SMF services.

Containers are zones — and Linux binaries need an LX zone. A native zone is an isolated illumos environment on the shared kernel (stronger isolation than a container, near-native speed). But a native zone runs illumos userland. To run Linux binaries you use an LX-branded zone, which presents the Linux syscall ABI on the illumos kernel — no VM. On solnix, native zone tooling is early and LX is a roadmap item; see Zones and LX zones.

The filesystem is ZFS, all the way down — including your OS upgrades. There is no separate LVM/mdadm layer; ZFS is pool + volume manager + filesystem in one, with checksums and cheap snapshots. Crucially, your system generations live in ZFS too: each Nix generation is a boot environment (a bootable ZFS clone of root), so upgrade is atomic and rollback is instant — the same idea as NixOS generations, but the bootloader points at a whole bootable root dataset. See ZFS storage and Boot environments.

Observability is DTrace, not eBPF/strace/perf. DTrace predates them and does the whole job — kernel and userland, safe on production — from one language. Your strace foo becomes truss foo for quick work, and dtrace -n '...' for anything real. There is a /proc, but you inspect it with pargs, pfiles, pstack rather than reading files by hand. See DTrace.

pfexec, not sudo — and it’s backed by real privileges. illumos has fine-grained RBAC (roles) and process privileges — the kernel splits “root” into dozens of distinct privileges a process can hold or drop individually, and roles grant only the profiles a user needs. pfexec runs a command with the profiles your user is authorized for. This is least-privilege built into the OS, finer-grained than Linux capabilities and older. This handbook uses pfexec for privileged commands throughout.

The linker is Solaris ld, and there is no patchelf. Nix’s model bakes absolute /nix/store paths into binaries. On Linux nixpkgs that uses GNU ld and patchelf; on solnix the Solaris link-editor writes ELF RUNPATH and you inspect it with elfdump. Same outcome, native tooling. This matters if you package software that has GNU-linker assumptions baked in. See How solnix is built.

What solnix is not

To keep expectations straight (the full story is in the history):

  • Not Linux — different kernel, libc, and init.
  • Not NixOS — same Nix, different target OS.
  • Not Oracle Solaris — the open illumos branch, not Oracle’s closed product.

Where to go from here