Мой друг Норм Харди скончался 30 октября 2018 года от последней стадии рака. Его последние дни были потрачены на обмен записками с друзьями и близкими. Вот последняя записка, которую я отправил ему:

Норма:

Одной из общих черт, которой нам с вами не хватает, является восприятие времени. Мы оба жили в основном в своих головах, в какой-то мере изолированные от осознания течения времени. Трудно представить, что мы знакомы почти 30 лет — впервые мы встретились в Стэнфорде в 1989 году.

Требования моей жизни с 2009 года сделали меня незнакомцем как для друзей, так и для студентов. У меня не было ни малейшего желания втягивать других в трясину безобразного развода, еще более безобразной битвы за опеку и годы выздоровления для себя и Алекса, а в тот период в моей жизни было не о чем больше говорить. Потом я строил новую семью, новый брак и новый бизнес с моей женой Дарси, и ни на что другое времени не оставалось. Между этими двумя вещами я позволил нам разойтись. Это было одним из моих самых больших сожалений в этот период моей жизни.

Есть одно ваше качество, которым я восхищался и которое в равной степени вызывало недоумение. Для вас идеи и обучение — великая головоломка и приключение. Будет ли результат умным новым алгоритмом, или визуальным результатом, или новым способом мышления об архитектуре компьютера, не имеет значения; вы любили процесс открытия ради самого процесса. Видя вашу радость в этом процессе, я часто хотел, чтобы я мог смотреть на идеи таким же образом, но мой путь и мое внимание иные.

Что касается Марка как друга, вас не удивит, что я тщательно продумала крионику для себя. К непрекращающемуся раздражению Марка, мой ответ всегда был «нет». Я доволен той жизнью, которая у меня есть, и я буду доволен, когда придет время ей закончиться. Для вас я не могу представить никакого другого решения, кроме того, которое вы принимаете. Марк описывает вашу точку зрения так: «Это не так уж и много шансов, но это шанс», и я уверен, что это часть вашего мышления. Но я также уверен, что вы не можете отказаться от возможности исследовать «Неоткрытую страну» и увидеть, какие новые открытия и приключения она может таить.

Иди с моей любовью и исследуй ее для меня.

Ваш,

Джонатан

Он ответил, что я объяснил большую часть его стремления. Милостиво поделившись своими заслугами, он поблагодарил меня за то, что я заразил сообщество L4 нашими идеями [о системах, основанных на возможностях], отметив, что они, похоже, прижились. Он скончался через два дня в окружении друзей, в том числе Марка Миллера (одного из моих докторантов), написавшего свое собственное мнение о вкладе Норма (ссылка будет опубликована после публикации).

Норм дал интервью Музею компьютерной истории Сан-Хосе. Как и его жена Энн. Оба внесли существенный вклад в область вычислительной техники. Они приложили руку к некоторым из первых научных компьютеров IBM, к коммерциализации разделения времени и к созданию первой операционной системы, основанной на функциональных возможностях. Натан Грегори уделяет значительное внимание их участию в Tymshare в The Tym Before, попутно давая представление о том, насколько маленьким был ранний цифровой Дикий Запад и как быстро он менялся. Энн была сильно обманута историей.

Поскольку Марк Миллер пишет о вкладе Норма в системы, основанные на возможностях, я подумал, что мог бы сосредоточиться на втором вкладе, который, на мой взгляд, является более фундаментальным: воплощение идеи «единиц операций» в программном обеспечении. Прежде чем я объясню, что это такое, позвольте мне объяснить, как он пришел к этому.

Хотя его младшие коллеги в основном знают о Норме по его работе над программным обеспечением, Норм был одним из первых членов группы IBM Advanced Computing Systems. Эта группа, возможно, отвечает за всю основу современных вычислений и компиляции. Если у вас есть хоть какой-то интерес к таким вещам, стоит немного углубиться в карьеру Джона Кока, отца как обработки RISC (IBM 801), так и CISC (ACS/360); Джин Амдал , соавтор суперскалярной обработки вместе с Джоном Коком, позже основатель вычислений Амдала; Роберт Томасуло, изобретатель неупорядоченной обработки инструкций и того, что сейчас называется переименованием регистров; Фрэн Аллен, соавтор с Джоном Коуком современной архитектуры компилятора; Линн Конвей, изобретатель современных инструментов проектирования СБИС; Джон Засио, изобретатель средств автоматизированного проектирования печатных плат и СБИС; и Фред Бьюлоу, основатель Cadence и еще один изобретатель инструментов СБИС. На разных этапах моей карьеры мне посчастливилось работать примерно с половиной из этих людей, а с остальными я встречался и разговаривал; Не могу представить, каково было бы работать со всеми ими одновременно. Действительно пожарный шланг.

Одна из ключевых идей ACS, которая, как мне кажется, принадлежит Коку, хотя Томасуло и усовершенствовал ее, заключается в том, что процессоры должны работать четко определенными шагами, известными как «единицы операции». Единица операции либо выполняется до успешного завершения и влияет на [архитектурное] состояние процессора, либо завершается ошибкой и оказывает различное влияние на состояние процессора, обычно в форме исключения. В обоих (точнее, во всех) случаях эффект хорошо выражен. Третьей возможности нет, и, в частности, нет понятия частичного эффекта. Существенным моментом является то, что единица операции переводит процессор из одного архитектурно четко определенного состояния в другое архитектурно четко определенное состояние. Благодаря соблюдению этой дисциплины состояние процессора в любой точке, измеряемой извне, можно рассматривать как результат линейной последовательности шагов, происходящих из четко определенного начального состояния (состояние «питание включено»). Отдельные единицы операции (логически) не выполняются одновременно; по крайней мере, оглядываясь назад, можно последовательно рассказать историю о том, как процессор превратился из того, где он был, в то, где он находится сейчас. Эта последовательная история является ключом к тому, чтобы понять, правильно ли работает процессор. Действительно, именно так определяется, что означает правильное функционирование.

Впервые я встретил Норма в Стэнфорде в 1989 году, когда он выступил с докладом о KeyKOS, производной операционной системе GNOSIS, которую он первоначально создал в Tymshare вместе с Биллом. Франц, Чарли Ландау, Аллен Бомбергер и Джей Джонекайт. В ходе этого выступления он высказал (или, возможно, выдвинул) три ключевые идеи:

  1. Каждая операция ядра переводит систему из одного четко определенного состояния в другое.
  2. Ядро не поддерживает «скрытого» состояния; концептуальное состояние системы полностью определяется содержимым Страниц и Узлов (что было не совсем так, поскольку существовали также «Счетчики» для планирования).
  3. Авторизация и именование никогда не должны быть разделены — возможность давать имя операции и полномочия на выполнение этой операции должны быть идентичными. Это понятие «возможности», которое Марк Миллер обсуждает в другом месте.

Это привело меня к тому, что я прочитал его статью Архитектура KeyKOS (здесь, с другими), настолько объемную, что мне потребовалось семь прочтений и несколько бесед, чтобы полностью усвоить ее.

К тому времени в моей карьере я уже был хорошо знаком с UNIX со времен работы в Bell Labs и сам проделал кучу компиляторов. Благодаря компиляторам я пришел к выводу, что машинные инструкции реализуют единицы операций; Я еще недостаточно понял историю, чтобы оценить, насколько революционной была эта идея, когда ее создала команда ACS. Он даже нашел свое применение в процессорах Intel, в значительной степени непризнанных и недооцененных, благодаря созданию Джоном Уортоном Intel 4004. Многие более поздние проблемы в том, что стало линейкой Pentium, были связаны с «непризнанным» аспектом этого наследования и были исправлены к этой линейке продуктов было добавлено его повторное принятие в качестве поддержки виртуальных машин.

Примечательно, что аналогичной концепции не существовало ни в UNIX, ни в DOS, и эта концепция не была по-настоящему признана в мире программного обеспечения за пределами сообщества верификации программного обеспечения и теории вычислений — и даже там, так и не успев заработать себе имя, под которым о нем можно было бы правильно говорить. В мире вычислительной техники Том Киллиан представил файловую систему /proc в UNIX 8th Edition в Bell Labs и наполовину ввел понятие «точек последовательности» более или менее по необходимости; отладка процесса очень сложна, если состояние остановленного процесса не достаточно четко определено. Роджер Фолкнер и Рон Гомес вместе работали над воплощением этой идеи в UNIX System V Release 4, в то время как мы работали над новым отладчиком для версии UNIX от AT&T. Позже мы с Роджером (независимо, но в сговоре) ухитрились внедрить ту же идею в операционные системы Sun Microsystem Solaris и Silicon Graphics IRIX.

Оглядываясь назад, можно сказать, что наше представление о точке следования было довольно слабым. Он представлял собой четко определенную точку остановки в отношении того, что мы называли «событиями, представляющими интерес», под которыми мы в основном подразумевали события, представляющие интерес для целей отладки. На самом деле мы не учли, что весь дизайн системных вызовов UNIX построен на представлении о том, что неопределенные частичные обновления допустимы, если возвращается код ошибки. У нас, конечно, не было возможности познакомиться с членами команды ACS в тот момент, и я не думаю, что у Денниса Ричи или Кена Томпсона тоже. IBM и все остальные были противоборствующими лагерями с небольшим общением между двумя культурами.

По крайней мере, для меня идея о том, что состояние операционной системы может быть столь четко определенным, была революционной. Достаточно того, что я провел следующий год, пытаясь убедить своих соучредителей в HaL Computer Systems, что нам нужно принять то, что создал Norm, в качестве нашей базовой операционной системы, и в конце концов покинуть HaL, когда они отказались. Большую часть следующего года я потратил на то, чтобы получить лицензию на KeyKOS от развалившейся на тот момент Key Logic, а еще через год создал чистую версию KeyKOS под названием EROS, который в конечном итоге стал основой моей докторской диссертации, а затем Coyotos после моего знакомства с Йохеном Лидтке, Германом Хартигом, Гернотом Хайзером и их усилиями по различным версиям L4. Мой сын Алекс будет помогать мне получить многочасовые кассеты с записью моих разговоров с Нормом о внутреннем устройстве KeyKOS, доступные в Интернете.

Идея четко определенных состояний и единиц работы вошла в программное обеспечение независимо от проверки программного обеспечения — хотя и без названия — хотя я оценил бы это только после того, как познакомился с Norm и KeyKOS. Что делало формулировку Норма необычной, так это утверждение, что это был наиболее разумный способ создания программного обеспечения и (никогда не утверждаемый) единственный способ сделать программное обеспечение правильным, и он считал само собой разумеющимся, что это был полностью практический подход к созданию программного обеспечения, а не просто теоретическое или математическое упражнение. Он был, конечно, прав. Хотя мы пришли к этому разными путями, Йохен Лидтке и я независимо друг от друга использовали эту концепцию, чтобы получить реализации межпроцессного взаимодействия на субмикросекундах на процессорах, которые, оглядываясь назад, были чертовски медленными. Это стало возможным благодаря тому, что мы знали, что представляет собой правильная реализация и, следовательно, какие оптимизации были правильными, а какие нет.

Многие отмечают вклад Норма в компьютерную безопасность, а также его концептуальное наследование и Марка Миллера в безопасность Javascript/ECMAscript. Я согласен. Но я думаю, что это более фундаментальное понятие операционных единиц в программном обеспечении, как правило, оставалось незамеченным.

Те, кто работает в области теории вычислений, потратили почти 60 лет на семантику вычислений, пытаясь придать значение теории вычислений, разработав формальную теорию того, как работают вычисления. Как математик и физик, Норм полностью оценил это, особенно то, что это было выражено в лямбда-исчислении и исчислении Пи. Вклад Норма был проще и в некотором смысле важнее. Он привнес понятие значения в практику вычислений и научил этому несколько поколений студентов.

Как бы ни сложились обстоятельства, я почти уверен, что Норму понравится любая неизведанная страна, с которой он столкнется.