This article covers the History of CP/CMS — the historical context in which the IBM time-sharing virtual machine operating system was built.
CP/CMS development occurred in a complex political and technical milieu.
Historical notes, below, provides supporting quotes and citations from first-hand observers.
Early 60s: CTSS, early time-sharing, and Project MAC
The seminal first-generation time-sharing system was CTSS, first demonstrated at MIT in 1961 and in production use from 1964 to 1974.Creasy, op. cit., p. 485 — CTSS dates It paved the way for Multics, CP/CMS, and all other time-sharing environments. Time-sharing concepts were first articulated in the late 50s, particularly as a way to meet the needs of scientific computing. At the time, computers were primarily used for batch processing — where jobs were submitted on punch cards, and run in sequence. Time-sharing let users interact directly with a computer, so that calculation and simulation results could be seen immediately.
Scientific users quickly embraced the concept of time-sharing, and pressured computer vendors such as IBM for improved time-sharing capabilities. MIT researchers spearheaded this effort, launching Project MAC, which was intended to develop the next generation of time-sharing technology and which would ultimately build Multics, an extremely feature-rich time-sharing system that would later inspire the initial development of UNIX.cf. Ritchie, "The Evolution of the Unix Time-sharing System" , AT&T Bell Laboratories Technical Journal, Vol. 63 No. 6 Part 2, October 1984, pp. 1577-93 This high-profile team of leading computer scientists formed very specific technical recommendations and requirements, seeking an appropriate hardware platform for their new system. The technical problems were awesome. Most early time-sharing systems sidestepped these problems by giving users new or modified languages, such as Dartmouth BASIC, which were accessed through interpreters or restricted execution contexts. But the Project MAC vision was for shared, unrestricted access to general-purpose computing.
Along with other vendors, IBM submitted a proposal to Project MAC. However, IBM's proposal was not well received: To IBM's surprise, MIT chose General Electric as the Multics system vendor. The fallout from this event led directly to CP/CMS.
IBM and the System/360
In the early 60s, IBM was struggling to define its technical direction. The company had identified a problem with its past computer offerings: incompatibility between the many IBM products and product lines. Each new product family, and each new generation of technology, forced customers to wrestle with an entirely new set of technical specifications. IBM products incorporated a wide variety of processor designs, memory architectures, instruction sets, input/output strategies, etc. This was not, of course, unique to IBM. All computer vendors seemed to begin each new system with a "clean sheet" design. IBM saw this as both a problem and an opportunity. The cost of software migration was an increasing barrier to hardware sales. Customers could not afford to upgrade their computers, and IBM wanted to change this.
IBM embarked on a very risky undertaking: the System/360. This product line was intended to replace IBM's diverse earlier offerings, including the IBM 7000 series, the canceled IBM 8000 series, the IBM 1130 series, and various other specialized machines used for scientific and other applications. The System/360 would span an unprecedented range of processing power, memory size, device support, and cost; and more important, it was based on a pledge of backward compatibility, such that any customer could move software to a new system without modification. In today's world of standard interfaces and portable systems, this may not seem such a radical goal; but at the time, it was revolutionary. Before System/360, each computer model often had its own specific devices and programs that could not be used with other systems. Buying a bigger CPU also meant buying new printers, card readers, tape drives, etc. In addition, customers would have to rewrite their programs to run on the new CPU, something customers often balked at. With the S/360, IBM wanted to offer a huge range of computer systems, all sharing a single processor architecture, instruction set, I/O interface, and operating system. Customers would be able to "mix and match" to meet current needs; and they could confidently upgrade their systems in the future, without the need to rewrite all their software applications. IBM's focus remained on its traditional customer base: large organizations doing administrative and business data processing.
At the start of the System/360 project, IBM did not fully appreciate the amount of risk involved. System/360 ultimately gave IBM total dominance over the computer industry; but at first, it nearly put IBM out of business. IBM took on one of the largest and most ambitious engineering projects in history, and in the process discovered diseconomies of scale and the mythical man-month. Extensive literature on the period, such as that by Fred Brooks, illustrate the pitfalls.
It was during the period of System/360 panic that Project MAC asked IBM to provide computers with extensive time-sharing capabilities. This was not the direction the System/360 project was going. Time-sharing wasn't seen as important to IBM's main customer base; batch processing was key. Moreover, time-sharing was new ground. Many of the concepts involved, such as virtual memory, remained unproven. For example: At the time, nobody could explain why the troubled Manchester/Ferranti Atlas virtual memory "didn't work".Comeau, op. cit., p. 40 — Atlas "didn't work" This was later explained as due to thrashing, based on CP/CMS and M44/44X research. As a result, IBM's System/360 announcement in April 1964 did not include key elements sought by the time-sharing advocates, particularly virtual memory capabilities. Project MAC researchers were crushed and angered by this decision. The System/360 design team met with Project MAC researchers, and listened to their objections; but IBM chose another path.
In February 1964, at the height of these events, IBM had launched its Cambridge Scientific Center (CSC), headed by Norm Rassmussen. CSC was to serve as the link between MIT researchers and the IBM labs, and was located in the same building with Project MAC. IBM fully expected to win the Project MAC competition, and to retain its perceived lead in scientific computing and time-sharing.
One of CSC's first projects was to submit IBM's Project MAC proposal. IBM had received intelligence that MIT was leaning toward the GE proposal, which was for a modified 600-series computer with virtual memory hardware and other enhancements; this would eventually become the GE 645. IBM proposed a modified S/360 that would include a virtual memory device called the "Blaauw Box" – a component that had been designed for, but not included in, the S/360. The MIT team rejected IBM's proposal. The modified S/360 was seen as too different from the rest of the S/360 line; MIT did not want to use a customized or special-purpose computer for MULTICS, but sought hardware that would be widely available. GE was prepared to make a large commitment to time-sharing, while IBM was seen as obstructive. Bell Laboratories, another important IBM customer, soon made the same decision, and rejected the S/360 for time-sharing.
1964–67: CP-40, S/360-67, and TSS
The loss of Project MAC was devastating for CSC, which essentially lost its reason for existence. Rasmussen remained committed to time-sharing, and wanted to earn back the confidence of MIT and other researchers. To do this, he made a bold decision: The now-idle CSC team would build a time-sharing operating system for the S/360. Robert Creasy left Project MAC to lead the CSC team, which promptly began work on what was to become CP-40, the first successful virtual machine operating system based on fully virtualized hardware.Varian, op. cit., p. 10, Note 26 — the experimental IBM M44/44X paging system used virtual machines that did not fully virtualize the 7044: "close enough to a virtual machine system to show that 'close enough' did not count"
IBM's loss of Project MAC and Bell Laboratories caused repercussions elsewhere at IBM. IBM created a corporate task force to find a satisfactory way to meet customer time-sharing requirements. The team, which included key staff from CSC, designed a new S/360 model that was closer to the goals of the MIT researchers. This was to become the IBM System/360-67, announced in August 1965 and shipped in July 1966. IBM's announcement also included a new time-sharing operating system, TSS/360, optimistically scheduled for June 1967 release. IBM reorganized its development and manufacturing divisions to correct perceived problems, and perhaps to punish those responsible for IBM's loss of face.
CSC soon submitted a successful proposal to MIT's Lincoln Laboratory for a S/360-67, marking an improvement in IBM's credibility at MIT. By committing to a "real" time-sharing product, rather than a customized RPQ system, IBM was showing the kind of commitment MIT found with GE.
CSC also continued work on CP-40, ostensibly to provide research input to the S/360-67 team — but also because the CSC team had grown skeptical about the TSS project, which faced a very aggressive schedule and lofty goals. Since a S/360-67 would not be available to CSC for some time, the team conceived an ingenious stopgap measure: building their own virtual-memory S/360. They designed a set of custom hardware and microcode changes that could be implemented on a S/360-40, providing a comparable platform capable of supporting CP-40's virtual machine architecture. Actual CP-40 and CMS development began in mid 1965, even before the arrival of their modified S/360-40. First production use of CP-40 was in January 1967.
The TSS project, in the meantime, was running late and struggling with problems. CSC personnel became increasingly convinced that CP/CMS was the correct architecture for S/360 time-sharing.
1967–68: CP-67
In September 1966, CSC staff began the conversion of CP-40 and CMS to run on the S/360-67. CP-67 was a significant reimplementation of CP-40; Varian reports that the design was "generalized substantially, to allow a variable number of virtual machines, with larger virtual memories", that new data structures replaced "the control blocks describing the virtual machines [which] had been a hard-coded part of the nucleus", that CP-67 added "the concept of free storage, so that control blocks could be allocated dynamically", and that "the inter-module linkage was also reworked, and the code was made re-entrant." Since CSC's -67 would not arrive for some time, CSC further modified the microcode on its own customized S/360-40 to simulate the S/360-67 – particularly its different approach to virtual memory.Varian, op. cit., p. 18 — CP-40 reimplemented as CP-67 CSC repeatedly and successfully used simulation to work around the absence of hardware: when waiting for its modified S/360-40, for its S/360-67, and later for the first S/370 prototypes. This can be seen as a logical outgrowth of "virtual machine" thinking. During this period, early testing of CP-67 was also done at sites where S/360-67 hardware was available – notably IBM's Yorktown Heights lab and MIT's Lincoln Laboratory.