Designing the InternetIn this letter sent by D.K.R. Liklider to his colleagues in 1963, gives an analysis of the complex problems that will be faced when creating a computer network with time sharing with modern software, which will result in the creation of ARPANet, the predecessor of the current Internet. Will the next steps lead to the Intergalactic Computer Network?
')
MANAGEMENT OF PERSPECTIVE RESEARCH PROJECTS (
ARPA )
Washington, DC 25, April 23, 1963
SERVICE NOTE FOR: Members and Branches of the Intergalactic Computer Network
FROM: D.K.R. Liklider
TOPIC: Topics for discussion at the upcoming meeting
First, I apologize for having to postpone the meeting scheduled for May 3, 1963 in Palo Alto. The ARPA team research department has just received a new assignment, which needs to be started immediately, and I have to dedicate the next week to it. Priority is extremely high. I am very sorry that this causes inconvenience to those of you who have already planned everything for May 3. Since I will spend the rest of this week in Cambridge, I will ask my colleagues to postpone the meeting to May 10 in the same place.
I decided to organize a meeting due to the fact that I lack a clear understanding of the whole structure. I am afraid that this fact will be too obvious in the following paragraphs. Nevertheless, I will try to convey some of the information from primary sources and express my thoughts about the possible interaction between the various works carried out at this event in general, and for which, as you might guess, I cannot think of a name.
First of all, I would like to note that all of us, of course, are busy with our projects, make efforts and realize our own (personal and / or organizational) aspirations. It seems to me that we are united by common characteristics, which, in a sense, are associated with the development of the level of technology or information processing technology, as well as with the progress of intellectual abilities (human, human-machine complex or individual machine), and the approach to the theory of science . At least the individual parts are interdependent to some extent. In order to achieve success, each of the existing research needs software and hardware support suitable for a wide range of tasks and more complex than each individual can independently create in a reasonable time.
To achieve their goals, different members of the group will be responsible for the control system, languages ​​and compilers, debugging systems and workflow, as well as for the main computer programs with a more or less general degree of utility. As one of the topics of the meeting, perhaps even it will be the main one, it will consider the possibility of extracting mutual benefits from carrying out this activity, i.e., determining who depends on whom and who can benefit from what and as a result of what actions other group members. Of course, it is necessary to take into account all costs. But nevertheless, it seems to me that for each of us the gain from the awareness of the preliminary plans of others before these plans are approved is more likely than a loss. I do not in any way dispute the need for everyone to adhere to a certain rigid system of rules and restrictions, which could increase, for example, the interchangeability of programs.
But I really think that we should see a complete picture of the mutual influence of the main stages of some of the planned works. All in one place, so that the scheme of work was clearer, so that it could be seen where system-wide arrangements would be useful, and where it is more important to make individual concessions for the common good of the group.
Of course, it is difficult to determine what is included in the concept of the “common good of the group”. Even if there is a risk of confusing your personal goals (or ARPA goals) with the goals of the “group”, nevertheless, let me set out ideas that could, in a sense, turn out to be what the group, system or network wants.
Programming languages, debugging languages, time-sharing systems management languages, computer network languages, databases (or file storage and reading languages), as well as other types of languages, will appear. It is possible to resist this or slightly limit their distribution will be beneficial, and maybe not. But it seems to me that there is no doubt that it would be good for these languages ​​to work out the process of “transferring the knowledge gained as a result of learning”. One way could be to support group coordinated work in making uncoordinated and partially uncoordinated decisions arising in the process of designing and implementing languages. For example, there will be little benefit from the diversity of characters, one per person or institution, denoting "content refers to" or "type of content refers to". It is advisable to adhere as closely as possible as long as it is acceptable within the set of sublanguages ​​of this language system (for example, programming systems, debugging, and time sharing), be it control languages ​​related to JOVIAL on the Q-32 computer or Algol-based system (if such would have been developed and differed from the JOVIAL language family for Q-32, or a number of languages ​​based on FORTRAN for 7090 or 7094.
Having written the previous paragraph, I began to more clearly understand that the complexity of the task of uniformity within a subset of interrelated languages ​​is that at a given time only one time-sharing system will work on this computer, while several programming languages ​​with the appropriate debugging languages can work simultaneously. A time-sharing control language can interact closely with only one pair of programming and debugging languages. With regard to syntax, there is a need for a “preferred” language for each computer or system, which means that it is necessary to check that the time-sharing control language corresponds to this preferred language. Regarding semantics, or, at a minimum, the correspondence of certain characters to specific control functions, I believe that it is possible, although perhaps not entirely convenient, to provide different operators with several different special dictionaries. In any case, there is such a problem, or even a number of problems.
The language of managing a network of computers is not so simple. Imagine a situation where several different institutions are networked, each of which has a high degree of individuality, uses its own special methods and its own specially developed languages. Wouldn’t the task be simplified if all institutions were required to approve any language or at least conclude an agreement on how the question “What language do you speak?” Will be asked. In fact, this is a scientific problem. fiction: "How to organize the process of communication between absolutely unrelated" intelligent "creatures?" But I should not get involved in their extreme assumptions about non-interconnection. (But I am ready to share my assumptions about rationality) Will it be more correct to ask such questions: Is the network management language the same as the time-sharing control language? (If this is the case, the result is a common time-sharing control language) Is the network control language different from the time-sharing control language, and is the network control language common to several networked devices? Is there such a thing as a network management language? (For example, can a user manage his computer in such a way as to be able to connect it to any part of an existing network, and then simply switch to the desired mode?)
In the previous paragraph, I seem to have described the essence of the complexity. Let's take a look from another angle. Obviously, some of the company's employees will be engaged in the compiler, or compilers, in order to convert existing programs that compile FORTAN, JOVIAL, ALGOL, LISP and IPL-V (either Vl or V-ll). If this list is incomplete, then it makes sense to study the planned work on compatibility. Moreover, I believe that it is necessary to consider the plans for the forthcoming works in order to see what their specific functions are, and also to establish whether it makes sense to determine the set of desired functions and try to implement them in one language and one compiler system. I am convinced that the functions of the data structure of the list type are important as a potential element of the languages ​​ALGOL and JOVIAL, that we must think both in terms of including functions of this type of structure in existing languages, and in terms of designing languages ​​based on it.
It may turn out that only in rare cases most computers of the system or even all of them work together in a single network. Nevertheless, the question of developing the performance of operations in an integrated network is quite interesting and important. If it were possible to work in such a network as I vaguely imagine it to myself, we would have at least four large computers, perhaps six or eight small ones, and a huge selection of disk files and blocks of magnetic tapes, not to mention remote consoles and teletypes. It is easier to look at this business through the user's eyes in order to understand what he would like, what he could do, and then later try to determine how to create a system taking into account his requirements. Below is my view of user needs.
(Suppose I sit behind the console, which includes a CRT display, a light pen, and a typewriter.) I want to extract a set of experimental data recorded on a tape called "Listening Test". The data is stored under the name "experiment 3" and, in fact, represent the percentages of the various signal-to-noise ratios. And there are many such empirical functions. The experimental data are presented in the form of a matrix: several listeners, several transmission modes, several values ​​of the signal frequencies with different periods of duration. To begin with, I would like to match some “theoretically” derived graphs with the measured data. And first I want to find out which basic function I should choose to determine the theoretical ratio of percentage values ​​and signal-to-noise ratio. On another tape, called “Curve Approximation,” I have several procedures for selecting a linear and power function, as well as a cumulative normal distribution function. But I would like to try others. Let's first take a look at the features for which I have programs. But the problem is that I don’t have a good program for drawing graphs. And I want one such borrow. A simple rectangular coordinate system will do, but I would like to set the number of tick marks on each axis, as well as the notation.
And I'm going to enter this information through my typewriter. Is there a suitable graphing program somewhere in the system? Based on the prevailing network doctrine, I first of all survey the local repositories, and then the other members of the network. Suppose that I work in the statistical data center (a comment of the SDC is a rather multi-valued abbreviation, so one of the more or less suitable contextual versions is used in the translation), and that I found a suitable program on the Berkeley file disc.
But my programs are written in JOVIAL, and those that I found are in FORTRAN. I need to present them in a floating binary form and use them as submodules in my program for approximating functions either at run time or at the loading stage.
Suppose I did all this. Go ahead. I see that linear, cubic functions, and also curves of the fifth order, etc. Do not give a good approximation for my data. The most acceptable of what was in the arsenal, on the oscilloscope screen looked disgusting.
The result of approximation of data on the cumulative normal distribution function turned out to be not so bad, but I am more interested in the basic function, which I can control by specifying several values ​​of the curve length, and not get acquainted with any particular theory about the demodulation process, so I just want find out if anyone in the system has any programs for approximating curves that take as input user-supplied functions or which have built-in functions that remotely resemble to mulyativnuyu normal distribution curve, but asymmetric. Suppose I look at various files, or even the main network resource, and I understand that there are no such programs. Therefore, I decide to continue working with the normal distribution curve.
At this stage I will have to program a little. I will work with my data and approximation programs for the normal distribution curve to show how those programs work that I borrowed. I need to get a graph approximated on a different subset of my data, limiting the average value, and also achieving a slow growth of discrepancies as we move along the axes of ordinal numbers and coefficients, while allowing minor differences in the sets of numerical values ​​of the curve length for different subjects. So, the next step is to create some main program for setting the curve length values ​​for the approximation procedures and displaying both the graphical representation and the numerical indicators of the approximation level in the process of setting suitable (for me) settings. And all this using a light pen and an oscilloscope screen. Let's just say, for my actual data, I write my program again and again, taking into account the auxiliary programs mentioned above, until I get the desired result.
Suppose that I finally got it, and now I have some acceptable results, images that reflect both the data obtained experimentally and the “theoretically” verified graphs of functions, as well as new programs for reuse in the future. I want to create a system from a number of such programs, and store it separately under the name "System for approximating the graph of the normal distribution function with a curve length limitation."
Further, let us imagine that my intuitive and natural way of naming a system goes against the general rules for naming programs on the network. I would like something to draw my attention to the differences from the accepted norms, since when it comes to software libraries and publicly available files with useful data, I become a bona fide "employee highly committed to my organization."
In the previous paragraph, I must have tried several network functions. I was engaged in extracting the necessary information through some system that searches for programs according to the main criteria I defined. Perhaps this system was based on descriptors (or something similar), as well as on computer understanding of the natural language, which will not be soon. However, it would be nice to use some of the possibilities of avant-garde linguistics. Using other people's programs, I thus worked on some of the links between my own and borrowed programs. Let's hope that I did it without much effort, and that the connections were established (or the foundation was laid for their installation) when the programs became part of the system I used.
I did not use any other people's data, but only because I had my own. If I tried to test some theory, I would use not only third-party programs, but also data collected by other people.
Suppose all actions took place on a computer in the center of statistical data, where, as expected, I was. However, I would leave it at the guess level. Even with the complex network management system, I could not decide whether to send the data somewhere for processing, or download the programs and run them on my data set. I do not mind making such decisions, anyway, for a while, but, in principle, it would be better if the computer or the network itself does. Upon completion, I gathered my data in one place so that others could use it. Perhaps this gave a kind of impetus to the creation of a system of control agreements, which in the early stages should be based on both human assessments and machine processing.
The described example (unfortunately, the description was quite long) is destined to become a kind of example from the examples. I would like to compile, or be sure that someone else will collect a large number of such examples in order to see what applications and hardware they need. Something tells me that the result of a large number of such examples would be a very large random access memory.
And now, let's approach the problem from the other side, and I will describe the course of my thoughts. (And then I was interrupted, and the discussion was about to go off in a different direction). -, , « ». , JOVIAL «» . ?
-, , . , , , . , , , . , , . -, . , . - . ?
. , .. « », , , «--»?
. , , , , , Q-32, , . , 7090, 7094, , . ? ?
. , . , , , , , , .
, . . . ARPA - .
, ARPA, , , . , , , , .
, , , , , . , , , ARPA . , , .
, , . , - . , , , .
PS
— .
→
«» : « » (1960), 1