IDE Toolkit

Room 1 · Green Screens

Two Editors, One Year, Still Running

The Same Problem, Two Buildings

Close-up of a silver keyboard's arrow keys and numeric keypad on a wooden desk

The keyboard is the whole interface: both editors were designed to be driven without leaving it.

Photo: Alexey Demidov / Pexels

In 1976, the question of how a programmer should edit text on a terminal was not yet settled. Two answers arrived that year from different institutions, different programming cultures, and different ideas about the relationship between an editor and the machine running it — and both are still in active use.

Richard Stallman and Guy Steele began work on Emacs at MIT's Artificial Intelligence Laboratory, building it as a set of macros on top of TECO, a text editor already in use on PDP-10 hardware. The name was a contraction of "Editing Macros," and the architecture reflected that origin: Emacs was designed to be extended in the same language used to drive it, making the editor and the programming environment a single continuous thing. Bill Joy, then a graduate student at UC Berkeley, wrote vi as a visual mode for an earlier line editor called ex. The terminal he had in mind was the ADM-3A, a specific piece of hardware whose keyboard layout left traces in vi's key bindings that persist to the present day.

Split-screen terminal showing Emacs editing C source code beside a Wikipedia page and shell listing

GNU Emacs in a terminal: a C header, a web page and a directory listing in one frame.

Photo: Emacs-linux-console · Wikimedia Commons

The two environments had almost nothing else in common.

Two Philosophies, Same Year

Emacs operated on the premise that an editor should grow to fit its user. The macro system — eventually replaced by a dedicated Lisp dialect, Emacs Lisp — allowed the editor to acquire new behaviours without recompilation. Mail clients, calendar tools, and programming language modes all accumulated inside Emacs over the following decades, not because its original authors put them there but because the extension mechanism made adding them the path of least resistance. Stallman's later description of Emacs as an "extensible, customizable, self-documenting" editor was not marketing language; it was a precise account of the architectural commitments made in the original design.

Vi took the opposite position. The editor was small, fast, and modal: it separated the act of navigating and commanding text from the act of inserting it, a distinction enforced by the hardware constraints of slow serial connections and the ADM-3A's specific capabilities. The modal design was not an arbitrary choice — it allowed a single keystroke in command mode to do what would otherwise require a modifier key, important when the terminal link was slow and the keyboard lacked dedicated cursor keys. The ADM-3A's influence on vi's design is documented in detail in Joy's own retrospective accounts of the period.

What each design assumed about the user was equally revealing. Emacs assumed the user would spend time learning an environment and then remain inside it. Vi assumed the user needed to open a file, make a change, and leave — the modal separation being an efficiency gain for that specific workflow, not a permanent home. Neither assumption was wrong; they described different working patterns and different relationships to the machine.

Row of vintage teletype machines and chairs lining a wood-paneled room with patterned floor

Teletypes in a machine room. The loop ran on paper before it ran on a screen.

Photo: Phát Trương / Pexels

What 1976 Left Behind

Both editors became reference points for later development environments, though in different ways. Emacs's extension model was a direct ancestor of the plugin architectures that would define IDEs decades later — the principle that an editor's behaviour should be programmable in a high-level language available to ordinary users is, in essence, what the Language Server Protocol formalised in a different technical register in 2016. Vi's modal philosophy and its insistence on composability — commands as units that combine — became the basis of Vim, written by Bram Moolenaar and first released in 1991, and later of Neovim, which added a Lua extension API.

The GNU Emacs release in 1985, which Stallman issued under the GNU General Public Licence, transformed the editor into a political document as much as a technical one. Vi's lineage stayed closer to the original modal logic, with each successor adding features while keeping the command grammar intact.

That both editors remain in daily use nearly fifty years after their introduction is less a story about loyalty than about the stability of the two underlying ideas. The 1976 terminal is gone. The question those two editors were answering — how much should an editor know about you, and how much should it stay out of your way — has not been.