join(1) on Solnix vs Linux and the BSDs

On Solnix, join is the illumos join at /usr/bin/join. It is the traditional POSIX join: the first synopsis uses -1/-2/-a/-v, and the second keeps the old -j, -j1 and -j2 as normal options. GNU extras such as -i, -z, --header and --check-order are not in the Solnix page.

What Solnix runs

A default Solnix system runs the illumos join at /usr/bin/join, from pkgs.solnix.illumos-world-man. No other variants are shipped. The Linux page in the bundle is GNU coreutils join, which is a different program.

Differences

Compared withTopicWhat differs
LinuxGNU-only optionsLinux (GNU) join has -i/--ignore-case, -z/--zero-terminated, --header, --check-order and --nocheck-order. The Solnix page documents none of them, so scripts using them need a different approach on Solnix.
Source: Linux join(1) -i, -z, --header, --check-order, --nocheck-order; Solnix join(1) SYNOPSIS and OPTIONS
Linux-o autoLinux join accepts the keyword auto for -o FORMAT, so the first line of each file sets the number of output fields. The Solnix -o list takes only filenumber.fieldnumber elements or 0.
Source: Linux join(1) DESCRIPTION (FORMAT 'auto'); Solnix join(1) -o
Linux-v meaningSolnix -v filenumber outputs only the unpairable lines of that file. Linux describes -v as like -a but suppressing joined lines. Solnix -v 1 -v 2 together output all unpairable lines.
Source: Solnix join(1) -v; Linux join(1) -v
Linuxunsorted inputSolnix says the results are unspecified if input is not in collating order, and offers no order check. Linux says a warning is given if the input is unsorted and some lines cannot be joined, and offers --check-order.
Source: Solnix join(1) DESCRIPTION, OPERANDS; Linux join(1) DESCRIPTION (Important), --check-order
FreeBSD, OpenBSD, NetBSD-j, -j1, -j2 statusSolnix documents -j, -j1 and -j2 as ordinary options in a second synopsis. FreeBSD, OpenBSD and NetBSD list them only as historic compatibility options that 'should not be used'. NetBSD's synopsis also shows -j taking two arguments, file_number and field.
Source: Solnix join(1) SYNOPSIS, OPTIONS -j; FreeBSD join(1) COMPATIBILITY; OpenBSD join(1) STANDARDS; NetBSD join(1) SYNOPSIS, COMPATIBILITY
FreeBSD, OpenBSD, NetBSD-a without an argumentOn FreeBSD, OpenBSD and NetBSD, a bare -a outputs unpairable lines from both files. On Solnix, -a always takes a filenumber, and -a 1 with -a 2 gives the same result.
Source: Solnix join(1) -a; FreeBSD join(1) COMPATIBILITY -a; OpenBSD join(1) STANDARDS -a; NetBSD join(1) COMPATIBILITY -a
NetBSDspace after -aNetBSD requires that the argument to -a is not preceded by a space, so write -a1. The Solnix page documents -a filenumber and shows a form with a space.
Source: NetBSD join(1) -a, COMPATIBILITY; Solnix join(1) -a
NetBSD-o and the join fieldSolnix -o accepts 0 for the join field, and the common field is not printed unless requested. The NetBSD -o description lists only file_number.field elements. FreeBSD, OpenBSD and Solnix all document 0.
Source: Solnix join(1) -o; NetBSD join(1) -o; FreeBSD join(1) -o; OpenBSD join(1) -o
FreeBSD, OpenBSD, NetBSD-o separators and multiple argumentsFreeBSD, OpenBSD and NetBSD say -o list elements may be comma or whitespace separated, and call multiple arguments to one -o historic. The Solnix page does not say what separates list elements.
Source: FreeBSD join(1) -o, COMPATIBILITY; OpenBSD join(1) -o; NetBSD join(1) -o; Solnix join(1) -o

Standards

  • POSIX: join is a POSIX.1-2024 utility.
  • Solnix: Interface Stability: Standard. CSI: Enabled.
  • FreeBSD: The join command conforms to IEEE Std 1003.1-2001 (“POSIX.1”).
  • OpenBSD: The join utility is compliant with the IEEE Std 1003.1-2008 (“POSIX.1”) specification.
  • NetBSD: The join command is expected to be IEEE Std 1003.2 (“POSIX.2”) compatible.
  • Linux: The Linux page in the bundle has no STANDARDS section.

Writing portable scripts

  • Use -1 and -2 instead of -j, -j1 or -j2, and avoid a bare -a and multi-argument -o. The BSD pages call these historic options that should not be used.
  • Sort the inputs to match the join: sort -b style when using default separators, plain sort when using -t. All the pages agree on this, and none of the BSD or Solnix pages offer an order check.

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.