zoneadm(8) on Solnix vs Linux and the BSDs
zoneadm is the illumos command at /usr/sbin/zoneadm that administers zones, which the page calls application containers maintained by the operating system runtime. Linux and FreeBSD have no single equivalent. systemd-nspawn runs a container, machinectl manages registered machines, and jail(8) creates, modifies and removes jails, with a different flag set.
The manual pages
- Solnix: zoneadm(8) from
pkgs.solnix.illumos-world-man· illumos.org - Linux: systemd-nspawn(1) systemd-260.5 (different command, similar job)
- Linux: machinectl(1) systemd-260.5 (different command, similar job)
- FreeBSD: jail(8) 15.1-RELEASE (different command, similar job)
What Solnix runs
A default Solnix system runs the illumos zoneadm at /usr/sbin/zoneadm. No other variants are shipped. The bundle's Solnix page shows only the placeholders 'subcommand' and 'subcommand_options' (plus list and mark incomplete), so this comparison does not cover other subcommands. zonecfg(8), zlogin(1), svcs(1) and svcadm(8) are listed in SEE ALSO. OpenBSD and NetBSD have no counterpart page in the bundle.
Differences
| Compared with | Topic | What differs |
|---|---|---|
| Linux, FreeBSD | tool model | zoneadm takes a zone name plus a subcommand. systemd-nspawn runs one command or OS tree per invocation, and machinectl acts on machines registered with systemd-machined. FreeBSD jail uses -c, -m, -r and -e plus name=value parameters.Source: Solnix zoneadm(8) SYNOPSIS, DESCRIPTION; Linux systemd-nspawn(1) DESCRIPTION; Linux machinectl(1) DESCRIPTION; FreeBSD jail(8) DESCRIPTION |
| FreeBSD | -R meaning | Solnix zoneadm -R root gives an alternate root (boot environment) and works only with list and mark. FreeBSD jail -R removes a running jail without using the configuration file. The two flags are unrelated.Source: Solnix zoneadm(8) -R; FreeBSD jail(8) -R |
| FreeBSD | -u meaning | Solnix zoneadm -u takes a UUID, assigned by libuuid(3LIB), that selects a zone in place of the one named by -z. FreeBSD jail -u takes a host user name for jailed commands. FreeBSD jail has no -z.Source: Solnix zoneadm(8) -u, -z; FreeBSD jail(8) -u |
| Linux, FreeBSD | how a target is chosen | Solnix names the zone with -z zonename, or by UUID with -u. FreeBSD jail names a jail by jid or name parameter or a jail argument, and '*' means all jails. Linux nspawn uses --machine or --directory.Source: Solnix zoneadm(8) -z, -u; FreeBSD jail(8) DESCRIPTION (wildcard '*'); Linux systemd-nspawn(1) DESCRIPTION (--directory=, --machine=) |
| Linux, FreeBSD | where configuration lives | The zoneadm page defines no configuration file or creation parameters. Its SEE ALSO points to zonecfg(8). FreeBSD jail reads /etc/jail.conf by default (-f overrides it). nspawn reads .nspawn files in /etc/systemd/nspawn/ and /run/systemd/nspawn/.Source: Solnix zoneadm(8) SEE ALSO; FreeBSD jail(8) -f; Linux systemd-nspawn(1) --settings= |
| Linux | boot-time service | On Solnix the zones service is an SMF service, svc:/system/zones:default, managed with svcadm(8) and queried with svcs(1). Linux runs nspawn containers as service instances of the systemd-nspawn@.service template, which machinectl can start. Source: Solnix zoneadm(8) NOTES; Linux systemd-nspawn(1) DESCRIPTION; Linux machinectl(1) DESCRIPTION |
| Linux, FreeBSD | mark incomplete | Only Solnix zoneadm documents 'mark incomplete'. The Linux and FreeBSD pages in the bundle show no equivalent operation. Source: Solnix zoneadm(8) SYNOPSIS (mark incomplete); FreeBSD jail(8) DESCRIPTION; Linux machinectl(1) DESCRIPTION |
| FreeBSD | restart and listing | FreeBSD jail -rc restarts a jail by removing and re-creating it, and jls(8) lists running jails. The zoneadm page in the bundle shows a list subcommand but does not document restart.Source: FreeBSD jail(8) -rc, -e; Solnix zoneadm(8) SYNOPSIS |
| Linux, FreeBSD | exit status | zoneadm exits 0 on success, 1 on error and 2 on invalid usage. The systemd-nspawn, machinectl and jail text in the bundle shows no exit status section, so scripts should not assume the same codes. Source: Solnix zoneadm(8) EXIT STATUS; Linux systemd-nspawn(1) and machinectl(1); FreeBSD jail(8) |
| Linux | booting an OS versus a command | nspawn without --boot runs a command, or a shell if none is given. With --boot it runs an init program. The zoneadm page does not say how a zone's processes are started.Source: Linux systemd-nspawn(1) OPTIONS, SYNOPSIS; Solnix zoneadm(8) DESCRIPTION |
Everyday tasks
| Task | Solnix | Linux | FreeBSD |
|---|---|---|---|
| list zones, containers or jails | zoneadm list | — | jls(8) lists running jails; jail -e separator lists configured jails |
| remove a jail | — | — | jail -r jail |
| restart a jail | — | — | jail -rc jail |
| configure a zone or container | zonecfg(8) | .nspawn file, see systemd.nspawn(5) | jail.conf(5), /etc/jail.conf |
| log in or open a shell | zlogin(1) | machinectl shell or login | — |
| signal the processes of a container | — | machinectl kill, with --signal and --kill-whom | — |
| control the boot-time service | svcadm and svcs on svc:/system/zones:default | systemd-nspawn@.service, via machinectl | — |
Standards
- POSIX: zoneadm is not a POSIX.1-2024 utility.
- Solnix: Interface Stability: Committed.
- Linux: systemd-nspawn implements the Container Interface specification.
Writing portable scripts
- Do not script zone, container and jail management portably. Detect which tool exists (zoneadm, machinectl or systemd-nspawn, jail) and branch, because the flags and the configuration files differ.
- Do not reuse
-Ror-uacross these tools. They mean an alternate root and a UUID on Solnix zoneadm, but remove-without-configuration and a host user name on FreeBSD jail.
Every difference here is taken from the manual pages linked above: Solnix's published page, Linux (man-pages and the GNU and util-linux manuals), FreeBSD, OpenBSD and NetBSD. Each row names its source. Where a manual is silent, this page is too. Compiled 2026-10-26. Found a mistake? Mail hackers@lists.solnix.io.