Истоки IT: Кен Томпсон, Деннис Ритчи и код как искусство борьбы
Пару слов о концепции «Код как арена борьбы». Здесь не будет исчерпывающих биографий — о каждом из ключевых персонажей нашего повествования написаны увесистые монографии, и одна публикация не заменит целую книгу. Обойдемся мы и без занудного технического препарирования исходников, вряд ли это кому-то покажется захватывающим. Наша цель иная — проследить, как одна созидательная мысль перетекает в другую, образуя нечто вроде эстафетной палочки, которую сквозь десятилетия и эпохи передают мыслители, порой даже не подозревающие о соавторстве. Если же какой-то эпизод или нюанс захочется разобрать досконально — в конце материала заботливо собрана подборка профильной литературы, статей и первоисточников.
Предыдущие главы цикла:
Буквально через несколько дней после ухода Стива Джобса, о котором скорбела вся планета, тихо и незаметно скончался человек, чей программный фундамент заложен в основу подавляющего большинства гаджетов, с экранов которых мир читал новости об этой утрате.
Перед нами пятый очерк из серии «Код как борьба: Кратчайшая хроника IT». Сегодня нас ждет сдвоенный сюжет: два гения настолько плотно сплетены общим прошлым, что искусственно разрывать их тандем было бы верхом несправедливости к их совместному наследию.
Поехали.
Часть первая. Крушение амбициозного мегапроекта и рождение энтузиазма на списанном железе
Кен Томпсон появился на свет в 1943 году в Новом Орлеане, защитив диплом по электротехнике в Беркли. Деннис Ритчи родился в 1941-м в Бронксвилле, штат Нью-Йорк, получив фундаментальное образование по физике и прикладному математическому анализу в Гарварде. Оба вливаются в штат научно-исследовательского гиганта Bell Labs — Томпсон в 1966-м, а Ритчи годом позже.
Там они вовлекаются в масштабную инициативу под кодовым именем Multics — Multiplexed Information and Computing Service. Это была грандиозная коллаборация Bell Labs, Массачусетского технологического института и General Electric, нацеленная на создание передовой операционной среды с разделением машинного времени для множества параллельных юзеров.
Однако с Multics возникла системная неувязка. Авторы попытались объять необъятное: совместить многопользовательский режим, многоуровневую систему защиты конфиденциальности и динамическое распределение мощностей. В итоге система чудовищно раздулась, превратившись в неповотабельного монстра, которого становилось всё сложнее проектировать и администрировать. Проект поглощал колоссальные ресурсы и бесконечно сдвигал дедлайны.
К 1969 году терпение руководства Bell Labs лопается: финансирование сворачивается ввиду его бесперспективности, компания покидает консорциум.
И тут разворачивается самое увлекательное. Оставшись без официального фронта работ и доступа к мощным серверам, Томпсон обнаруживает в закромах лаборатории списанный, заброшенный компьютер PDP-7. На этом архаичном железе он принимается ваять собственную, в разы более элегантную и компактную операционку.
Она транслировала те же концептуальные идеи, что и злосчастный Multics — многозадачность вкупе с древовидной структурой каталогов, но воплощала их лаконично и без избыточного утяжеления.
Любопытна и история обретения имени. В 1970 году соратник разработчиков Брайан Керниган предлагает наименование Unics — как сокращение от Uniplexed Information and Computing Service. Это был здкий каламбур, высмеивающий Multics: «UNIplexed» вместо «MULTiplexed», то есть урезанный вариант для единичной задачи и одного оператора. При этом фонетически термин подозрительно напоминал английское слово «eunuchs» (евнухи), что добавляло ситуации пикантности. Позже аббревиатуру сократили до привычного Unix, хотя Керниган впоследствии откровенно признавался, что авторство окончательного правописания затерялось в веках. Тем не менее, реальный Unix довольно быстро оброс полноценными многозадачными возможностями.
Насмешка над рухнувшим прожектом превратилась в бренд системы, которая в конечном итоге оставит далеко позади своего помпезного предшественника.
Стоит упомянуть и фундаментальную философию, задавшую вектор всей дальнейшей unix-подобной экосистеме. Каждая программа обязана решать ровно одну задачу, но делать это безупречно. Утилиты должны легко стыковаться друг с другом, передавая стандартный текстовый поток на выход одной программы в качестве входящих данных для следующей — так родилась концепция конвейеров (pipe).
Предыстория этой находки анекдотична. Коллега Томпсона и Ритчи по лаборатории Дуглас Макилрой годами пропагандировал идею пайплайнов, еще в 1964 году уподобляя будущую связку утилит обычному садовому шлангу: прикрутил еще один отрезок, когда требуется изменить логику обработки потока. Осенью 1973 года Томпсон, судя по всему, устав от бесконечных споров, бросил знаменитое «я заимплеменчу это» — и буквально за ночь внедрил в командную оболочку символ вертикальной черты, переписав базовые утилиты вроде cat и grep так, чтобы они умели бесшовно принимать чужой вывод. Научным сотрудникам на утро открылся поистине «пир в одну строчку», когда из примитивных кирпичиков стали собираться совершенно неожиданные комбинации, о которых создатели утилит даже не помышляли.
Принцип модульности и композиции одержал верх над громоздкими монолитными конструкциями.
Это была прямая идеологическая антитеза подходу, погубившему Multics.
Часть вторая. Язык, рожденный вопреки необходимости переписывать код под каждое новое железо
Изначально Unix, как и львиная доля системного ПО той эпохи, кодировался на ассемблере — машинно-зависимом языке, привязанном к архитектуре конкретного процессора. Это намертво привязывало софт к «железу», исключая любую миграцию без полной переделки продукта.
Ритчи, создавая язык C (эволюционировавший из более раннего и ограниченного языка B, написанного Томпсоном), ставит перед собой амбициозную задачу: спроектировать инструмент, достаточно низкоуровневый для ювелирного управления памятью и прямых манипуляций с аппаратно-программной частью, что критично для ОС. Но при этом достаточно абстрактный, чтобы идентичный исходный код компилировался под разные аппаратные платформы с минимальными правками.
В 1973 году Томпсон и Ритчи совершают шаг, казавшийся по тем временам безумным: они переписывают ядро Unix с ассемблера на новорожденный Си.
Системное программирование того времени воспринималось исключительно как епархия ассемблера, требующая тотального контроля над «железом». Языки высокого уровня клеймились как «тормозные» и слишком отвлеченные для подобных задач.
Именно поэтому данное решение стало поворотным моментом. Впервые в истории операционная система обрела переносимость. Тот же самый (или почти тот же) код Unix стало возможно компилировать и запускать на принципиально иных процессорных архитектурах, ограничившись написанием нового компилятора Си под целевое железо, вместо того чтобы перелопачивать всю ОС с чистого листа.
Это был изящный практический ответ на хаос фрагментированного компьютерного рынка рубежа 60–70-х годов, когда каждый вендор выпускал уникальную, несовместимую ни с чем экосистему.
В 1978 году Керниган и Ритчи выпускают труд «Язык программирования Си» (The C Programming Language), в профессиональной среде лаконично именуемый K&R по инициалам создателей. Книга превращается в каноническое описание языка на десятилетия вперед и в одну из самых влиятельных технических публикаций человечества. К слову, этот текст по сей день штудируют новички, погружающиеся в системный код — благодаря его кристальной ясности и лаконичности.
Интересен и другой исторический изгиб. В силу антимонопольного соглашения 1956 года материнский концерн Bell Labs, компания AT&T, не имела права вести коммерческую деятельность вне сферы телефонии — а значит, продавать Unix как товар они не могли. В результате систему начали передавать университетам буквально по себестоимости носителей. Это спровоцировало лавинообразное проникновение системы в академическую среду, породив массу независимых форков, важнейшим из которых стал BSD из Беркли, в конечном счете ставший прародителем macOS через цепочку промежуточных этапов.
Иными словами, жесткое антимонопольное законодательство, а не тонкий маркетинговый расчет, выступило невольным двигателем глобальной технологической экспансии.
Часть третью. От лабораторий Bell Labs до кармана каждого землянина
Масштабы оказанного влияния впечатляют воображение, если взглянуть на факты без прикрас.
Прямые наследники и потомки Unix повсюду: это и сам Linux, и macOS через ветку BSD, и Android, функционирующий поверх ядра Linux, и iOS, выросшая на unix-подобном ядре Darwin.
Язык Си и его прямые потомки (C++, Objective-C, отчасти Java и C#, унаследовавшие синтаксическую базу) до сих пор остаются фундаментом, на котором держится львиная доля операционных систем, встраиваемых микроконтроллеров и высокопроизводительного софта по всему миру.
А философия конвейеров и атомарных утилит по сей день служит незыблемым стандартом для консольных интерфейсов Unix и Linux, которыми ежедневно пользуются разработчики планеты.
Два инженера, оставшиеся без официальной поддержки после краха амбициозного проекта, на заброшенном оборудовании создали софт и язык, которые полвека спустя скрываются под графической оболочкой каждого смартфона на Земле — будь то устройство от Apple или аппарат под управлением Android.
И в заключение
Уход Денниса Ритчи в октябре 2011 года совпал по времени со смертью Стива Джобса (основатель Apple скончался 5 октября, а тело Ритчи обнаружили около 12 октября). Эта новость практически потонула в волне медийного истеблишмента, оплакивавшего Джобса, хотя вклад языка Си и Unix-систем в развитие цифровой цивилизации неизмеримо выше любого продукта из Купертино.
Творцы фундаментальных технологических устоев почему-то реже остальных удостаиваются широкой медийной славы.
Резюме
Если труды Тьюринга, фон Неймана и Шеннона очертили теоретический базис — принципы вычислений, архитектуру и логику схем, — то Томпсон и Ритчи первыми в нашей серии явили миру прикладной, массовый инструмент системного инжиниринга, доживший до наших дней практически без концептуальных потерь. Именно с этого рубежа наш цикл окончательно трансформируется из летописи идей в историю живого, функционирующего кода.
Пища для дискуссии в комментариях
Во-первых, Unix появился не благодаря жесткому ТЗ, а вопреки решению руководства прикрыть финансирование. Насколько типичны прорывы в сфере высоких технологий, рожденные в условиях скудного финансирования и «партизанщины»? Что это говорит о природе бюрократического менеджмента инноваций?
Во-вторых, завет Unix — делай одну вещь хорошо и комбинируй примитивы. Почему философия модульности продолжает побеждать монолитных гигантов даже полвека спустя?
В-третьих, возвращаясь к теме незаметности гениев: определяется ли общественное признание в индустрии подлинным масштабом технического вклада или исключительно пиаром и красивым продуктовым нарративом?
В следующем материале мы переключимся с системного базиса на персональный компьютер как массовый продукт. Нас ждет поистине кинематографическая драма всего цикла — история о человеке, которого молва обвинила в том, что он предпочел покружить на частном самолете вместо ключевой встречи с боссами IBM. Спойлер: это красивый миф, и мы препарируем его со всей тщательностью.
Источники и ссылки
-
Годы рождения и трудоустройства Томпсона и Ритчи — ACM A.M. Turing Award: Kenneth Lane Thompson, Wikipedia: Dennis Ritchie
-
Этимология названий Unics/Unix и мемуары Кернигана — Wikipedia: History of Unix
-
Хроника рождения пайплайнов: идеи Макилроя (1964) и ночной спринт Томпсона (1973) — The New Stack: Pipe — How the System Call That Ties Unix Together Came About
-
Антимонопольный декрет AT&T (1956) и его влияние на академическую судьбу Unix — John D. Cook: Why AT&T licensed Unix to universities
-
Даты ухода из жизни Денниса Ритчи (октябрь 2011) и Стива Джобса (5 октября 2011) — Wikipedia: Dennis Ritchie
Рекомендуемая литература
Брайан Керниган, Деннис Ритчи — «Язык программирования Си» (1978, второе издание — 1988). Легендарная K&R. Обязательна к прочтению не только ради исторического контекста, но и как непревзойденное практическое пособие.
Питер Сейбел — «Кодеры за работой. Размышления о ремесле программиста» (2009). Сборник откровенных интервью с легендами индустрии, включая беседу с Кеном Томпсоном — уникальный шанс услышать историю из первых уст.
Брайан Керниган — «Unix: A History and a Memoir» (2019). Мемуары непосредственного свидетеля и участника событий в стенах Bell Labs. Пожалуй, самый аутентичный и живой документ о создании системы.
Эрик Реймонд — «Искусство программирования для Unix» (2003, в сети доступны свободные переводы). Исчерпывающая кодификация unix-философии для тех, кто хочет вникнуть в саму суть подхода.
Материалы ассоциации ACM о вручении премии Тьюринга Томпсону и Ритчи в 1983 году. Официальные отчеты, содержащие программные выступления лауреатов.
Архивные некрологи и ретроспективы октября 2011 года. Полезно изучить реакцию прессы тех дней, чтобы прочувствовать контраст освещения двух параллельных смертей в режиме реального времени.
Красота физики: от цветов и бабочек до квантовой модели атома
Созданы игральные кости новой конструкции, исключающие ничью
Апокалипсис в коде: как смертельные ошибки Therac-25 стали худшим программным сбоем в истории
Искусственный интеллект, сексизм и микроагрессия
ИИ заберет тексты и код, но это никогда не было главной работой человека. Часть 1
Зачем искусственному интеллекту душа: филологический анализ манифеста Никиты Михалкова
Главные новости ИИ за неделю (05.09.26–11.09.26): пока вы спали, вышло ещё три модели
ООН предупреждает: глобальное потепление превысит 1,8 °C, а «хороших сценариев не осталось»