Столлман вспоминает, как внедрение макросов породило целый взрыв улучшений. “Каждый стремился автоматизировать свою работу наборами макросов. Ими постоянно обменивались и улучшали их, делая всё более мощными и универсальными. Наборы этих макросов мало-помалу становились самостоятельными системными программами”.[58]
Началась настоящая макросомания, даже сам редактор TECO стал восприниматься как придаток к макросам. “Мы уже считали его языком программирования, а не текстовым редактором”, – рассказывает Столлман. Пользователи получали огромное удовольствие от написания макросов и их обсуждения. [59]
Спустя пару лет начали проявляться негативные последствия неконтролируемого “макросного взрыва” – в частности, огромное количество несовместимостей. “Это было вавилонское столпотворение”, – говорит Гай Стил. По его словам, эти последствия угрожали основе хакерской этики – коллективной работе над программами, когда каждый может открыть и улучшить программу любого другого хакера. “Иногда лучший способ показать кому-то, как надо написать тот или иной код – просто сесть и написать его самому”, – объясняет Стил.
Возможность расширения функциональности через макросы стала мешать этому принципу. Стремясь облегчить свою работу, хакеры писали сложнейшие макросы для TECO, и чтобы начать работать за чужим терминалом, нужно было порой битый час сидеть вникать в то, что редактор, собственно, делает.
Это изрядно огорчало Ричарда, и он занялся решением проблемы. Он взял 4 разных комплекта макросов, проанализировал их и выстроил диаграмму популярности команд и их сочетаний. Также он начал наблюдать за работой других хакеров.
“Он смотрел на мой экран из-за плеча и расспрашивал о моих действиях”, – вспоминает Стил.
Хотя наблюдения за чужой работой были в порядке вещей в Лаборатории, Стилу хорошо это запомнилось, потому что он был тихим замкнутым хакером и почти не общался со Столлманом. В итоге Ричард назвал работу Стила интересной и использовал её в своём решении.
“Я обычно говорю, что первые 0,001 процента решения той проблемы – моя заслуга, а Столлман лишь довёл дело до конца”, – смеётся Стил.
Столлман дал и название новому проекту: Emacs, сокращение от “editing macros” или “редактирование макросами”. Название отражало эволюционный скачок, который случился двумя годами ранее при изобретении макросов. Нашлось в названии место и чисто техническим соображениям удобства – на компьютерах Лаборатории не было программ, название которых начиналось бы на “е”, поэтому достаточно было ввести одну эту букву, чтобы автодополнение вызвало Emacs. В очередной раз хакерская жажда эффективности оставила свой след.[60]
Конечно, не все и не сразу перешли на Emacs. Некоторые пользователи продолжали работать в TECO и расширять его функциональность макросами, но многие всё-таки выбрали Emacs. Он обеспечивал унифицированную платформу, от которой можно было отталкиваться. К тому же, его функции можно было расширять без необходимости переписывать старые функции, что резко сокращало количество проблем с совместимостью.
“С одной стороны, мы пытались создать единую систему команд, с другой – не ограничивать её расширяемость, потому что программируемость была крайне важна для нас”, – вспоминает Стил.
Но проблема несовместимости скоро снова дала о себе знать уже в других местах. Главной причиной её возвращения были тихие модификации кода отдельных экземпляров Emacs, о которых авторы не рассказывали остальным хакерам. В результате поведение этих экземпляров шло вразрез с поведением общей версии Emacs. Тогда Столлман решил внести в код специальную функцию, реализующую один из основных постулатов хакерской этики: пользователь получал право изменять код только в том случае, если он обязывался возвращать свои изменения в общую версию Emacs. Столлман назвал это “вступлением в коммуну Emacs”. Так же, как и TECO ранее, Emacs стал чем-то большим, чем просто компьютерной программой. Для Столлмана это был общественный договор. В документации 1981 года Ричард изложил его условия: “Emacs распространяется как общественный продукт, это значит, что все свои улучшения вы должны выслать мне для их внедрения и распространения в основной версии Emacs”.[61]
Оригинальный Emacs работал только на PDP-10, но скоро пользователи захотели работать в нём на других компьютерах. Снова произошёл взрывной рост, только теперь уже не макросов, а версий редактора, похожих на Emacs, с очень разным уровнем совместимости. Правила коммуны Emacs на них не распространялись, потому что те редакторы были написаны с нуля. Некоторые из них в названии иронично обыгрывали название оригинала: Sine (“Sine is not Emacs” или “Sine это не Emacs”), Eine (“Eine is not Emacs”), и даже Zwei (“Zwei was Eine initially” или “Zwei поначалу был Eine”). Оригинальный Emacs был полностью программируемым, но некоторые клоны предоставляли лишь ограниченный набор команд без возможности расширения, такие версии назывались “эрзац-Emacs”. Таким был Mince (“Mince is Not Complete Emacs” или “Mince это не совсем Emacs”).