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 -u | svcs -x + /var/svc/log/<fmri>.log | SMF · Debugging |
| iptables / nftables | ipfilter (ipf, ipnat) | Networking |
bridges / veth / tc / netns | Crossbow: dladm, ipadm, flowadm | Networking (Crossbow) |
| cgroups + namespaces / Docker / LXC | Zones (native), LX zones for Linux bins | Zones · LX zones |
| ext4 / xfs / btrfs + LVM / mdadm | ZFS (pool + datasets, checksums, snapshots) | ZFS storage |
/proc + strace / perf / ftrace / eBPF | DTrace (+ truss, pargs, pfiles, procfs) | DTrace · Debugging |
apt / dnf / pacman | Nix — pkgs.solnix.*, declarative config | Learning Nix |
| NixOS generations (Linux) | Nix generations → ZFS boot environments | Boot environments |
| GRUB | loader (x86, FreeBSD-derived) / OpenBoot (SPARC) | Boot environments |
| glibc | illumos libc (pkgs.solnix.libc, not glibc) | How solnix is built |
ldd / patchelf / RPATH (GNU) | elfdump + Solaris link-editor writing RUNPATH | How solnix is built |
sudo | pfexec (RBAC/privilege-backed) | see RBAC below |
gdb / core dumps | MDB (mdb), coreadm, crash dumps | Debugging |
hardware errors in dmesg | FMA (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
- Coming to Nix fresh, or from IPS/
pkg? Learning Nix. - Want the platform features in depth? illumos features.
- Want the backstory? A short history.