CMATRIX · Volume 4

Why a Useless Program Endures

A program that produces no output, stores no state and solves no problem has survived twenty-seven years, three maintainership states, a rewrite of its packaging and the near-total replacement of the terminal ecosystem it was written for. It is in Debian, Ubuntu, Fedora, Arch and Homebrew. It has been compiled for Windows. It is the reliable punchline of a thousand “hacking” scenes, and it is genuinely useful for a handful of things nobody intended. That combination is worth accounting for.

Figure 1 — cmatrix running inside cool-retro-term, a terminal emulator that simulates phosphor glow, screen curvature and scanlines. Two independent nostalgia projects stacked on each other; neither computes …
Figure 1 — cmatrix running inside cool-retro-term, a terminal emulator that simulates phosphor glow, screen curvature and scanlines. Two independent nostalgia projects stacked on each other; neither computes anything. — File:Cool retro term cmatrix.jpg by Cperalta22. CC0, via Wikimedia Commons.

4.1 It belongs to a family, and the family is old

The digital-rain screen toy is not one program but a genre, and cmatrix sits in the middle of it rather than at the head.

Jamie Zawinski’s xscreensaver carries two members of the family. xmatrix renders the two-dimensional effect as it appeared on the computer monitors within the film; glmatrix, added in 2003, renders the three-dimensional version from the title sequence. The cmatrix README explicitly thanks Zawinski for the xmatrix module, placing the two in the same lineage rather than in competition.

The ancestor of both, by the cmatrix README’s own account, is the screensaver distributed from the film’s promotional website — which is also why the project recommends cmatrix -ol to reproduce “the Win/Mac screensaver” look and cmatrix -lba to get closest to the film. Implementations in Python, Rust, JavaScript and shell have followed in large numbers since.

What distinguishes cmatrix inside that family is the medium. xmatrix needs X11. The web versions need a browser. cmatrix needs a terminal and 75 kB, which means it runs over SSH, on a serial console, inside a container, on a headless server, in a tmux pane on a machine six time zones away. The effect goes wherever a terminal goes, and a terminal goes everywhere.

4.2 The aesthetic argument

The effect works, and it is worth being precise about why, because the reasons are technical.

A terminal is a fixed grid of monospaced cells. The digital-rain effect is also a fixed grid of monospaced cells. Almost every other screen effect must fight the terminal’s character cell — approximating curves, dithering images, pretending a block character is a pixel. This one does not: the film’s visual and the terminal’s native output are the same shape. The medium is not being abused to produce the image; the image is what the medium already does.

The colour choice compounds it. Green-on-black is not a design decision so much as a historical artefact — the P1 and P39 phosphors of monochrome CRTs, the amber alternative, the VT100 in the previous volume. A green-on-black falling-glyph animation is legible as “computer” to people who have never used a monochrome terminal, because film and television have used exactly that palette to mean “computer” for fifty years. The popularity of cool-retro-term in the photograph above makes the point twice over: a terminal emulator whose selling feature is simulating the display technology that the colour scheme is nostalgic for.

4.3 The honest inventory of what people use it for

Stripped of romance, the program has four durable uses, and only the first is what it was written for.

A demonstration that a terminal is alive. Full-screen colour animation is a compact proof that a remote session, a serial link, a newly built terminal emulator, a font, or a Unicode configuration is working. cmatrix -c in particular exercises wide-character output, which is a genuinely useful smoke test: if the kana render as boxes, the locale or the font is wrong.

Something to put on a spare screen. This is the honest common case. A second monitor, a wall-mounted display, a machine on a bench, a raspberry-pi-class device with a screen and no job — cmatrix fills it with something that looks deliberate and consumes nothing but CPU.

A privacy screen. -L covers the screen and refuses the ordinary quit keys, -M puts a message in the middle of it. The manual page is careful to call it “locks cmatrix”, and the usage text notes that lock mode “can be closed from another terminal”. It hides the screen contents from whoever walks past the desk. It is not a security control, it does not require a password, and it should never be described as a screen lock — a distinction the project’s own documentation makes and third-party write-ups regularly lose.

A prop. Its appearance in the background of films, YouTube thumbnails, conference talks and stock photography of “hackers” is a real category of use, and the fact that a purely decorative program has become shorthand for technical activity is part of why it is still packaged.

4.4 What it costs, stated plainly

Any account of why a program endures owes the reader its downside.

The CPU cost is real and documented by the project itself — a full-screen redraw at roughly twenty-five frames a second, with the manual page’s own warning of upward of 40% of a core. On a laptop that means the fan and the battery; on a shared machine it means taking a share of the box to draw nothing. -u is the mitigation, and -u 9 more than halves the work.

It is also occasionally mistaken for a security tool, which is the only genuinely harmful misunderstanding attached to it. Lock mode is a curtain, not a door.

4.5 Why it was finished rather than abandoned

The upstream repository’s last push was in August 2024; version 2.0 dates to March 2019 and is what distributions still ship. In most projects that pattern reads as neglect. Here it reads as completion.

The program does exactly what it set out to do in 1999. Its dependency surface is the C library and ncurses. It has no network code to be attacked, no file format to evolve, no protocol to keep up with, no configuration schema to extend. The only maintenance events it can have are a new flag, a portability fix, or a packaging change — and the record shows exactly that: a Windows build path, a CMake option alongside autotools, rainbow and lambda modes, a -k flag for changing characters, wide-character output for the kana.

Chris Allegretta’s 2000 note that he was leaving the project for nano has aged into the program’s best argument. He moved on to software that had to keep changing, and left behind software that did not. Twenty-six years later, a git clone, ./configure, make still produces a working binary from a single C file, and every claim in these volumes can be checked against that file, its manual page, its packaging metadata and its author’s own release notes.

Most software of 1999 is unrunnable now. The screen toy still runs, and it still looks right — which is, for this particular program, the whole of the specification.

Comments (0)

  1. Loading…

Comments are held for moderation — nothing appears until approved.