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.
The manual pages
- Solnix: tabs(1) from
pkgs.solnix.ncurses - Linux: tabs(1) ncurses-6.6
- FreeBSD: tabs(1) 15.1-RELEASE
- NetBSD: tabs(1) 11.0
- Standard: POSIX.1-2024 (IEEE Std 1003.1-2024),
tabs
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 with | Topic | What differs |
|---|---|---|
| Linux, FreeBSD | same program as the ncurses tabs | The 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 -V | The 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 meaning | In 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 |
| NetBSD | no terminal type | On 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, NetBSD | limit on number of tab stops | The 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 margin | The 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, NetBSD | default with no tab specification | The 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, NetBSD | terminal requirements | The 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 |
| NetBSD | separate implementation | NetBSD 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, FreeBSD | exit status | The 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),-Ttype and a plain interval such as-8. Avoid-d,-V,-fileand +m, which not every implementation documents. - Set TERM or pass
-Ttype 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.