Recent from talks
Contribute something
Nothing was collected or created yet.
Multics
View on Wikipedia
| Multics | |
|---|---|
Login screen for the BAN.AI public Multics server | |
| Developer | MIT, GE, Honeywell, Bell Labs |
| Written in | PL/I, Assembly language[1] |
| Working state | Mature, current, historic, emulator available |
| Source model | Open source |
| Initial release | 1969 |
| Latest release | 12.8 / August 10, 2023 |
| Repository | |
| Available in | English |
| Supported platforms | GE-645, Honeywell 6000 series machines (Honeywell 6180, Series-60/Level-68, DPS-8/M mainframes) |
| Kernel type | Monolithic kernel |
| Influenced | Unix, GEORGE 3, ICL VME, PRIMOS, Domain/OS, Stratus VOS |
| Default user interface | Command-line interface |
| License | Originally proprietary, Free software Multics License since 2007[2][3] |
| Preceded by | Compatible Time-Sharing System |
| Official website | multics-wiki |
Multics ("MULTiplexed Information and Computing Service") is an influential early time-sharing operating system based on the concept of a single-level memory.[4][5] It has been written that Multics "has influenced all modern operating systems since, from microcomputers to mainframes."[6]
Initial planning and development for Multics started in 1964, in Cambridge, Massachusetts. Originally it was a cooperative project led by MIT (Project MAC with Fernando Corbató) along with General Electric and Bell Labs. It was developed on the GE 645 computer, which was specially designed for it; the first one was delivered to MIT in January 1967. GE offered their earlier 635 systems with the Dartmouth Time-Sharing System which they called "Mark I" and intended to offer the 645 with Multics as a larger successor. Bell withdrew from the project in 1969 as it became clear it would not deliver a working system in the short term. Shortly thereafter, GE decided to exit the computer industry entirely and sold the division to Honeywell in 1970. Honeywell offered Multics commercially, but with limited success.
Multics has numerous features intended to ensure high availability so that it would support a computing utility similar to the telephone and electricity utilities. Modular hardware structure and software architecture are used to achieve this. The system can grow in size by simply adding more of the appropriate resource, be it computing power, main memory, or disk storage. Separate access control lists on every file provide flexible information sharing, but complete privacy when needed. Multics has a number of standard mechanisms to allow engineers to analyze the performance of the system, as well as a number of adaptive performance optimization mechanisms.
Due to its many novel and valuable ideas, Multics has had a significant influence on computer science despite its faults.[7] Its most lasting effect on the computer industry was to inspire the creation of Unix, which carried forward many Multics features, but was able to run on less-expensive hardware. Unix was developed at Bell to allow their Multics team to continue their research using smaller machines, first a PDP-7 and ultimately the PDP-11.
Novel ideas
[edit]
Multics implements a single-level store for data access, discarding the clear distinction between files (called segments in Multics) and process memory. The memory of a process consists solely of segments that were mapped into its address space. To read or write to them, the process simply uses normal central processing unit (CPU) instructions, and the operating system takes care of making sure that all the modifications were saved to disk. In POSIX terminology, it is as if every file were mmap()ed; however, in Multics there is no concept of process memory, separate from the memory used to hold mapped-in files, as Unix has. All memory in the system is part of some segment, which appears in the file system; this includes the temporary scratch memory of the process, its kernel stack, etc.
Segments are limited to 256 kilowords, just over 1 MB, because Multics hardware had 18-bit word addresses for the content of a segment. Larger files are "multisegment files" and are handled differently. The 256 kiloword limit was rarely encountered in practice, because at the time, one megabyte of memory was prohibitively expensive.
Another major new idea of Multics was dynamic linking, in which a running process can make external routines available by adding the segments containing them to its address space. This allows applications to always use the latest version of any external routine, since those routines are kept in other segments, which are dynamically linked only when a process first attempts to begin execution in them. Since different processes can use different search rules, different users can end up using different versions of external routines. Equally importantly, with the appropriate settings in the Multics security facilities, the code in the other segment can gain access to data structures maintained in a different process. Dynamic linking in Multics does not require special dynamic-link libraries (DLLs); a program can dynamically link to any executable segment to which it has access rights.
Thus, to interact with an application running in part as a daemon (in another process), a user's process simply performs a normal procedure-call instruction to a code segment to which it had dynamically linked (a code segment that implemented some operation associated with the daemon). The code in that segment can then modify data maintained and used in the daemon. When the action necessary to commence the request is completed, a simple procedure return instruction returns control of the user's process to the user's code.
Multics also supports extremely aggressive on-line reconfiguration: central processing units, memory banks, disk drives, etc. can be added and removed while the system continues operating. At the MIT system, where most early software development was done, it was common practice to split the multiprocessor system into two separate systems during off-hours by incrementally removing enough components to form a second working system, leaving the rest still running for the original logged-in users. System software development testing could be done on the second system, then the components of the second system were added back to the main user system, without ever having shut it down. Multics is one of the earliest multiprocessor systems.
Multics is the first major operating system to be designed as a secure system from the outset.[8] Despite this, early versions of Multics were compromised repeatedly.[9] This led to further work that made the system more secure, and prefigured modern security engineering techniques. Break-ins became very rare once the second-generation hardware base was adopted; it has hardware support for ring-oriented security, a multilevel refinement of the concept of master mode.[citation needed] A US Air Force tiger team project tested Multics security in 1973 under the codeword ZARF. On 28 May 1997, the American National Security Agency declassified this use of the codeword ZARF.
Multics is the first operating system to provide a hierarchical file system,[10][11] and file names can be of almost arbitrary length and syntax. A given file or directory can have multiple names (typically a long and short form), and symbolic links between directories are also supported. Multics is the first to use the now-standard concept of per-process stacks[disputed – discuss] in the kernel, with a separate stack for each security ring. It is also the first to have a command processor implemented as ordinary user code – an idea later used in the Unix shell. It is also one of the first written in a high-level language (Multics PL/I),[1][12] after the Burroughs MCP system written in ESPOL, an expanded version of ALGOL.
The deployment of Multics into secure computing environments also spurred the development of innovative supporting applications. In 1975, Morrie Gasser of MITRE Corporation developed a pronounceable random word generator to address password requirements of installations such as the Air Force Data Services Center (AFDSC) processing classified information. To avoid guessable passwords, the AFDSC decided to assign passwords but concluded the manual assignment required too much administrative overhead. Thus, a random word generator was researched and then developed in PL/I. Instead of being based on phonemes or individual letters or clarities, the system employed phonemic segments (second order approximations of English) and other rules to enhance pronounceability and randomness, which was statistically modeled against other approaches.[13] A descendant of this generator was added to Multics during Project Guardian.[14]
Project history
[edit]In 1964, Multics was developed initially for the GE-645 mainframe, a 36-bit system. GE's computer business, including Multics, was taken over by Honeywell in 1970; around 1973, Multics was supported on the Honeywell 6180 machines, which included security improvements including hardware support for protection rings.
Bell Labs pulled out of the project in 1969; some of the people who had worked on it there went on to create the Unix system. Multics development continued at MIT and General Electric. At MIT in 1975, use of Multics was declining and did not recover by 1976 to prior levels.[15][16] Finally by slashing prices, MIT managed to lure users back to Multics in 1978.[17]
In 1974 Honeywell entered into a development contract with the Air Force (with MIT as a sub-contractor) to develop a security kernel for Multics. This would involve reducing the size of the Multics hardcore by moving specific components of the supervisor out of Ring 0. One of the initial steps after carrying out a security evaluation was the implementation of a multilevel security framework within Multics called AIM (Access Isolation Mechanism). This provided mandatory access control which could be enabled to supplement the already existing discretionary access control that Multics already possessed.[18] The resulting Project Guardian ran until termination in 1976; whilst most of its changes were not added to Multics, some parts of the project such as the proposed Secure Front End Processor was productized by Honeywell as SCOMP (Secure Communications Processor).[19] The SCOMP and its STOP operating system eventually evolved via XTS-200 and XTS-300 into current XTS-400 offering of secure operating systems.[20]
Honeywell continued system development until 1985. About 80 multimillion-dollar sites were installed, at universities, industry, and government sites. The French university system had several installations in the early 1980s. After Honeywell stopped supporting Multics, users migrated to other systems, such as Unix.
In 1985, Multics was issued certification as a B2 level secure operating system using the Trusted Computer System Evaluation Criteria from the National Computer Security Center (NCSC), a division of the NSA; it was the first operating system evaluated to this level.
Multics was distributed from 1975 to 2000 by Groupe Bull in Europe, and by Bull HN Information Systems Inc. in the United States. In 2006, Bull SAS released the source code of Multics versions MR10.2, MR11.0, MR12.0, MR12.1, MR12.2, MR12.3, MR12.4 & MR12.5 under a free software license.[21]
The last known Multics installation running natively on Honeywell hardware was shut down on October 30, 2000, at the Canadian Department of National Defence in Halifax, Nova Scotia, Canada.[22]
Current status
[edit]In 2006 Bull HN released the source code for MR12.5, the final 1992 Multics release, to MIT.[23] Most of the system is now available as free software with the exception of some optional pieces such as TCP/IP.[24]
In 2014, Multics was successfully run on current hardware using an emulator created by Multicians Harry Reed and Charles Anthony.[25] The 1.0 release of the emulator is available as of 2017[update].[26] Release 12.6f of Multics accompanies the 1.0 release of the emulator, and adds a few new features, including command line recall and editing using the video system.[27]
Commands
[edit]The following is a list of programs and commands[28] for common computing tasks that are supported by the Multics command-line interface.[29][30]
File and directory access commands
[edit]- change_wdir (cwd) - change the working directory
- create_dir (cd) - create a directory
- copy (cp) - copy files
- list (ls) - list files and directories
- print (pr) - print the contents of a text file
- print_wdir (pwd) - print the working directory
- move (mv) - move a file or directory to a different directory
- rename (rn) - rename a file without moving it
Text editors
[edit]- edm - a simple line editor
- emacs - Multics Emacs
- teco
Document formatters
[edit]- runoff (rf)
Compilers, assemblers, and interpreters
[edit]- mail (ml)
- read_mail (rdm)
- send_mail (sdm)
On-line documentation
[edit]Scripting
[edit]Data processing
[edit]- gcos (gc) - simulator to run GCOS programs
- sort, merge - sorting and merging of text and binary files
Login sessions
[edit]Active functions
[edit]The Multics shell language supports "active functions", which are similar to commands, but which return a string value. An active function is called by putting the active function name and the arguments to the active function in square brackets [ and ]. The string returned by the active function is substituted into the command in place of the call to the active function. For example, when the command echo [working_dir] is processed, the active function working_dir is run; it returns the full path of the working directory, which is substituted into the command, so that the echo command prints the working directory.
Some programs can act either as commands or as active functions; when run as a command, its result is printed, and when run as an active function, its result is returned as a string.[30]
Some common active functions are:
- ceil - returns the smallest integer greater than or equal to the argument
- floor - returns the largest integer less than or equal to the argument
- home_dir (hd) - returns the home directory
- ltrim
- rtrim
- trunc - returns the integer part of the argument
- working_dir (wd) - returns the working directory
Retrospective observations
[edit]Peter H. Salus, author of a book covering Unix's early years,[32] stated one position: "With Multics they tried to have a much more versatile and flexible operating system, and it failed miserably".[33] This position, however, is said to have been discredited in the computing community because many of Multics' technical innovations are used in modern commercial computing systems.[7][better source needed]
The permanently resident kernel of Multics, a system derided in its day as being too large and complex, was 135 KB of code.[citation needed] The first MIT GE-645 had 512 kilowords of memory (2 MiB), a truly enormous amount at the time, and the kernel used a moderate portion of Multics main memory.
The entire system, including the operating system and the complex PL/I compiler, user commands, and subroutine libraries, consists of about 1500 source modules. These average roughly 200 lines of source code each, and compile to a total of roughly 4.5 MiB of procedure code, which was fairly large by the standards of the day.
Multics compilers generally optimise more for code density than CPU performance, for example using small sub-routines called operators for short standard code sequences, which makes comparison of object code size with modern systems less useful. High code density is a good optimisation choice for Multics as a multi-user system with expensive main memory.
During its commercial product history, it was often commented internally that the Honeywell Information Systems (HIS) (later Honeywell-Bull) sales and marketing staff were more familiar with and comfortable making the business case for Honeywell's other computer line, the DPS 6 running GCOS. The DPS-6 and GCOS was a well-regarded and reliable platform for inventory, accounting, word processing, and vertical market applications, such as banking, where it had a sizeable customer base. In contrast, the full potential of Multics’ flexibility for even mundane tasks was not easy to comprehend in that era and its features were generally outside the skill set of contemporary business analysts.[citation needed] The scope of this disconnect was concretized by an anecdote conveyed by Paul Stachour, CNO/CSC:
When American Telephone and Telegraph was changing its name to just AT&T in 1983, a staffer from Honeywell’s legal department showed up and asked a Multician if he could arrange to have the name changed in all of their computerized documents. When asked when the process could be completed, the Multician replied, "It's done." The staffer repeated that he needed hundreds perhaps thousands of documents updated. The Multician explained that he had executed a global search and replace as the staffer was speaking, and the task was in fact completed.[citation needed]
Influence on other projects
[edit]Unix
[edit]The design and features of Multics influenced the Unix operating system, which was originally written by two Multics programmers, Ken Thompson and Dennis Ritchie.[34] Influence of Multics on Unix is evident in many areas, including the hierarchical file system, redirection, the shell, and the naming of some commands. But the internal design philosophy is quite different, focusing on keeping the system small and simple, and so correcting some perceived deficiencies of Multics because of its high resource demands on the limited computer hardware of the time.
The name Unix (originally Unics) is itself a pun on Multics. The U in Unix is rumored to stand for uniplexed as opposed to the multiplexed of Multics, further underscoring the designers' rejections of Multics' complexity in favor of a more straightforward and workable approach for smaller computers. (Garfinkel and Abelson[35] cite an alternative origin: Peter Neumann at Bell Labs, watching a demonstration of the prototype, suggested the pun name UNICS – pronounced "eunuchs" – as a "castrated Multics", although Dennis Ritchie is said to have denied this.[36])
Ken Thompson, in a transcribed 2007 interview with Peter Seibel[34] refers to Multics as "overdesigned and overbuilt and over everything. It was close to unusable. They [Massachusetts Institute of Technology] still claim it's a monstrous success, but it just clearly wasn't". On the influence of Multics on Unix, Thompson stated that "the things that I liked enough (about Multics) to actually take were the hierarchical file system and the shell — a separate process that you can replace with some other process".
Dennis Ritchie wrote that the design of UNIX was influenced by CTSS.[37]
Other operating systems
[edit]The Prime Computer operating system, PRIMOS, was referred to as "Multics in a shoebox" by William Poduska, a founder of the company. Poduska later moved on to found Apollo Computer, whose AEGIS and later Domain/OS operating systems, sometimes called "Multics in a matchbox", extends the Multics design to a networked graphics workstation environment.
The Stratus VOS operating system of Stratus Computer (now Stratus Technologies) is very strongly influenced by Multics, and both its external user interface and internal structure bear many close resemblances to the older project. The high-reliability, availability, and security features of Multics are extended in Stratus VOS to support a new line of fault tolerant computer systems supporting secure, reliable transaction processing. Stratus VOS is the most directly related descendant of Multics still in active development and production usage today.
General Motors' Multiple Console Time Sharing System (MCTS) for the Control Data Corporation STAR-100 computer was based on Multics.
The protection architecture of Multics, restricting the ability of code at one level of the system to access resources at another, was adopted as the basis for the security features of ICL's VME operating system.
The Edinburgh Multiple Access System (EMAS) draws particularly on the one-level store concept used by Multics, providing access to files only by mapping them into memory. All memory space is associated with a segment.
See also
[edit]- Time-sharing system evolution
- Peter J. Denning
- Jack B. Dennis
- Robert Fano – director of Project MAC at MIT (1963–1968)
- Robert M. Graham (computer scientist)
- J. C. R. Licklider – director of Project MAC at MIT (1968–1971)
- Peter G. Neumann
- Elliott Organick
- Louis Pouzin – introduced the term shell for the command language used in Multics
- Jerome H. Saltzer
- Roger R. Schell
- Glenda Schroeder – implemented the first command line user interface shell and proposed the first email system with Pouzin and Crisman
- Victor A. Vyssotsky
References
[edit]- ^ a b R. A. Freiburghouse, "The Multics PL/1 Compiler", General Electric Company, Cambridge, Massachusetts, 1969.
- ^ "Multics License (Multics) - Open Source Initiative". opensource.org. February 5, 2008. Retrieved April 11, 2018.
- ^ "Myths about Multics". www.multicians.org. Retrieved April 11, 2018.
- ^ Dennis M. Ritchie, "The Evolution of the Unix Time-sharing System", Communications of the ACM, Vol. 17, 1984, pp. 365-375.
- ^ Dan Murphy (1996) [1989]. "Origins and Development of TOPS-20".
- ^ Gregory, Nathan (May 2018). The Tym Before. Lulu.com. p. 66. ISBN 9781387824755. Retrieved March 29, 2020.
- ^ a b "Myths about Multics". www.multicians.org. Retrieved April 11, 2018.
- ^ Saltzer, Jerome H. (February 1974). "Protection and the Control of Information Sharing in Multics" (PDF). Introduction to Multics", MAC TR-123 (Report). Cambridge, MA: Massachusetts Institute of Technology and Honeywell Information Systems Inc. pp. 2–41. Retrieved March 16, 2022.
- ^ Tom Van Vleck (2002). "How the Air Force cracked Multics Security".
- ^ "Multics Glossary -F-". www.multicians.org. Retrieved April 11, 2018.
- ^ R. C. Daley and P. G. Neumann, "A general-purpose file system for secondary storage", AFIPS '65 (Fall, part I) Proceedings of the November 30 – December 1, 1965
- ^ Brian Kernighan on the origins of Unix LWN.net. 2022.
- ^ "A Random Word Generator for Pronounceable Passwords" (PDF). Bedford, MA: Electronic Systems Division, Air Force Systems Command, USAF. November 1975. ESD-TR-75-97. Archived (PDF) from the original on April 8, 2022. Retrieved March 8, 2021.
- ^ Van Vleck, Tom. "Password Generator". Retrieved March 8, 2021.
- ^ "Report of the President" (PDF). Massachusetts Institute of Technology Bulletin. 111 (4): 355. December 1975. Archived from the original (PDF) on April 13, 2022. Retrieved April 12, 2022.
Use of the Multics service, operated on the Honeywell 6180 system, declined...a decrease of 15 percent.
- ^ "Report of the President" (PDF). Massachusetts Institute of Technology Bulletin. 112 (4): 392. November 1976. Archived from the original (PDF) on April 13, 2022. Retrieved April 12, 2022.
... the demise of several Multics projects which failed to obtain funding.
- ^ "Report of the President and the Chancellor" (PDF). Massachusetts Institute of Technology. 1978. p. 450. Archived from the original (PDF) on April 13, 2022. Retrieved April 12, 2022.
This new pricing proved so attractive to many people, however, that Multics users and usage increased considerably.
- ^ "Multics Data Security". multicians.org.
- ^ Fraim, Lester J. (July 1983). "Scomp: A Solution to the Multilevel Security Problem". Computer. 16 (7): 26–34. Bibcode:1983Compr..16g..26F. doi:10.1109/MC.1983.1654440.
- ^ "STOP OS™ Version 7.3.1 Security Target" (PDF). Common Criteria.
- ^ "Multics". stuff.mit.edu. Retrieved July 25, 2022.
- ^ "Multics History Dates". Retrieved September 13, 2015.
Shutdown of DND-H (17:08Z 10/30/00)
- ^ Van Vleck, Tom. "Open Source for Multics". Multicians.org. Retrieved April 11, 2016.
- ^ Anthony, Charles. "(email) Re: [dps8m-developers] Multiprocessor and/or networked Multics". Sourceforge.net. Retrieved April 11, 2016.
- ^ "RingZero - Multics reborn". WikidotCom. Retrieved April 11, 2015.
- ^ "Multics Simulator". Retrieved July 9, 2017.
- ^ "Installing Multics". Retrieved May 19, 2020.
- ^ Honeywell Bull, Inc. (February 1985). Multics Commands and Active Functions (AG92-06) (PDF). Retrieved March 30, 2023.
- ^ "Unix and Multics".
- ^ a b "Multics Commands".
- ^ Multics C User's Guide (PDF). Honeywell Bull. November 1987. Retrieved March 26, 2024.
- ^ Salus, Peter H. (1994). A quarter century of UNIX (Reprinted with corrections Jan. 1995. ed.). Reading, Mass.: Addison-Wesley Pub. Co. ISBN 978-0-201-54777-1.
- ^ Ward, Mark (August 20, 2009). "40 years of Unix". BBC News. Retrieved April 27, 2010. Quoting Peter Salus.
- ^ a b Peter Seibel. Coders at Work: Reflections on the Craft of Programming. APress Publications, 2007. ISBN 978-1-4302-1948-4
- ^ Garfinkel, Simson and Abelson, Harold. Architects of the Information Society: Thirty-Five Years of the Laboratory for Computer Science at MIT. MIT Press, 1999. ISBN 978-0262071963
- ^ Karn, Phil (October 28, 1981). "Origins of unix". Newsgroup: fa.unix-wizards. Usenet: 4743@Aucbvax.UUCP. Retrieved April 11, 2014.
- ^ Ritchie, Dennis M. (1977). The Unix Time-sharing System: A retrospective (PDF). Tenth Hawaii International Conference on the System Sciences.
a good case can be made that UNIX is in essence a modern implementation of MIT's CTSS system
Further reading
[edit]The literature contains a large number of papers about Multics, and various components of it; a fairly complete list is available at the Multics Bibliography page and on a second, briefer 1994 Multics bibliography (text format). The most important and/or informative ones are listed below.
- F. J. Corbató, V. A. Vyssotsky, Introduction and Overview of the Multics System (AFIPS 1965) is a good introduction to the system.
- F. J. Corbató, C. T. Clingen, J. H. Saltzer, Multics – The First Seven Years (AFIPS, 1972) is an excellent review, written after a considerable period of use and improvement over the initial efforts.
- J. J. Donovan, S. Madnick, Operating Systems, is a fundamental read on operating systems.
- J. J. Donovan, Systems Programming, is a good introduction into systems programming and operating systems.
Technical details
[edit]- Jerome H. Saltzer, Introduction to Multics (MIT Project MAC, 1974) is a considerably longer introduction to the system, geared towards actual users.
- Elliott I. Organick, The Multics System: An Examination of Its Structure (MIT Press, 1972) is the standard work on the system, although it documents an early version, and some features described therein never appeared in the actual system.
- V. A. Vyssotsky, F. J. Corbató, R. M. Graham, Structure of the Multics Supervisor (AFIPS 1965) describes the basic internal structure of the Multics kernel.
- Jerome H. Saltzer, Traffic Control in a Multiplexed Computer System (MIT Project MAC, June 1966) is the original description of the idea of switching kernel stacks; one of the classic papers of computer science.
- R. C. Daley, P. G. Neumann, A General Purpose File System for Secondary Storage (AFIPS, 1965) describes the file system, including the access control and backup mechanisms.
- R. J. Feiertag, E. I. Organick, The Multics Input/Output System. Describes the lower levels of the I/O implementation.
- A. Bensoussan, C. T. Clingen, R. C. Daley, The Multics Virtual Memory: Concepts and Design, (ACM SOSP, 1969) describes the Multics memory system in some detail.
- Paul Green, Multics Virtual Memory – Tutorial and Reflections is a good in-depth look at the Multics storage system.
- Roger R. Schell, Dynamic Reconfiguration in a Modular Computer System (MIT Project MAC, 1971) describes the reconfiguration mechanisms.
Security
[edit]- Paul A. Karger, Roger R. Schell, Multics Security Evaluation: Vulnerability Analysis (Air Force Electronic Systems Division, 1974) describes the classic attacks on Multics security by a "tiger team".
- Jerome H. Saltzer, Michael D. Schroeder, The Protection of Information in Computer Systems (Proceedings of the IEEE, September 1975) describes the fundamentals behind the first round of security upgrades; another classic paper.
- M. D. Schroeder, D. D. Clark, J. H. Saltzer, D. H. Wells. Final Report of the Multics Kernel Design Project (MIT LCS, 1978) describes the security upgrades added to produce an even more improved version.
- Paul A. Karger, Roger R. Schell, Thirty Years Later: Lessons from the Multics Security Evaluation (IBM, 2002) is an interesting retrospective which compares actual deployed security in today's hostile environment with what was demonstrated to be possible decades ago. It concludes that Multics offered considerably stronger security than most systems commercially available in 2002.
External links
[edit]- multicians.org is a comprehensive site with a lot of material
- Multics papers online
- Multics glossary
- Myths discusses numerous myths about Multics in some detail, including the myths that it failed, that it was big and slow, as well as a few understandable misapprehensions
- Multics security
- Unix and Multics
- Multics general info and FAQ Includes extensive overview of other software systems influenced by Multics
- Open source emulator for the GE Large Systems / Honeywell / Bull 600/6000‑series mainframe computers
- Honeywell, Inc., MULTICS records, 1965–1982. Charles Babbage Institute, University of Minnesota. Multics development records include the second MULTICS System Programmers Manual; MULTICS Technical Bulletins that describe procedures, applications, and problems, especially concerning security; and returned "Request for Comments Forms" that include technical papers and thesis proposals.
- Current Multics development home page
- Official historical source code archive at MIT
- Link page to various Multics information at the Library of Congress Web Archives (archived 2001-11-30)
- Multics repository at Stratus Computer at the Wayback Machine (archived 2002-02-19)
- Multics at Universitaet Mainz
- Various scanned Multics manuals
- Multicians.org and the History of Operating Systems at the Wayback Machine (archived 2021-01-14), a critical review of Multicians.org, plus a capsule history of Multics.
Multics
View on GrokipediaDevelopment History
Origins and Collaborators
The Multics project originated in 1964 at MIT's Project MAC, where planning began for a next-generation time-sharing operating system to advance beyond the limitations of the Compatible Time-Sharing System (CTSS), which had demonstrated basic multi-user access but struggled with scalability and reliability.[6] Motivated by the vision of a "computer utility" capable of serving a broad community, the initiative sought to create a dependable system for interactive computing that could support resource sharing among multiple users while maintaining individual privacy and efficiency.[1] This effort was spurred by ARPA funding through Project MAC, which provided an initial annual budget of approximately $3-4 million to foster innovative computing research involving academic and industry collaboration.[7] Key collaborators included MIT's Project MAC, led by Professor Fernando J. Corbató, who oversaw the software design and coordination; Bell Telephone Laboratories, contributing expertise in systems programming with notable involvement from Ken Thompson and Dennis Ritchie; and General Electric Company's Large Computer Products Division, which supplied the modified GE-645 hardware platform tailored for the project's needs.[1][8] These partners brought complementary strengths: MIT's academic focus on time-sharing concepts, Bell Labs' practical telecommunications experience, and GE's engineering capabilities in mainframe development.[9] The specific goals of Multics emphasized supporting a few hundred simultaneous users through advanced time-sharing, enabling each to interact as if they had sole access to the machine while ensuring secure, controlled sharing of files and resources via hardware-enforced protections.[9] This ambitious scale aimed to transform computing from batch processing to a utility-like service, accommodating diverse applications from research to routine data processing without compromising system integrity or user isolation.[6]Key Milestones and Timeline
The Multics project emerged from a 1964 collaboration among MIT's Project MAC, Bell Telephone Laboratories, and General Electric to develop an advanced time-sharing operating system.[1] Development intensified in 1965, with the delivery of a GE-635 computer to MIT in August for use as a simulator during software design; this enabled initial bootstrapping efforts, including the creation of basic system components tested on the simulator.[10] By late 1965, project leaders presented Multics concepts at the Fall Joint Computer Conference, outlining its ambitious goals for resource sharing and security.[1] In January 1967, the first GE-645 mainframe hardware arrived at MIT and Bell Labs, marking the start of hardware-software integration; early milestones included the June "Phase .5" achievement of a functional file system with paging and segmentation, followed by December's "Phase One" for bootloading and single-process execution, with demonstrations of these capabilities to stakeholders.[1] The following year saw further progress, including the March "A3" milestone for multiprocessing and the October "Demonstrable Initial Multics" supporting eight simultaneous users.[10] Multics became operational for public use at MIT in October 1969, initially supporting a limited number of users through time-sharing services; however, Bell Labs withdrew from the project in April 1969, citing escalating development costs and delays.[1] In October 1970, General Electric's computer division was acquired by Honeywell, leading to a migration of Multics to Honeywell hardware such as the Series 60/40 and later the 6180 processor; this facilitated broader installations, including the U.S. Air Force's Rome Air Development Center (RADC) site going operational in August 1970.[10] Throughout the 1970s, Multics expanded to additional sites, including the U.S. Air Force Data Services Center (AFDSC) in 1973, various universities, and government facilities; a key event was the 1973-1974 security evaluation conducted by the Air Force and MITRE Corporation to assess Multics for handling multilevel classified data (Secret and Top Secret) at AFDSC, which identified vulnerabilities in protection mechanisms but affirmed its potential with modifications.[11] Honeywell officially announced Multics as a commercial product alongside the 6180 in January 1973, boosting adoption.[10] By the 1980s, Multics reached its peak with approximately 64 installations worldwide, including ongoing U.S. Air Force sites, the Canadian Department of National Defence (starting 1982), and universities such as the University of Calgary; however, Honeywell canceled further development in July 1985 amid declining demand, though the system earned a B2 security rating from the U.S. Department of Defense in August 1985 based on enhanced protections.[12][13] The original MIT installation shut down in January 1988, with many sites following suit by the early 1990s, though emulations of Multics on modern hardware have sustained its study and limited use into the 21st century.[10]Decline and Current Status
The decline of Multics as a commercial operating system was influenced by several key factors, including its high development and operational costs, which made it less competitive against emerging alternatives.[1] The system's tight integration with specialized Honeywell hardware, following General Electric's sale of its computer division to Honeywell in 1970, limited portability and increased dependency on a single vendor.[1] Additionally, the withdrawal of Bell Labs from the project in 1969, due to prolonged delays and escalating expenses, deprived Multics of significant expertise and resources, accelerating its challenges.[14] Competition from more affordable and flexible systems like Unix, which ran on cheaper minicomputers and emphasized simplicity, further eroded Multics' market position.[15] Honeywell discontinued Multics development in 1985, marking the end of active production support, though existing installations continued operating.[16] Over its lifetime, Multics was deployed at approximately 80 sites worldwide, primarily in government, industry, and academic environments.[1] The MIT installation shut down in January 1988, and the final remaining system at the Canadian Department of National Defence in Halifax, Nova Scotia, was decommissioned on October 30, 2000.[5][17] As of 2025, Multics sees no commercial deployments but persists through open-source emulations that allow hobbyists to run the system on modern hardware. The DPS8M simulator, an open-source emulator for the Honeywell DPS 8/M architecture, enables Multics execution on platforms like Windows, macOS, and Linux, with recent updates including Multics Release 12.8 for improved usability.[18][19] Contributions from Multics historians like Paul Green have supported preservation efforts, including program collections and documentation that aid emulation.[20] An active community of enthusiasts maintains these resources via sites like multicians.org, fostering ongoing interest in Multics' design principles.[18] Its legacy is preserved in institutional archives, such as those at MIT, where hardware artifacts and documentation are held for historical study.[5] Preservation advanced significantly with the release of Multics source code in 2007 by Bull HN Information Systems Inc. to MIT, making the final commercial release (MR12.5 from 1992) available as free software under an open license. This donation, coordinated through efforts like the Multics History Project, has enabled modern analysis, bug fixes, and emulator enhancements without proprietary restrictions.[21]Architectural Innovations
Core Design Principles
Multics was designed as a pioneering time-sharing operating system, building upon the foundational concepts of the Compatible Time-Sharing System (CTSS) developed at MIT to enable efficient multi-user access to computing resources.[22] Its core principles emphasized modularity, controlled sharing, and scalability, aiming to create a reliable, continuously operating environment that could support hundreds of simultaneous users without performance degradation. This vision positioned Multics as a prototype for a "computer utility," where computing power would be as accessible and dependable as public utilities like electricity or water.[9] Central to Multics' architecture was its time-sharing model, which supported over 300 concurrent users through segmented virtual memory and dynamic relocation mechanisms. In this approach, the virtual address space of each process was divided into variable-sized segments, each with independent attributes for size, protection, and location, allowing direct hardware addressing of information without the need for data copying or manual buffering. Dynamic relocation was achieved via segment descriptor words (SDWs) in the hardware, which stored absolute core addresses and enabled segments to be loaded anywhere in physical memory on demand, facilitating efficient sharing and paging with a page size of 1,024 36-bit words on the Honeywell 645 processor. This design ensured low-latency access for multiple users, with controlled sharing enforced through per-segment access attributes checked by the hardware.[23][24] The system's hierarchical structure further embodied its modular design principles, utilizing a ring-based protection scheme with eight concentric rings numbered 0 through 7 to delineate privilege levels from kernel to user. Ring 0 served as the most protected kernel space, housing critical supervisor functions, while outer rings (up to ring 7 for typical user processes) operated with progressively restricted privileges, ensuring isolation through separate address spaces managed by private descriptor segments per process. This ring hierarchy, combined with gates for controlled transitions between rings, promoted modularity by allowing subsystems to be developed and executed independently while preventing unauthorized access, all verified on every memory reference.[25][26] Multics embodied a utility computing vision through abstractions that treated shared resources as virtually infinite, particularly via a uniform file-like representation for all persistent data in the form of segments accessible through a hierarchical directory structure. This "everything is a file" abstraction enabled seamless integration of storage as an boundless resource, where users could reference and manipulate data directly without concern for physical limitations, supported by demand paging and dynamic growth of segments. A key innovation in this model was absentee terminal operation, allowing computations to execute independently of active user sessions; users could submit a command file for queue-based processing, with the system handling initiation, suspension during overloads, and output delivery asynchronously, thus optimizing resource utilization across interactive and batch workloads.[9][27]Security and Protection Mechanisms
Multics pioneered advanced security mechanisms in its time-sharing environment, emphasizing hierarchical protection and discretionary access controls to safeguard resources among multiple users. These features were integral to its design, enabling secure sharing while mitigating risks of unauthorized access and privilege escalation.[25] The system's protection relied on an 8-level ring hierarchy, numbered from 0 to 7, where ring 0 housed the most privileged kernel code and outer rings, such as ring 4, contained typical user programs.[28] Ring transitions were strictly controlled through hardware-enforced gates and segment descriptor brackets, which validated calls between rings to prevent unauthorized elevation of privileges; for instance, a gate might allow execution from ring 5 into ring 0 only under specific conditions.[29] This structure enforced isolation, ensuring that code in higher-numbered (less privileged) rings could access lower-ring resources only via defined entry points, reducing the attack surface compared to flat supervisor-user models.[25] Access to files, known as segments, was managed through per-segment Access Control Lists (ACLs), which specified permissions for individual users, projects, or groups identified by principal IDs like "User.Project".[30] Each ACL entry granted fine-grained rights, including read (r), write (w), and execute (e) for segments, or status (s), modify (m—including deletion), and append (a) for directories, allowing owners to tailor sharing precisely.[29] Stored in the parent directory, these lists supported wildcard patterns for group access (e.g., "Jones.*") and hierarchical overrides, where directory modify rights could alter contained ACLs.[31] User authentication occurred via password-based login, requiring a user ID and project identifier, with passwords stored in encrypted form using a one-way enciphering algorithm to verify entries without exposing plaintext.[30] This method, implemented in 1971, provided basic protection against password disclosure, though it lacked modern salting techniques.[32] Complementing this, Multics maintained audit trails for login attempts, including failed logins, last access times, and segment modifications, enabling early detection of potential intrusions through manual or procedural review of security-related events.[31][33] The robustness of these mechanisms was affirmed in the 1973 Anderson Report, a U.S. Air Force study on computer security technology, which praised Multics' descriptor-based architecture for efficient reference validation and its potential as a foundation for multilevel secure systems in military contexts, resistant to malicious unauthorized access.[34]File System and Resource Management
The Multics file system employed a multi-level store architecture that integrated a hierarchy of storage devices, including fast drums for rapid access, disks for bulk storage, and tapes for archival purposes, to provide what was effectively unlimited storage capacity. Files were conceptualized as unbounded streams of data elements—such as words, characters, or bits—without predefined sizes, allowing them to grow dynamically as content was appended. This design enabled seamless migration of active files to faster storage levels and inactive ones to slower tiers, managed automatically by the system's storage management module to optimize performance and resource utilization.[35][36] The directory structure in Multics formed a hierarchical tree, with directories serving as special files that contained entries for segments, subdirectories, or links, accessible via path names like >user>project>file. Each segment and directory was protected by access control lists (ACLs), which specified permissions such as read (r), write (w), execute (x), or append (a) for individual users, groups, or the world, stored within the parent directory to enforce granular control. Symbolic links provided shortcuts to files or directories elsewhere in the hierarchy, while version control was handled by appending numeric suffixes to filenames (e.g., report.1, report.2) to maintain multiple iterations without overwriting originals.[35][37][29] Resource management in Multics relied on a segmented virtual memory model, where address space was divided into segments of up to 256,000 36-bit words each, loaded on demand via paging mechanisms that fetched only referenced pages into core memory. Unused segments were subject to garbage collection processes that scanned for and reclaimed space from inactive or unreferenced storage, ensuring efficient allocation across the multi-level store. This approach supported dynamic sharing and relocation of segments without fixed boundaries, enhancing multiprogramming efficiency.[23][38] The I/O model treated all input/output devices uniformly as files, represented as segments within the hierarchical structure, which allowed programs to access peripherals like terminals, printers, or disks through the same stream-oriented interfaces used for regular files. This device-independent abstraction simplified application development by enabling consistent read/write operations and chaining of data transformations across devices.[39][40]Software Features and Tools
Command Interface and Utilities
The Multics Command Language (MCL) served as an interactive shell for users to communicate with the operating system, enabling concise expression of commands through a structured syntax. Commands consisted of a name followed by arguments, separated by spaces and terminated by semicolons or newlines, allowing for chained execution within a single line. This language supported active functions enclosed in brackets, such as[date] to insert the current date, which were evaluated and rescanned into the command stream for dynamic behavior. The shell, or command processor, interpreted these inputs, handling features like iteration sets in parentheses for applying commands to multiple arguments and literal strings delimited by quotes.[41][42]
File utilities in Multics provided essential operations for managing segments and directories within the hierarchical file system. The print command (aliases: pr, dprint) displayed the contents of a file or queued it for output, as in print file_name to show the text of a segment. Navigation was handled by change_directory (aliases: cd, cwd), which set the current working directory, for example, cd >user_dir to switch to a user's home directory. Creation of new files or directories used create (aliases: cr), such as cr new_file to establish an empty segment. Deletion was performed with delete (alias: dl), like dl old_file to remove an entry. The copy command (aliases: cp, copy_seg) duplicated segments, e.g., copy source.epl target.epl. Directory listings were generated by listf (aliases: ls, list), which enumerated contents with options for details, as in listf >dir_path to view files in a specified directory. These utilities operated on pathnames supporting absolute and relative addressing, with pattern matching via star notation like *.* for all files.[42]
Session management commands facilitated user interaction and process control in Multics' multi-user environment. The login command (alias: l) initiated a process for a user, typically entered as login Person_id Project_id to authenticate and establish a session tied to a terminal. Conversely, logout terminated the session, releasing resources with options like -hold to preserve the process briefly, e.g., logout -brief for a summary before exit. Process interruption was achieved through stop_ variants, such as stop_run to discard the current run environment or halt ongoing operations. Real-time queries were supported by active functions like who, which listed currently logged-in users, invoked as [who] within commands to return a string of active sessions for integration into scripts or displays. These mechanisms ensured secure and efficient handling of concurrent user activities.[41][42]
Scripting in Multics relied on command files, stored as segments with a .ec extension (often referred to as .cmd in user contexts), which contained sequences of MCL commands for automation. Execution occurred via the exec_com command (alias: ec), such as exec_com script.ec to run a file's instructions sequentially, supporting parameter substitution with &1 for the first argument and control structures like &if for conditional logic. This allowed basic automation without the full depth of modern shell scripting, focusing on iterative and chained operations like applying print across multiple files in an iteration set: print (file1 file2).epl. Macros and absentee runs extended this capability, enabling reusable procedures for routine tasks.[42]
Programming and Development Environments
Multics provided a rich set of programming languages and tools tailored for its segmented, multi-user environment, with PL/I serving as the primary implementation language due to its comprehensive support for system-level programming. The full PL/I compiler, developed concurrently with the operating system from 1965 onward, enabled the bulk of Multics to be written in PL/I, producing efficient object code directly compatible with the system's dynamic linking mechanisms.[43] Other supported languages included BCPL for low-level utilities, ALGOL 68 for algorithmic tasks, and SNOBOL4 for pattern-matching and string processing applications.[43] Additionally, assemblers such as ALM (Assembler Language for Multics) allowed direct hardware-level coding, facilitating custom extensions and performance optimizations.[44] Editing tools in Multics emphasized programmability and integration with the system's hierarchical file structure. QED, a line-oriented text editor implemented in BCPL, offered basic editing capabilities with support for multiple buffers and executable command scripts, making it suitable for straightforward source code modification.[43] For more advanced needs, a TECO-based editor served as a precursor to modern EMACS, providing macro-driven customization and real-time interaction; this evolved into Multics EMACS, which incorporated Lisp extensions for enhanced automation and debugging directly within the editing session.[45] Integrated debugging features, such as dynamic tracing and breakpoint insertion tied to the PL/I runtime, allowed developers to inspect segmented code without recompilation.[43] Build processes in Multics relied on a binder tool for linking object segments into executable forms, enabling modular assembly without traditional static loaders; this dynamic approach supported on-demand resolution of inter-segment references during execution.[43] Version control was managed through file naming conventions within the hierarchical file system, where developers appended unique identifiers (e.g., timestamps or sequence numbers) to segment names to track revisions, avoiding overwrites in shared directories.[43] Scripting and exploratory programming were facilitated by interpreters, notably Multics Lisp (based on MACLISP), which provided an interactive environment for rapid prototyping and could interface with PL/I routines for hybrid applications.[43] This interpreter supported compilation to native code, enhancing performance for compute-intensive tasks while maintaining the system's multi-language interoperability.[46]Communication and Documentation Systems
Multics provided a suite of integrated tools for user communication and documentation, enabling collaborative interactions and efficient access to system information within its multi-user environment. These systems leveraged the operating system's shared memory and segment-based storage to facilitate real-time messaging and structured document handling, predating many modern equivalents.[42] The email subsystem in Multics was built on a RUNCOM-based framework, allowing scripted automation of message handling similar to early shell scripting. Users could send messages via thesend_message command (or its synonym mail), which appended content to the recipient's mailbox segment, typically located at >udd>[Project](/page/Project)>[Person](/page/Person)>[Person](/page/Person).mbx, supporting both single-line inputs and multi-line entries terminated by a period.[47][42] The read_mail command enabled users to retrieve and manage incoming mail, displaying summaries with sender, date, and time details, while offering options to list, delete, save, forward, or reply to messages.[47][42] This system supported early forms of threaded discussions through tools like Pat Doherty's continuum (later renamed forum in the 1970s), which organized conversations into hierarchical structures for ongoing group interactions.[47] Instant messaging was also possible via send_message to active terminals, with the accept_messages command setting up event channels for real-time delivery.[47]
Documentation access relied on an interactive online help mechanism using info segments—structured text files stored in directories like >doc>info—which functioned as an early hypertext-like system for navigating system knowledge. The help command allowed users to query topics or commands interactively, retrieving and displaying relevant info segments paragraph by paragraph, with prompts for continuation (e.g., responding "yes" to proceed or "q" to quit).[48][42] Enhancements like the list_help utility, introduced in 1975, added string-based searching across segments for more targeted retrieval.[48] Complementing this, the browse command provided sequential or interactive viewing of text segments or files, enabling users to navigate contents line by line with filtering options, akin to paging through documents.[42]
For document processing, Multics featured the RUNOFF formatter, invoked via the runoff command, which transformed plain text inputs into formatted output suitable for printing or storage as segments.[42] This tool processed markup-like control lines (e.g., .fin for finishing input or .ind for indentation) to handle justification, margins, headers, and page breaks, bearing similarities to later systems like troff.[42] It included capabilities for generating tables through structured formatting commands, supporting the creation of organized data presentations within documents.[42]
Additional facilities included the news command for disseminating system announcements, which displayed recent updates from info segments like system_changes.gi.info or message-of-the-day notices, with options to view full text.[42] Remote access was supported via dial-up connections, using commands such as dial or connect to establish terminal sessions over telephone lines, requiring user attributes like "dialok" for security.[42] These tools collectively emphasized Multics' focus on accessible, shared information flow among users.[47][48]