От магнитных лент к полноэкранному редактированию

Программирование было совсем другим делом в ранние годы развития компьютеров. Первые программисты вообще не писали код в современном понимании — шесть женщин, работавших на ENIAC в Университете Пенсильвании в 1946 году, конфигурировали машину физически, переключая переключатели, подключая кабели и устанавливая штекеры на панели.

Спустя несколько лет инженеры MIT программировали Whirlwind, пробивая код на бумажную ленту, которую затем загружали в память компьютера. Позже перешли на перфокарты — по одной карте на каждую строку кода.

К началу 1960-х годов программисты с интерактивными компьютерами могли использовать «линейный редактор» для ввода кода на телетайпах — больших, шумных машинах с клавиатурой и принтером. Они вводили по одной строке кода за раз, а работа сохранялась на вращающемся жёстком диске размером с современную стиральную машину. Но полноэкранных текстовых редакторов, позволяющих видеть и изменять множество строк одновременно, ещё не существовало.

Один из первых таких инструментов, EMACS, отмечает свой 50-летний юбилей в этом году и остаётся широко используемым.

Истоки EMACS

EMACS впервые запустили на ранних видеотерминалах Лаборатории искусственного интеллекта MIT в 1976 году, но его основные концепции оказались настолько мощными, что его переписывали для множества операционных систем в последующих десятилетиях. Apple даже распространяла его вместе с Mac OS X. Кроме того, сообщество обмена программным обеспечением, возникшее вокруг EMACS, помогло зарождению современного движения свободного программного обеспечения и операционной системы GNU/Linux.

Корни EMACS уходят в редактор TECO (изначально «Tape Editor and Corrector»), который Дэн Мёрфи создал в 1962 году для пионерского компьютера PDP-1 в MIT. Команды программы состояли из прописных букв: пользователь вводил «I» для вставки текста, «D» для удаления символа и так далее. Когда магнитная лента уступила место файлам на большом общем диске, буква «T» в названии «TECO» стала означать «Text» (Текст). С годами TECO превратился в полноценный язык, который программисты могли использовать для создания новых команд, называемых макросами, для редактирования своего кода.

Control-R и путь к EMACS

Осенью 1971 года Карл Миккельсен создал Control-R — надстройку к TECO, которая воспользовалась преимуществами видеотерминалов с дисплеями. Control-R немедленно показывал изменения редактируемого файла на экране; программисту больше не нужно было перепечатывать каждую строку, чтобы увидеть изменения. Недостаток был существенный: дисплей мог показывать только несколько строк кода одновременно.

Затем в 1976 году Ричард Столлман, исследователь Лаборатории искусственного интеллекта MIT, увидел полноэкранный редактор E во время визита в AI Lab Стэнфорда. Вдохновившись, он вернулся в MIT и взялся улучшать Control-R. Самое важное изменение в структуре программы: каждая клавиша запускала собственный макрос при нажатии, что сделало Control-R намного проще для настройки. Хакеры лаборатории с энтузиазмом восприняли код Столлмана и начали менять и добавлять команды.

Это создало проблему для Гая Стила-младшего. Аспирант лаборатории, он часто помогал другим членам лаборатории отлаживать их программы. «Я заметил, что гораздо сложнее помочь кому-то, кто использует один из этих пакетов, чем тому, кто работает просто с TECO», — вспоминает он. «В конце концов, мне пришла в голову идея попытаться добиться консенсуса на стандартном наборе команд Control-R, которые все согласились бы использовать».

Дэвид Мун, ещё один член лаборатории, помогал в этом. Столлман также включился в работу и в итоге возглавил процесс. Вместе группа установила стандартный набор команд, использующих клавишу Meta, которая была на многих ранних клавиатурах лаборатории: Meta-F передвигал курсор вперёд на слово, Meta-B — назад, и так далее. Результат они назвали EMACS, сокращение от «Editor Macros» или «Editing Macros». «Моя цель была не создать великий новый текстовый редактор», — говорит Стил. «Я пытался решить социальную проблему».

От социального решения к великому редактору

Тем не менее, EMACS был великим новым текстовым редактором. Если Control-R был сложен в использовании, пользователи EMACS без «какого-либо технического опыта» могли научиться редактировать письма, письма по электронной почте и даже программы «за несколько минут или час», согласно истории, написанной Бернардом Гринбергом. Между тем, «опытные и продвинутые пользователи считали EMACS неизмеримо удобнее любых предыдущих форм редактирования».

«Опытные и продвинутые пользователи считали EMACS неизмеримо удобнее любых предыдущих форм редактирования»

Бернард Гринберг, SM '74

Столлман начал распространять EMACS всем, кто присылал ему магнитную ленту и оплаченный обратный конверт. «EMACS ничего не стоит; вместо этого вы присоединяетесь к коммуне обмена программным обеспечением EMACS», — написал он в руководстве 1981 года. «Условие членства в том, что вы должны отправить обратно любые улучшения, которые вы внесли в EMACS».

чёрные папки на столе
Руководства по операционной системе Multics. Находясь в Honeywell, Бернард Гринберг написал собственную версию EMACS для этой системы. Она была настолько хороша, что Honeywell начала её продавать.

Гринберг тем временем решил написать собственную версию для Multics, ранней операционной системы, принадлежавшей его работодателю Honeywell. EMACS Гринберга выиграла первый приз на Международной конференции программного обеспечения Honeywell в 1980 году, и Honeywell начала её продавать. Honeywell не была единственной компанией, которая продавала версию EMACS: Джеймс Гослинг, выпускник Carnegie Mellon, впоследствии возглавивший разработку языка программирования Java, создал версию, которую позже продал как коммерческий продукт.

От коммерциализации к GNU

Этот переход от свободного программного обеспечения к платному в конечном итоге подвигнул Столлмана запустить проект по созданию операционной системы, которую можно было бы свободно обмениваться и улучшать. Он смоделировал эту попытку, названную Проектом GNU, по образцу всё более популярной операционной системы Unix от Bell Labs. «GNU» означал «GNU's Not Unix», намекая на то, что в отличие от Unix, она будет свободной.

Первым крупным приложением проекта был GNU Emacs (теперь переоформлен в нижнем регистре). Операционная система GNU/Linux была ещё далеко впереди, поэтому, несмотря на цель проекта создать полностью свободную операционную систему, GNU Emacs первоначально работал на Unix. Впоследствии он работал на целом ряде операционных систем, включая Linux, но также и другие системы на основе Unix. Когда Apple запустила Mac OS X, первый выпуск своей операционной системы на основе Unix, в 2001 году, GNU Emacs был включён в состав.

Apple прекратила распространение GNU Emacs в 2019 году, но компания по-прежнему имеет программу под названием mg («Micro GNU Emacs»). Хотя она поддерживает большинство команд EMACS, ей не хватает интегрированного языка программирования, что некоторые называют «ersatz EMACS».

Между тем, большая часть операционной системы Apple всё ещё имеет скрытую поддержку команд EMACS. На клавиатуре нет клавиши Meta, но Control-Option-B передвинет курсор на одно слово назад, а Control-Option-F — на одно вперёд.