setfacl(1) on Solnix vs Linux and the BSDs

On Solnix, setfacl is the illumos /usr/bin/setfacl. It handles only POSIX-draft ACLs (UFS). Its options differ sharply from Linux and the BSDs: -d deletes entries rather than selecting the default ACL, -s replaces the whole ACL, and there is no -R, -x, -b or -k.

What Solnix runs

A default Solnix system runs the illumos setfacl at /usr/bin/setfacl. No other variants are shipped. The page says setfacl is for UFS, which supports POSIX-draft (aclent_t) ACLs. For NFSv4-style (ace_t) ACLs on ZFS, use chmod(1).

Differences

Compared withTopicWhat differs
Linux, FreeBSD, NetBSD-d meaningSolnix -d acl_entries deletes the listed entries, which are given without permissions. On Linux, FreeBSD and NetBSD, -d takes no argument and makes the other operations apply to the default ACL. A script copied from those systems will delete entries on Solnix.
Source: Solnix setfacl(1) -d; Linux setfacl(1) -d, --default; FreeBSD setfacl(1) -d; NetBSD setfacl(1) -d
Linux, FreeBSD, NetBSDremoving entriesSolnix removes entries with -d. Linux, FreeBSD and NetBSD use -x (entries) and -X (file of entries). The Solnix synopsis has neither -x nor -X.
Source: Solnix setfacl(1) SYNOPSIS, -d; Linux setfacl(1) -x, -X; FreeBSD setfacl(1) -x, -X; NetBSD setfacl(1) -x, -X
Linux, FreeBSD, NetBSDno recursion or symlink optionsThe Solnix synopsis has no -R, -H, -L, -P or -h. Recursive ACL changes and symlink-walk control, which Linux, FreeBSD and NetBSD provide, are not documented for Solnix.
Source: Solnix setfacl(1) SYNOPSIS; Linux setfacl(1) -R, -L, -P; FreeBSD setfacl(1) -R, -H, -L, -P, -h; NetBSD setfacl(1) -R, -H, -L, -P, -h
Linux, FreeBSD, NetBSD-b and -k missingSolnix has no -b (remove all extended entries) and no -k (remove the default ACL). On Linux, FreeBSD and NetBSD these are single flags.
Source: Solnix setfacl(1) SYNOPSIS; Linux setfacl(1) -b, -k; FreeBSD setfacl(1) -b, -k; NetBSD setfacl(1) -b, -k
Linux, FreeBSD, NetBSDreplacing the whole ACLSolnix has -s, which replaces the entire ACL, including the default ACL on a directory. Linux does this with --set or --set-file. The FreeBSD and NetBSD option lists have no -s.
Source: Solnix setfacl(1) DESCRIPTION, -s; Linux setfacl(1) DESCRIPTION (--set, --set-file); FreeBSD setfacl(1) OPTIONS; NetBSD setfacl(1) OPTIONS
Linux, FreeBSD, NetBSD-f versus -MSolnix -f acl_file sets the file's ACL from acl_file (stdin if -). Linux, FreeBSD and NetBSD -M modifies the ACL from a file, adding and changing entries. Both accept getfacl-style # comments.
Source: Solnix setfacl(1) -f; Linux setfacl(1) DESCRIPTION (-M); FreeBSD setfacl(1) -M; NetBSD setfacl(1) -M
Linux, FreeBSD, NetBSDmask recalculationSolnix -r recalculates the mask entry and ignores any mask given. The Solnix synopsis has no -n. Linux, FreeBSD and NetBSD use -n to skip recalculation. Linux also has --mask to force it when a mask is given.
Source: Solnix setfacl(1) -r; Linux setfacl(1) -n, --mask; FreeBSD setfacl(1) -n; NetBSD setfacl(1) -n
FreeBSD, NetBSDNFSv4 ACLsSolnix setfacl manipulates only POSIX-draft ACLs; chmod handles NFSv4 ACLs. FreeBSD and NetBSD setfacl have -a position entries for NFSv4 ACLs, and say -m, -x, -R apply to them.
Source: Solnix setfacl(1) DESCRIPTION; FreeBSD setfacl(1) -a, -m, -R; NetBSD setfacl(1) -a, -m, -R
FreeBSD, NetBSDpermission syntaxSolnix perms may be rwx or a number as used with chmod. FreeBSD and NetBSD describe only r, w, x, and - in the permissions field.
Source: Solnix setfacl(1) acl_entries Syntax (perms); FreeBSD setfacl(1) POSIX.1e ACL ENTRIES (access permissions); NetBSD setfacl(1) POSIX.1e ACL ENTRIES (access permissions)
Linux, FreeBSD, NetBSDdefault ACL entriesOn Solnix, default entries carry a d[efault]: prefix, and a first -m on a default ACL must give a complete default ACL (user, group, other, mask, extras). Linux -d promotes ordinary entries to default entries. FreeBSD and NetBSD -d switches the target.
Source: Solnix setfacl(1) -m, acl_entries Syntax; Linux setfacl(1) -d; FreeBSD setfacl(1) -d; NetBSD setfacl(1) -d
LinuxLinux-only optionsLinux has --restore (restore a getfacl -R backup) and --test (list resulting ACLs without changing files). The Solnix page documents neither.
Source: Linux setfacl(1) --restore, --test; Solnix setfacl(1) SYNOPSIS

Everyday tasks

TaskSolnixLinuxFreeBSDNetBSD
replace the whole ACLsetfacl -s acl_entries filesetfacl --set acl_spec file——
add or modify entriessetfacl -m acl_entries filesetfacl -m acl_spec filesetfacl -m entries filesetfacl -m entries file
delete named entriessetfacl -d acl_entries filesetfacl -x acl_spec filesetfacl -x entries filesetfacl -x entries file
modify entries from a file—setfacl -M acl_file filesetfacl -M filesetfacl -M file
set the ACL from a file or stdinsetfacl -f acl_file file———
remove the default ACL—setfacl -k filesetfacl -k filesetfacl -k file
apply recursively—setfacl -Rsetfacl -Rsetfacl -R

Standards

  • POSIX: setfacl is not a POSIX.1-2024 utility.

Writing portable scripts

  • Do not use -d, -s or -f in cross-platform scripts: -d deletes entries on Solnix but selects the default ACL on Linux and the BSDs. Branch on the OS and write each syntax explicitly.
  • Use chmod, not setfacl, for NFSv4/ZFS ACLs on Solnix. FreeBSD and NetBSD handle NFSv4 ACLs through setfacl -a.

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.