tabs(1) on Solnix vs Linux and the BSDs

A default Solnix system runs the illumos tabs at /usr/bin/tabs, not the ncurses tabs that pkgs.solnix.ncurses documents. The ncurses version, also on Linux and FreeBSD, has -d, -V and a check-only -n. The illumos version has neither -d nor -V, and it can read tab settings from a file.

What Solnix runs

The published tabs(1) page comes from pkgs.solnix.ncurses (ncurses 6.5). The command on PATH is the illumos /usr/bin/tabs, and no other illumos variants are shipped. The bundle does not say where the ncurses binary is installed or whether it is on PATH. The two programs differ, so check which one you get before relying on -d, -V, -n or -file.

Differences

Compared withTopicWhat differs
Linux, FreeBSDsame program as the ncurses tabsThe Solnix ncurses page, the Linux page (ncurses-6.6) and the FreeBSD 15.1 page have the same text for options, lists and margins. That ncurses tabs behaves the same on those systems. The default Solnix /usr/bin/tabs is not that program.
Source: Solnix tabs(1) [ncurses] OPTIONS; Linux tabs(1) OPTIONS; FreeBSD tabs(1) OPTIONS; Solnix header (command on PATH is illumos)
Linux, FreeBSD-d and -VThe ncurses tabs has -d, which prints a ruler plus expected and actual tab stops, and -V, which prints the ncurses version. The default Solnix illumos tabs and NetBSD tabs document neither.
Source: Solnix tabs(1) [ncurses] -d, -V; Linux tabs(1) -d, -V; illumos tabs(1) OPTIONS; NetBSD tabs(1) SYNOPSIS
Linux, FreeBSD-n meaningIn ncurses tabs, the literal -n option checks the options and runs -d without changing the terminal. In the illumos and NetBSD synopses, n is a placeholder for a single-digit interval such as -8, not a flag letter.
Source: Solnix tabs(1) [ncurses] -n; illumos tabs(1) Repetitive; NetBSD tabs(1) -n
Linux, FreeBSD, NetBSD-file (tab spec from a file)The default Solnix illumos tabs accepts -file. It reads the file's first line for an fspec(5) format and falls back to -8 if there is none. The ncurses and NetBSD pages document no such option.
Source: illumos tabs(1) File; Solnix tabs(1) [ncurses] OPTIONS; NetBSD tabs(1) SYNOPSIS
NetBSDno terminal typeOn NetBSD, tabs fails if neither TERM nor -T is given. The ncurses tabs and the illumos tabs both fall back to the ansi+tabs terminal entry.
Source: NetBSD tabs(1) ENVIRONMENT; Solnix tabs(1) [ncurses] -T; illumos tabs(1) -T type, ENVIRONMENT VARIABLES
Linux, FreeBSD, NetBSDlimit on number of tab stopsThe illumos tabs allows up to 40 numbers in an explicit list, clears only 20 tabs on terminals needing a long sequence, and is willing to set 64. The ncurses page says it tries to set stops up to the right margin. NetBSD states no limit.
Source: illumos tabs(1) OPERANDS, NOTES; Solnix tabs(1) [ncurses] HISTORY; NetBSD tabs(1) DESCRIPTION
Linux, FreeBSD, NetBSD+m marginThe illumos tabs moves all tabs over n columns, making column n+1 the left margin, and the default n is 10. The ncurses tabs uses the terminal's margin capability, or imitates it with tab stops. NetBSD lists +m[n] in its synopsis but does not describe it.
Source: illumos tabs(1) +m[n]; Solnix tabs(1) [ncurses] Margins; NetBSD tabs(1) SYNOPSIS and options list
Linux, FreeBSD, NetBSDdefault with no tab specificationThe illumos tabs uses -8 when no specification is given, and NetBSD says tabs with no arguments equals tabs -8. The ncurses page text in the bundle does not state a default for running tabs with no arguments.
Source: illumos tabs(1) Tab Specification; NetBSD tabs(1) -n; Solnix tabs(1) [ncurses] OPTIONS
Linux, FreeBSD, NetBSDterminal requirementsThe ncurses tabs needs the terminfo clear_all_tabs and set_tab capabilities and cannot set tabs without them. The illumos page says only that the terminal must have remotely settable hardware tabs.
Source: Solnix tabs(1) [ncurses] DESCRIPTION; illumos tabs(1) DESCRIPTION
NetBSDseparate implementationNetBSD tabs is a different implementation, introduced in NetBSD 6.0. Its page documents only -n, the predefined codes, -T and +m[n] in the synopsis. It lacks the ncurses -d, -V and the implicit/explicit list sections.
Source: NetBSD tabs(1) SYNOPSIS, HISTORY; Solnix tabs(1) [ncurses] OPTIONS
Linux, FreeBSDexit statusThe illumos tabs and NetBSD tabs document exit 0 on success and >0 on error. The ncurses page text in the bundle has no EXIT STATUS section.
Source: illumos tabs(1) EXIT STATUS; NetBSD tabs(1) EXIT STATUS; Solnix tabs(1) [ncurses]

Standards

  • POSIX: tabs is a POSIX.1-2024 utility.
  • Solnix: illumos tabs(1) ATTRIBUTES: CSI Enabled; Interface Stability Standard.
  • NetBSD: The tabs utility conforms to IEEE Std 1003.1 (“POSIX.1”).
  • Linux: The ncurses page says POSIX defines the predefined tab-stop lists (-a, -a2, -c, -c2, -c3, -f, -p, -s, -u). It says the +m option was in POSIX Issue 5 and omitted from Issue 6, so POSIX tabs has no margin mechanism.

Writing portable scripts

  • Use only the POSIX predefined codes (-a, -a2, -c, -c2, -c3, -f, -p, -s, -u), -T type and a plain interval such as -8. Avoid -d, -V, -file and +m, which not every implementation documents.
  • Set TERM or pass -T type in scripts, because NetBSD tabs fails when neither is present.

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.