Emacs Started in 1976 as a Set of TECO Macros at MIT
Emacs is usually described as an editor, and that description has been slightly wrong since day one in a productive way. The first Emacs was not an editor at all. It was a bundle of macros for TECO, the Text Editor and Corrector that had been running on MIT machines since the early 1960s, and the story of how that bundle became one of the longest lived programs in computing explains a great deal about why Emacs still works the way it does.
TECO dates to 1962 and was built for machines like the PDP-1, where editing meant manipulating paper tape and memory was measured in small numbers of kilowords. It was a command language first and a text editor second. You did not simply type characters into the document. You typed the letter i to enter input mode, typed your text while the screen showed nothing useful, then pressed Escape to return to command mode. If you have ever wondered why old editors feel modal, TECO is a large part of the answer.
In 1976 the MIT AI Lab ran PDP-10 machines under ITS. Carl Mikkelsen, a hacker at the lab, added a combined display and editing mode to TECO, bound to Control-R, that refreshed the screen after every keystroke. Richard Stallman reimplemented that mode so it ran fast enough to be usable, and then added the feature that made the whole thing take off: a macro facility that allowed any keystroke to be redefined to run a TECO program. That single decision, keys as programs, is the direct ancestor of every keybinding in a modern init file. Around the same time Stallman visited the Stanford AI Lab and saw the E editor written by Fred Wright, whose what you see is what you get behavior impressed him. He went back to MIT and made TECO behave that way.
He also changed how TECO handled files. The old editor was page sequential by design, a relic of editing paper tape, and it could only work through a file one page at a time in order. Stallman modified TECO to read, edit, and write an entire file as a single in-memory buffer. Almost every editor you have used since works that way. The result was different enough from TECO in both feel and behavior that it deserved its own name.
Custom macros had been piling up at the lab with names ending in MAC or MACS. Two years later Guy Steele took on the job of unifying the competing packages, TECMAC and TMACS among them, into one coherent set with documentation and extension hooks. The finished system was called EMACS, for Editing MACroS. Stallman is credited with the name, and his stated reason was practical rather than poetic: the letter E was not already in use as an abbreviation on ITS. The first operational EMACS system existed in late 1976.
For its first years Emacs ran only on the PDP-10 under ITS. Mike McMahon ported it to TENEX and TOPS-20, and by 1979 it was the standard editor at the AI Lab and at MIT's Laboratory for Computer Science. Notice what was portable and what was not. The keystroke layer and the idea of extending an editor by rewriting commands travelled easily. The TECO substrate did not, which is why later versions needed a real extension language, and why GNU Emacs in 1985 replaced the mocklisp of Gosling Emacs with a true Lisp interpreter.
The lesson for working developers is that Emacs was never designed as a product with a fixed feature list. It was designed as a programmable surface whose default behavior happened to be good. Redefining a keystroke to run a program in 1976 is the same idea as evaluating a form in Emacs Lisp today, and it is why the editor ships with over ten thousand built in commands and why a serious configuration file looks closer to application code than to a list of preferences.
When you open a file in Emacs you are using the descendant of a paper tape tool from 1962, wrapped in a display mode from 1976, extended by macros that were unified by a graduate student who needed a consistent keymap. That is a strange lineage for software people still argue about, and it explains why the editor rewards investment: the abstraction it chose in 1976, that text editing is programming, has never needed to be replaced.