write(1) on Solnix vs Linux and the BSDs
On Solnix, write is the illumos write at /usr/bin/write. It is a POSIX.1-2024 utility. Unlike the Linux and BSD pages, the Solnix page documents a '!' shell escape, a different terminal-selection rule (first writable instance in utmpx, not shortest idle time), and a different message header.
The manual pages
- Solnix: write(1) from
pkgs.solnix.illumos-world-man· illumos.org - Linux: write(1) util-linux-2.42.3
- FreeBSD: write(1) 15.1-RELEASE
- OpenBSD: write(1) 8.0
- NetBSD: write(1) 11.0
- Standard: POSIX.1-2024 (IEEE Std 1003.1-2024),
write
What Solnix runs
A default Solnix system runs the illumos write at /usr/bin/write. No other variants are shipped. The page's mention of /usr/adm/utmpx is quoted as written.
Differences
| Compared with | Topic | What differs |
|---|---|---|
| all four | choosing among multiple logins | Solnix picks the first writable instance of the user found in /usr/adm/utmpx and prints a 'logged on more than one place' notice listing the other terminals. Linux, FreeBSD, OpenBSD and NetBSD pick the terminal with the shortest idle time.Source: Solnix write(1) DESCRIPTION (utmpx paragraph); Linux/FreeBSD/OpenBSD/NetBSD write(1) DESCRIPTION (shortest idle time) |
| all four | '!' shell escape | On Solnix, a line starting with ! makes write call the shell to run the rest of the line as a command. The Linux, FreeBSD, OpenBSD and NetBSD pages do not document this. Source: Solnix write(1) DESCRIPTION (character ! at the beginning of a line); Linux/FreeBSD/OpenBSD/NetBSD write(1) DESCRIPTION |
| all four | opening message format | Solnix sends 'Message from sender-login-id (sending-terminal) [date]...'. The other four pages show 'Message from yourname@yourhost on yourtty at hh:mm ...'. Do not parse the header across systems. Source: Solnix write(1) DESCRIPTION; Linux/FreeBSD/OpenBSD/NetBSD write(1) DESCRIPTION |
| all four | end-of-conversation message | On Solnix, the interrupt or end-of-file character makes write send 'EOT\n' in the C locale to the recipient. The other four pages say the recipient sees 'EOF'. Source: Solnix write(1) DESCRIPTION (interrupt or end-of-file characters); Linux/FreeBSD/OpenBSD/NetBSD write(1) DESCRIPTION |
| Linux | options | Solnix write documents no options in its synopsis, 'write user [terminal]'. Linux write accepts -h/--help and -V/--version.Source: Solnix write(1) SYNOPSIS; Linux write(1) OPTIONS |
| OpenBSD | non-printable and non-ASCII characters | Solnix uses the sender's LC_CTYPE: printable characters go through, and others show as ^X or meta notation. OpenBSD ignores the sender's locale on purpose and writes non-ASCII characters as '?'. FreeBSD's BUGS section says the sender's LC_CTYPE is used. Source: Solnix write(1) DESCRIPTION (LC_CTYPE, ^ and meta notation); OpenBSD write(1) STANDARDS; FreeBSD write(1) BUGS |
| Linux, FreeBSD, NetBSD | exit status documented | Solnix documents exit 0 on success and >0 when the user is not logged on or denies permission. OpenBSD documents the same. The Linux, FreeBSD and NetBSD pages have no EXIT STATUS section. Source: Solnix write(1) EXIT STATUS; OpenBSD write(1) EXIT STATUS; Linux/FreeBSD/NetBSD write(1) (no such section) |
| all four | tty group and privileges | Solnix write runs setgid() to group tty to write to other users' terminals, and fails if the user lacks the privileges for the request. The other four pages do not describe this. Source: Solnix write(1) DESCRIPTION (setgid() to the group ID tty); Linux/FreeBSD/OpenBSD/NetBSD write(1) DESCRIPTION |
| all four | typed control and erase characters | Solnix processes data per line in canonical mode. The alert character is passed on, and erase and kill act on the sender's terminal per termios(3C). The extra characters handled when stty iexten is on are described only for Solnix. Source: Solnix write(1) DESCRIPTION (character list, iexten); Linux/FreeBSD/OpenBSD/NetBSD write(1) DESCRIPTION |
| all four | conversation protocol text | Solnix suggests ending a message with (o) for over and (oo) for over and out. The other four pages give -o and oo.Source: Solnix write(1) DESCRIPTION (suggested protocol); Linux/FreeBSD/OpenBSD/NetBSD write(1) DESCRIPTION |
Standards
- POSIX: write is a POSIX.1-2024 utility.
- Solnix: Interface Stability: Committed. Standard: see standards(7).
- OpenBSD: write is compliant with IEEE Std 1003.1-2008 (“POSIX.1”), except that the sender's locale is intentionally ignored and non-ASCII characters are written as '?'.
- Linux: The Linux page has no STANDARDS section; its HISTORY says write appeared in Version 5 AT&T UNIX (Jun 1974).
Writing portable scripts
- Use only 'write user [terminal]' with no options in portable scripts, and do not depend on the header text, the EOF/EOT message, or which terminal is chosen for a multi-login user.
- Do not rely on the '!' shell escape or on non-ASCII text reaching the recipient: OpenBSD sends non-ASCII characters as '?'.
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.