Проектируя Интернет
В данном письме, отправленном Д.К.Р. Ликлайдером своим коллегам в 1963 году, приведен анализ сложных проблем, с которыми придется столкнуться при создании компьютерной сети с разделением времени с современным программным обеспечением, что в результате приведет к созданию ARPANet, предшественнику нынешней сети Интернет. А приведут ли последующие шаги к Межгалактической компьтерной сети?
УПРАВЛЕНИЕ ПЕРСПЕКТИВНЫХ ИССЛЕДОВАТЕЛЬСКИХ ПРОЕКТОВ (ARPA)
Вашингтон 25, округ Колумбия, 23 апреля 1963
СЛУЖЕБНАЯ ЗАПИСКА ДЛЯ: членов и филиалов Межгалактической компьютерной сети
ОТ: Д.К.Р. Ликлайдер
ТЕМА: Темы для обсуждения на предстоящем собрании
Во-первых, я приношу свои извинения за то, что мне пришлось перенести встречу, запланированную на 3 мая 1963 года в Пало-Альто. Отдел командных исследований ARPA только что получил новое задание, к которому нужно немедленно приступить, и я должен посвятить ему всю следующую неделю. Приоритет чрезвычайно высокий. Я очень сожалею, что это доставляет неудобства тем из вас, кто уже все распланировал на 3 мая. Поскольку остаток этой недели я проведу в Кэмбридже, я попрошу своих коллег перенести собрание на 10 мая в том же месте.
Я решил организовать встречу в связи с тем, что у меня отсутствует четкое понимание всей структуры. Боюсь, что данный факт будет слишком очевиден в последующих абзацах. Тем не мене, я попытаюсь передать некоторые сведения из первоисточников и изложить свои мысли по поводу возможного взаимодействия между различными работами, проводимыми в рамках данного мероприятия вообще, и для которого, как вы могли догадаться, я не могу придумать название.
В первую очередь, хотелось бы отметить, что все мы, конечно же, заняты своими проектами, прилагаем усилия и реализуем каждый свои (личные и/или организационные) стремления. Как мне кажется, нас объединяют общие характеристики, которые, в каком-то смысле, связаны с развитием уровня техники или технологии обработки информации, а также с прогрессом интеллектуальных способностей (человека, человеко-машинного комплекса или отдельной машины), и подходом к теории науки. По крайней мере, отдельные части в некоторой степени взаимозависимы. Чтобы достичь успеха, каждое из действующих исследований нуждается в программной и аппаратной поддержке, подходящей под широкий круг задач и более сложной, чем каждый в отдельности может самостоятельно создать за приемлемое время.
Чтобы добиться своих целей, разные члены группы будут нести ответственность за систему контроля, языки и компиляторы, системы отладки и документооборот, а также за основные компьютерные программы с более или менее общей степенью полезности. В качестве одной из тем встречи, возможно даже она будет основной, будет рассмотреть возможность извлечения взаимной выгоды от проведения данной активности, т. е. определить, кто от кого зависит, а также кто, за что и в результате каких действий может получить пользу от других членов группы. Конечно, необходимо принимать во внимание все издержки. Но тем не менее, мне кажется, что для каждого из нас выигрыш от осведомленности о предварительных планах других до того, как эти планы будут утверждены, более вероятен, чем проигрыш. Я ни в коем случае не оспариваю необходимость каждого придерживаться некой жесткой системы правил и ограничений, что могло бы увеличить, например, взаимозаменяемость программ.
Но я действительно считаю, что нам следует видеть полную картину взаимного влияния основных этапов некоторых запланированных работ. Все в одном месте, чтобы схема работы была нагляднее, чтобы было видно, где пригодятся общесистемные договоренности, а где важнее пойти на индивидуальные уступки ради общего блага группы.
Конечно, сложно определить, что входит в понятие «общего блага группы». Даже если есть риск спутать свои личные цели (или цели ARPA) с целями «группы», все же, позвольте мне изложить идеи, которые могли бы, в некотором смысле, оказаться тем самым, чего желает группа, система или сеть.
Появятся языки программирования, языки отладки, языки управления систем с разделением времени, языки компьютерных сетей, баз данных (или языки хранение и чтения файлов), а также, возможно, и другие виды языков. Возможно, противостоять этому или слегка ограничивать такое их распространение будет выгодно, а может, и нет. Но мне кажется, что нет никаких сомнений в том, что для этих языков хорошо бы выработать процесс «переноса знаний, полученных в результате обучения». Одним из способов может стать поддержка групповой слаженной работы в принятии несогласованных и частично несогласованных решений, возникающих в процессе проектировании и реализации языков. Например, будет мало пользы от разнообразия символов, по одному на человека или учреждение, обозначая «содержимое относится к» или «тип содержимого относится к». Желательно как можно тщательнее придерживаться единообразия, пока это приемлемо в рамках набора подъязыков данной языковой системы (например, системы программирования, отладки, и разделения времени), будь то языки управления, родственные JOVIAL на компьютере Q-32, или система на основе Algol (если бы таковая была разработана и отличалась бы от семейства языков JOVIAL) для Q-32, или ряд языков на основе FORTRAN для 7090 или 7094.
Написав предыдущий абзац, я стал четче понимать, что сложность задачи единообразия в рамках подмножества взаимосвязанных языков заключается в том, что в данный момент времени на данном компьютере будет работать только одна система с разделением времени, в то время как несколько языков программирования с соответствующими языками отладки могут работать одновременно. Язык управления разделением времени может тесно взаимодействовать только с одной парой языков программирования и отладки. Что касается синтаксиса, тут возникает потребность в «предпочтительном» языке для каждого компьютера или системы, из чего следует, что нужно проверять, что язык управления разделением времени соответствует этому предпочтительному языку. Касательно семантики, или, как минимум, соответствия определенных символов конкретным функциям управления, я полагаю, что возможно, хотя, может быть, и не совсем удобно, предоставить разным операторам несколько различных специальных словарей. В любом случае, такая проблема есть, или даже целый ряд проблем.
С языком управления сетью компьютеров все не так просто. Представим ситуацию, когда несколько разных учреждений объединены в сеть, при этом каждое из них отличается высокой степенью индивидуальности, использует в работе свои особые методы и собственные специально разработанные языки. Разве задача не упростилась бы, если бы все учреждения были обязаны утвердить какой-нибудь язык или, по крайней мере, заключить соглашение о том, каким образом будет задаваться вопрос «На каком языке вы говорите?» По сути дела, эта проблема из разряда научной фантастики: «Как организовать процесс общения между абсолютно невзаимосвязанными «разумными» существами?» Но мне не следует увлекаться в своих крайних предположениях о невзаимосвязности. (Но я готов поделиться своими предположениями относительно разумности) Правильнее будет задавать такие вопросы: Язык управления сетью — это то же самое, что и язык управления разделением времени? (Если это так, то в результате получим язык управления разделением времени общего вида) Отличается ли язык управления сетью от языка управления разделением времени, и является ли язык управление сетью общим для нескольких объединенных в сеть устройств? Существует ли вообще такая вещь как язык управления сетью? (Например, может ли пользователь управлять своим компьютером таким образом, чтобы иметь возможность подключать его к любой части уже действующей сети, и потом просто переходить в нужный режим?)
В предыдущем абзаце я, кажется, описал самую суть сложности. Давайте взглянем с другого ракурса. Очевидно, что кто-нибудь из работников компании будет заниматься компилятором, или компиляторами, с целью преобразовать существующие программы, которые компилируют FORTAN, JOVIAL, ALGOL, LISP и IPL-V (либо V-l, либо V-ll). Если этот список неполный, тогда имеет смысл заняться изучением планируемых работ на совместимость. Более того, я считаю, что рассмотреть планы по предстоящим работам нужно еще и для того, чтобы увидеть, каковы их специфичные функции, а также установить, есть ли смысл в том, чтобы определить совокупность желаемых функций, и попытаться реализовать их в одном языке и одной системе компиляторов. Я убежден, что функции структуры данных типа список важны как потенциальный элемент языков ALGOL и JOVIAL, что мы должны мыслить как в терминах включения функций данного типа структуры в существующие языки, так и в терминах проектирования языков на ее основе.
Возможно, окажется так, что только в редких случаях большинство компьютеров системы или даже все они работают совместно в единой сети. Тем не менее, вопрос развития производительности операций в интегрированной сети довольно интересен и важен. Если бы можно было работать в такой сети, какой я ее себе смутно представляю, у нас было бы, как минимум, четыре больших компьютера, возможно, шесть или восемь маленьких, и огромный выбор дисковых файлов и блоков магнитных лент, не говоря уже об удаленных консолях и телетайпах. Проще на это дело взглянуть глазами пользователя, чтобы понять, что ему бы хотелось, что он мог бы делать, и уже потом попытаться определить, как создать систему с учетом его требований. Ниже представлено мое видение потребностей пользователя.
(Предположим, я сижу за консолью, в состав которой входит ЭЛТ дисплей, световое перо, и пишущая машинка.) Я хочу извлечь набор экспериментальных данных, записанных на ленте под названием «Тест на прослушивание». Данные хранятся под именем «эксперимент 3» и, по сути, представляют собой проценты различных отношений сигнал/шум. И таких эмпирических функций много. Экспериментальные данные представлены в виде матрицы: несколько слушателей, несколько режимов передачи, несколько значений частот сигнала с разными периодами длительности. Для начала мне хотелось бы поставить в соответствие измеренным данным некоторые «теоретически» выведенные графики. А предварительно я хочу выяснить, какую базовую функцию мне выбрать для определения теоретического соотношения процентных значений и отношения сигнал/шум. На другой ленте, под названием «Аппроксимирование кривыми», у меня есть несколько процедур для подбора линейной и степенной функции, а также кумулятивной функции нормального распределения. Но я бы хотел попробовать и другие. Давайте сначала посмотрим функции, для которых у меня есть программы. Но проблема в том, что вот хорошей программы для рисования графиков у меня как раз и нет. И я хочу одну такую позаимствовать. Подойдет простая прямоугольная система координат, но мне бы хотелось задать количество делений на каждой оси, а также обозначения.
И вводить эту информацию я собираюсь через свою пишущую машинку. Где-нибудь в системе есть подходящая программа для построения графиков? Основываясь на преобладающей сетевой доктрине, я в первую очередь опрашиваю локальные хранилища, а потом уже и других участников сети. Предположим, что я работаю в центре статистических данных (прим. пер. SDC — довольно многозначная аббревиатура, поэтому в переводе используется один из вариантов, более-менее подходящих по контексту), и что я нашел подходящую программу на файловом диске Беркли.
Но мои-то программы написаны на JOVIAL, а те, что я нашел, — на FORTRAN. Мне нужно представить их в перемещаемом бинарном виде и использовать как подмодули в своей программе для аппроксимации функций либо во время выполнения, либо на этапе загрузки.
Предположим, я все это выполнил. Идем дальше. Я вижу, что линейные, кубические функции, а также кривые пятого порядка и т.п. не дают хорошей аппроксимации для моих данных. Самое приемлемое из того, что было в арсенале, на экране осциллографа выглядело отвратительно.
Результат аппроксимации данных на кумулятивной функции нормального распределения оказался не так уж и плох, но меня больше интересует базовая функция, которой я могу управлять, задавая несколько значений длины кривой, а не знакомиться с какой-то определенной теорией о процессе демодуляции, поэтому я просто хочу выяснить, есть ли у кого-нибудь в системе какие-нибудь программы для аппроксимации кривых, которые принимают на вход функции, предоставленные пользователем, или в которых присутствуют встроенные функции, отдаленно напоминающие кумулятивную кривую нормального распределения, только асимметричную. Предположим, я просматриваю различные файлы, или даже главный сетевой ресурс, и понимаю, что таких программ нет. Поэтому я принимаю решение продолжить работу с кривой нормального распределения.
На данном этапе мне придется немного попрограммировать. Работать я буду со своими данными и программами аппроксимации для кривой нормального распределения, чтобы показать, как работают те программы, что я позаимстовал. Мне нужно получить график, аппроксимированный на различном подмножестве своих данных, ограничивая среднее значение, а также добиваясь медленного роста расхождений по мере продвижения вдоль осей порядковых чисел и коэффициентов, при этом допуская незначительные отличия в наборах числовых значений длины кривой для различных субъектов. Итак, следующим шагом создаю некоторую главную программу для установки значений длины кривой для процедур аппроксимации и вывода как графического представления, так и числовых показателей уровня аппроксимации в процессе выставления подходящих (для меня) настроек. И все это с использованием светового пера и экрана осциллографа. Скажем так, для своих актуальных данных я пишу свою программу снова и снова, с учетом вспомогательных программ, о которых упоминалось выше, пока не получу нужный результат.
Предположим, что у меня, наконец-то, получилось, и вот у меня есть некоторые приемлемые результаты, изображения, отражающие как данные, полученные опытным путем, так и «теоретически» выверенные графики функций, а также новые программы для повторного использования в будущем. Я хочу создать систему из целого ряда таких программ, и хранить ее отдельно под именем «Система для аппроксимации графика функции нормального распределения с ограничением длины кривой».
Далее представим, что мой интуитивный и естественный способ именования системы идет вразрез с общими правилами именования программ в сети. Мне бы хотелось, чтобы что-нибудь обратило мое внимание на отличия от принятых норм, т.к. когда дело доходит до программных библиотек и общедоступных файлов с полезными данными, я становлюсь добросовестным «сотрудником, высоко преданным своей организации».
В предыдущем абзаце я, должно быть, испробовал несколько функций сети. Я занимался извлечением нужной информации посредством некоторой системы, которая ищет программы по основным определенным мной критериям. Возможно, эта система была основана на дескрипторах (или чем-то подобным), а также на понимании компьютером естественного языка, что будет еще не скоро. Однако, было бы приятно пользоваться некоторыми возможностями авангардной лингвистики. Используя чужие программы, я, таким образом, воздействовал на некоторые связи между своими и позаимствованными программами. Будем надеяться, что у меня это получилось без особых усилий, и что связи были установлены (или был заложен фундамент для их установки), когда программы стали частью использованной мной системы.
Никаких чужих данных я не использовал, но только потому, что у меня были свои собственные. Если бы я пытался проверить какую-то теорию, я бы воспользовался не только сторонними программами, но и собранными другими людьми данными.
Допустим, все действия происходили на компьютере в центре статистических данных, где, как предполагалось, я и находился. Однако я бы оставил это на уровне догадок. Даже с учетом сложной системы управления сетью, я бы не смог решить, отправить ли данные куда-нибудь на обработку, или скачать программы и запустить их на своем наборе данных. Я не против принимать такие решения, во всяком случае, некоторое время, но, в принципе, будет лучше, если это будет делать компьютер или сама сеть. По завершению работы, я собрал свои данные в одном месте, чтобы ими могли воспользоваться другие. Возможно, это дало своего рода толчок к созданию системы контроля соглашений, которая на ранних этапах должна основываться как на человеческих оценках, так и на машинной обработке.
Описанному примеру (к сожалению, описание получилось довольно длинным) суждено стать своего рода примером из примеров. Хотелось бы собрать, или быть уверенным, что кто-то другой соберет большое число таких примеров, чтобы увидеть, какие приложения и аппаратура им потребуется. Что-то мне подсказывает, что результатом большого числа таких примеров стала бы очень большая память с произвольным доступом.
А теперь, подойдем к проблеме с другой стороны, и я опишу ход своих мыслей. (И тут меня прервали, а обсуждение вот-вот должно было уйти в другое русло). Во-первых, неясно до конца, что такое «чистая процедура». Я понимаю, что новая версия JOVIAL будет компилировать программы в абсолютном «процедурном» стиле. Но будут ли другие компиляторы разных учреждений поступать так же?
Во-вторых, неясна ситуация с интерпретацией запросов, поступающих от одной организации к другой. Я смутно представляю систему перевода, которая преобразовывала бы входящий язык в команды или вопросы, сформированные по правилам, в соответствии с которыми работает организация. С другой стороны, преобразование, конечно же, может проводиться и на стороне отправителя. А еще, может быть достигнута такая согласованность, при которой все общаются на едином языке и используют общие форматы. В-третьих, существует проблема с защитой и обновлением общих файлов. Я не хочу пользоваться данными из файла, в который другой пользователь в это время вносит изменения. В ходе совместной работы можно воспользоваться чем-то приблизительно схожим с категорией защиты данных в вооруженных силах. Но как в этом случае мы ей будет управлять?
Далее перейдем к проблеме пошаговой компиляции. Правда ли, что А.Д. Перлис со своими «связными списками», по сути дела, решил данную проблему, а также и схожую с ней задачу «компиляция-тестирование-перекомпиляция»?
А теперь к вопросам об аппаратной части. Меня беспокоит то, что решение задачи по учету границ, или, если выразиться более общим языком, задачи защиты памяти, может дорого нам обойтись на машине Q-32, а на других машинах это будет и дорого, и трудно. Также меня волнует проблема свопинга и передачи информации между ядром и памятью второго уровня, которую будет трудно и дорого решить и на 7090, и на 7094, а еще меня беспокоит то, что возможность разделения времени не принесет особой пользы без быстрых операций передачи и свопинга. Что же будет наилучшим решением? На какой стадии находятся наши общие планы?
В длинном описании примера неявно звучит вопрос о подключении подпрограмм во время выполнения. Вызов сам по себе через простую директорию сделать несложно, но вот разобраться с системными переменными уже не так просто. Может быть, в принципе, это и несложно, и нужно отметить, что, возможно, это и нерационально управлять подключением системных переменных во время выполнения посредством таблиц или простых схем адресации.
Уже пора завершать письмо, т. к. мне нужно успеть на самолет. Я хотел провести обзор интересов отдела командования и управления ARPA в рамках темы об улучшенной версии взаимодействия человек-компьютер в компьютерных сетях и системах с разделением времени.
Полагаю, все понимают причины такого интереса к данной сфере со стороны ARPA, но, при необходимости, я могу кратко их осветить на собрании. Дело в том, что вооруженные силы сильно нуждаются в решении многих проблем, которые возникнут в будущем, и мы смогли бы им помочь, если бы по максимуму использовали разрабатываемые сейчас устройства.
Надеюсь, что очевидных преимуществ в совместной работе и программировании будет предостаточно, что приведет нас к решению проблем и, таким образом, создаст технологии, в которых нуждаются вооруженные силы. Когда проблемы четко вырисовываются в военной сфере, и кажется, что они не затронут исследовательскую область, тогда ARPA принимает действия по их регулированию по мере возникновения таких ситуаций. Но, надеюсь, многие из этих проблем будут одинаково важны для обеих сфер.
В заключение повторю, что нам следует подробно обсудить вопросы и задачи, которые я пытался здесь представить. Возможно, кое-какие вопросы остались не заданными. Надеюсь, обсуждение не будет таким запутанным, как мое письмо, которое я уже заканчиваю.
P.S.
Кто хочет помочь разобраться с истоками компьютерной революции и помочь с переводами — пишите в личку.
→ Джозеф «Лик» Ликлайдер: «Симбиоз человека и компьютера» (1960), часть 1