tmux: the multiplexer that took the chair
Screen is twenty-three years old, byobu
dressed its flaws and there remain irritants neither of them fixes: no true panes (Screen does regions, which resize badly), a retrofitted UTF-8, a $HOME/.screenrc config with bindkeys inherited from the 80s. That is where tmux enters, born in 2007 on OpenBSD and starting to take the chair in 2010.
The client-server model
The architectural difference that changes everything: Screen runs a server per user (sessions share one process), tmux runs one server per session and clients attach to it. Practical consequences:
- tmux sessions survive independently: killing one client disturbs no others;
tmux attachbecomes genuinely single-session, done with the ghost sessions lingering around;- window and pane splitting is native, not a region-splitting hack painted on a screen.
The panes, at last
# ~/.tmux.conf
set -g prefix C-a # the Screen habit does not die
unbind C-b
bind C-a send-prefix
set -g default-terminal "screen-256color"
set -g status-bg colour238
set-window-option -g mode-keys vi
# splits, the real ones
bind | split-window -h
bind - split-window -v
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
A prefix | cuts vertically, prefix - horizontally and hjkl navigate pane to pane. The copy buffer is shared across panes and windows, scrolling happens in copy mode with vi keys. UTF-8 is handled natively from the start: accented prompts and unicode stop breaking at the first split.
What Screen keeps
Era honesty: Screen remains irreplaceable on systems that do not ship it in a package (old Debians and exotic boxes) and some reflexes (C-a C-a to bounce between two windows) have no immediate equivalent. And byobu
still wraps Screen where tmux is not installed. The migration happens by habit, not by decree: new server, new tmux; old server, the Screen attachment stays.
The point you only see in hindsight
tmux’s real gift is not the panes, it is the readable config. $HOME/.tmux.conf reads from one server to the next, gets versioned in dotfiles, transfers by rsync. The era’s Screen config was a bag of bindkeys without comments. It is exactly the kind of file that, a few years later, naturally ends up in a dotfiles repo with a loader.