ul(1) on Solnix vs Linux and the BSDs

On Solnix, ul is the illumos ul at /usr/bin/ul. It takes only -i and -t terminal, the same short options as the BSDs, and reads the terminfo directory /usr/share/lib/terminfo. The biggest differences: Linux adds long options, FreeBSD reads termcap, and OpenBSD's ul does far more than translate underscores and changes what -i prints.

What Solnix runs

A default Solnix system runs the illumos ul at /usr/bin/ul, published in pkgs.solnix.illumos-world-man. No other variants are shipped. The Solnix page's -i text contains garbled bytes where the dash character should be, so the bundle does not show exactly which character is printed.

Differences

Compared withTopicWhat differs
Linuxlong options and extra short flagsLinux ul accepts --indicated, --terminal, -T (an alias of -t), -h/--help and -V/--version. The Solnix synopsis has only -i and -t terminal, so scripts using the long forms, -T or -V fail on Solnix.
Source: Linux ul(1) OPTIONS (-i, --indicated; -t, -T, --terminal; -h; -V); Solnix ul(1) SYNOPSIS
OpenBSDwhat ul translatesSolnix ul is documented as translating underscores to the terminal's underline sequence. OpenBSD ul handles backspace, tab, carriage return, shift in/out and escape 7/8/9, and also converts boldface and reverse video markup. The Solnix page documents none of this.
Source: OpenBSD ul(1) DESCRIPTION (control characters, underline, boldface, reverse video); Solnix ul(1) DESCRIPTION
OpenBSD-i output formatSolnix -i adds a separate line of dashes to show underlining. OpenBSD -i does not apply markup. After each marked-up line it prints a line of codes: _ underline, ! bold, g inverse, ^ superscript, v subscript, X mixed.
Source: Solnix ul(1) -i; OpenBSD ul(1) -i
OpenBSDunknown escape sequencesOpenBSD ul aborts with an error message and a non-zero exit code on an unknown escape sequence, and discards non-printable characters and invalid bytes. The Solnix page does not describe this.
Source: OpenBSD ul(1) DESCRIPTION (last paragraph before OPTIONS); Solnix ul(1) DESCRIPTION
FreeBSDterminal databaseSolnix ul reads terminfo entries under /usr/share/lib/terminfo. FreeBSD ul reads /etc/termcap.
Source: Solnix ul(1) DESCRIPTION; FreeBSD ul(1) DESCRIPTION
NetBSDterminal database locationNetBSD ul reads /usr/share/misc/terminfo, while Solnix uses /usr/share/lib/terminfo. Linux and OpenBSD name the terminfo database but not a path.
Source: NetBSD ul(1) DESCRIPTION; Solnix ul(1) DESCRIPTION; Linux ul(1) DESCRIPTION; OpenBSD ul(1) DESCRIPTION
FreeBSD, OpenBSDexit statusThe Solnix page documents only exit code 1 when a named file is not found. FreeBSD and OpenBSD document 0 on success and >0 on any error. Linux and NetBSD have no exit status section.
Source: Solnix ul(1) RETURN VALUES; FreeBSD ul(1) EXIT STATUS; OpenBSD ul(1) EXIT STATUS
FreeBSD, OpenBSDlocale environment variablesFreeBSD documents LANG, LC_ALL, LC_CTYPE and TERM as affecting ul. OpenBSD documents LC_CTYPE (character width and printability) and TERM. The Solnix page mentions only TERM.
Source: FreeBSD ul(1) ENVIRONMENT; OpenBSD ul(1) ENVIRONMENT; Solnix ul(1) DESCRIPTION
Linux, NetBSDbackward-motion optimisationLinux and NetBSD state that no attempt is made to optimise backward motion. The Solnix BUGS text says 'ul makes attempt to optimize the backward motion', which reads as a different statement. The manual does not say more.
Source: Solnix ul(1) BUGS; Linux ul(1) BUGS; NetBSD ul(1) BUGS

Standards

  • POSIX: ul is not a POSIX.1-2024 utility.

Writing portable scripts

  • Use only 'ul -t terminal' (or rely on TERM) in portable scripts. Do not use -T or the long options, which exist only on Linux.
  • Do not parse -i output, since its format differs on OpenBSD. Test only for exit status 0 versus non-zero, because the Solnix page documents only exit code 1 for a missing file.

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.