chat(8) on Solnix vs Linux and the BSDs

On Solnix, chat is the illumos chat at /usr/bin/chat, the same PPP dialer helper that FreeBSD, OpenBSD and NetBSD ship. The main differences for a BSD user are -E (environment substitution in scripts), which FreeBSD and OpenBSD do not document, and a documented exit-status table that the BSD pages lack.

What Solnix runs

A default Solnix system runs the illumos chat at /usr/bin/chat, published in pkgs.solnix.illumos-world-man. No other variants are shipped. The page is dated August 29, 2021.

Differences

Compared withTopicWhat differs
FreeBSD, OpenBSD-E environment substitutionSolnix chat -E enables $xxx environment variable substitution in chat scripts. An unset variable is replaced with nothing. The FreeBSD and OpenBSD pages list no -E and no ENVIRONMENT section.
Source: Solnix chat(8) -E, ENVIRONMENT VARIABLES; FreeBSD chat(8) SYNOPSIS; OpenBSD chat(8) SYNOPSIS
NetBSD-E environment substitutionSolnix and NetBSD document -E the same way: $xxx substitution, with an unset variable replaced by nothing.
Source: Solnix chat(8) -E; NetBSD chat(8) -E, ENVIRONMENT VARIABLES
FreeBSD, OpenBSD, NetBSDexit statusThe Solnix page documents exit codes: 0 success, 1 bad parameters or oversized expect string, 2 I/O error or signal, 3 timeout with no -subsend string, and 4 and up for each ABORT string in order. The BSD pages only say a failed script gives a non-zero code.
Source: Solnix chat(8) EXIT STATUS; FreeBSD/OpenBSD/NetBSD chat(8) -t
FreeBSD, OpenBSD, NetBSDretry decisions by exit codeThe Solnix page says the termination code tells which ABORT string occurred, for example BUSY versus NO DIALTONE, so a wrapper can retry on one and not the other. The BSD pages do not describe this.
Source: Solnix chat(8) EXIT STATUS (last paragraph); FreeBSD/OpenBSD/NetBSD chat(8) OPTIONS
FreeBSD, OpenBSDsyslog facility and levelSolnix says -v logs through syslog(3C) with facility local2. FreeBSD adds level info for tracing and err for some errors. OpenBSD says error messages use local2 at level warning, and -v logs at level info. The Solnix page gives no levels.
Source: Solnix chat(8) -v; FreeBSD chat(8) -v; OpenBSD chat(8) -S, -v
NetBSDsyslog facilityNetBSD says only that logging goes to the SYSLOG and names no facility. Solnix names local2 for the default -v logging.
Source: Solnix chat(8) -v; NetBSD chat(8) -v
FreeBSDscript argumentThe FreeBSD synopsis shows the script as optional ([script]). The Solnix, OpenBSD and NetBSD synopses show it as required. All four pages say the script can come from -f instead.
Source: FreeBSD chat(8) SYNOPSIS; Solnix chat(8) SYNOPSIS and script; OpenBSD chat(8) SYNOPSIS; NetBSD chat(8) SYNOPSIS
FreeBSD, OpenBSD, NetBSD-t subexpect wordingSolnix describes the alternate reply as a 'subexpect' string, and the exit status table refers to a '-subsend' string. The BSD -t text only says an alternate reply may be sent.
Source: Solnix chat(8) -t, EXIT STATUS 3; FreeBSD/OpenBSD/NetBSD chat(8) -t
LinuxLinux counterpartThe bundle includes no Linux chat page, so no Linux comparison is made.
Source: Bundle header: counterparts are FreeBSD, OpenBSD and NetBSD only

Standards

  • POSIX: chat is not a POSIX.1-2024 utility.
  • Solnix: Interface Stability: Evolving.

Writing portable scripts

  • Do not rely on -E outside Solnix and NetBSD: the FreeBSD and OpenBSD pages do not document it. Expand variables in the shell before calling chat.
  • Treat any non-zero exit as failure. Only the Solnix page documents specific codes (3 for timeout, 4 and up for ABORT strings).

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.