Skip to content
C.W.K.
Stream
Lesson 01 of 04 · published

Two Programs and a Byte Stream

~12 min · seam, iterm, tmux, pty, ownership

Level 0Spark
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"Smolder alone should leave no reason to use iTerm." — Dad

The Daily Driver You Do Not Own

A terminal you live in is not a text view. It is tabs, splits, a scrollback you search, a session you expect to still be there after lunch, and — in this family — a way for other apps to open a folder or a seat without pretending they are you. For years that daily driver was iTerm, with tmux sitting between the pane and the pixels whenever more than one job had to share a window.

That pairing looks complete from a distance. iTerm draws. tmux multiplexes. The shell runs. You can split, detach, reattach. The problem is not that any one of those programs is bad. The problem is the seam: two programs you do not own, talking through a serialized screen stream, with every family need sitting on the wrong side of that stream.

What a Seam Actually Costs

A pane, to a native app, is an object. You can move it, attach a process to it, ask what is in the foreground, copy a selection as text rather than as a rectangle of cells. A pane, to tmux, is a rectangle in a byte protocol. Selection becomes a parser. Restore becomes a guess about what the far side still holds. A sibling that wants to open a directory in a new split has to pretend it is a human typing.

Every friction that sent a hand back to iTerm had this shape. Four harnesses in one window lagged, and the cause was unmeasured because the path from process to pixel crossed a multiplexer nobody here could instrument. A native file app wanted to open a folder in a terminal and had to go through Launch Services, which knows apps, not panes. A contest engine wanted four seats in one tab and got four independent windows, or a tmux layout that could not tell a judge from an author.

Name the Boundary

Smolder's answer is not "be iTerm, but ours." It is "own the pane boundary." One PTY stream per pane, an embedded emulator that turns that stream into pixels, native layout and selection, and a private attachment to a daemon that actually owns the process. No external multiplexer composes local panes. Remote tmux on a far host is a later, different sentence — it is not a license to wrap the local window in someone else's screen protocol.

A seam is not a missing feature. It is an ownership line drawn in the wrong place. Adding a setting to iTerm, or a plugin to tmux, leaves the line where it is. The family needed the pane to be a native object, which means the multiplexer between the pane and its pixels had to go.

Code

The seam, then the owned path·text
# THE SEAM — two programs you do not own

  shell  ->  PTY  ->  tmux  ->  serialized screen  ->  iTerm  ->  pixels
                         ^
                         |
              every family need fights this stream:
              selection, restore, sibling open, seat identity

# OWNED PATH — one stream per pane

  shell  ->  PTY  ->  daemon attachment  ->  embedded emulator  ->  pixels
                         ^                      ^
                         |                      |
                    process owner          native pane object

# Local panes are never wrapped in tmux.
# A far host may still run tmux until remote daemons exist.
# That is a different sentence, not a loophole.

External links

Exercise

Pick one thing you do in a terminal every day that is not "type a command" — copy a selection, split a pane, reopen yesterday's layout, or ask another app to open a folder here. Write one sentence naming whether that act wants a native object or a screen stream. If it wants an object, write a second sentence describing what breaks when a multiplexer sits between the process and the pixels.
Hint
If you have to parse cells to do it, you wanted an object. If a screenshot would be enough, a stream might have been fine — and almost none of the family frictions were screenshots.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.