In almost 15 years on Multics, I worked on many parts of the system, including system boot, login, administration and accounting, operations, BOS, system console management, documentation tools, tape, backup, transaction processing, error handling, development process, and the file system. I wrote many commands and subroutines and added features to many more, from mail and help to print and use.
I joined MIT Project MAC in 1965 to work on CTSS and moved on to Multics boot and system administration. In 1969, I went to MIT IPC to manage
CP/67, CTSS, and Multics programming. I joined Honeywell Cambridge Information System Laboratory (CISL) in 1974, transferred to Honeywell Phoenix to manage Multics developers in 1978, moved back to CISL in 1980, and finally left Multics in 1981.
I am especially proud of my contribution to the Multics New Storage System (NSS), which replaced the system's disk organization to improve system scalability, capacity, and reliability. I coordinated the work of up to 25 colleagues, wrote major design documents, programmed some key pieces, and served as librarian and build coordinator. About 75% of the hardcore supervisor was modified by this project.
I also represented Multics on the Honeywell LISD Palyn report evaluation committee, and presented Multics in talks and conference papers.
When I left CISL in 1981, I was the second highest submitter of Multics Change Requests (MCRs). Steve Herbst was first; he specialized in bug fixes, and most of mine were feature introductions.
I was lucky to work with and learn from some of the smartest and kindest people in the business, on a system that had ambitious goals and time to accomplish many of them. When I think back about Multics, I remember the wonderful people first, then the good times we had, and then the neat things we built.
We used to speak of building things "the Multics way." To me this meant trying to solve the general problem as well as the immediate one; open discussion of every technical point; continuous evolution of our product and our process; and attention to consistency, elegance, and evolution. Doing it right rather than doing just enough. When the Multics hardware is obsolete and the code lost, I'll still prefer to develop software the Multics way.
Dick Gabriel wrote a lovely essay titled "Worse is Better,"
in which he contrasts the "MIT Approach" versus the "New Jersey Approach."
These are intentional caricatures, but roughly contrast putting perfect design first, versus putting simple implementation first.
Many mistaken articles about Multics have identified its approach as equivalent to Gabriel's "MIT approach."
In fact, I think this is not true, and that the approach we took when building Multics is somewhere between Gabriel's poles.
There's a moving-target problem here: the approach practiced at CISL
in the 70s and 80s was not necessarily the same as used by Project MAC, GE, and Bell Labs in the 60s.
Nevertheless, our focus on getting a system up as quickly as possible,
with adequate performance, led us to postpone or eliminate unnecessary features ruthlessly.
We often applied the "80-20" rule, trying to get 80% of the function accomplished with 20% of the code,
leaving evolution towards 100% for later.
We did spend time discussing what 100% of a feature was, and sometimes implemented first-draft versions
that we learned from when implementing later versions.
All the good parts of Multics were good because they improved on earlier versions.
Corby and Charlie's paper on management of Multics captures some of this.
Programs I Wrote
All Multics software was a team effort, and my colleagues had substantial influence on things I did and vice versa. Here are some programs I began, or took over and made my own for a period of time. Others subsequently rewrote and greatly improved some of them, learning from my mistakes.
- help
- check_info_segs
- calendar
- trace_stack
- canonicalize (used Noel's printer DIM code)
- indent (port of Stan's IND from CTSS)
- print rewrite
- overlay
- if
- arithmetic and string active functions
- system, user, who, hmu
- date_compiled
- list_accessible, list_not_accessible
- decode and encode (crypto from Roger Schell)
- answer, on, sub_err_
- resolve_linkage_error
- linker feature that signals an error on argument mismatch
- NSS logical volume manager; hdx/mdx/wdx, attach_lv, detach_lv
- NSS salvager
- file system
structure marking
- many answering service features
- dial, slave, send_admin_command, etc
- system accounting and billing programs and absentee jobs
- message coordinator
- BOS/Multics communication and unattended mode
- BOS patch command
- operator limited subsystem (admin_)
- user registration limited subsystem
- tape authentication
- transaction processing executive
- adopted Bob Frankston's send_message etc as standard commands
- printer head and tail page software and printer notifications
- preservation of hardcore symbol section and use in debugging
- automatic generation of info segs from manual source
- hardcore error message documentation extracted from source
Documents I Wrote
One way for me to remember what I did is to look at the list of documents I wrote while on the project.
Multics System Programmer's Manual sections
(* indicates co-author)
- 05/66 M0066 Resource Management and Accounting
- 11/66 BD.10.03 Calendar Clock Wakeup Management*
- 11/67 BE.5.14 PRLNK - Print out links in text and link*
- 09/67 BL.1.03 Multics System Tape Generator
- 02/68 BL.4.01 Bootstrap 1*
- 02/68 BL.4.02 Bootstrap 2
- 10/66 BO.0 Overview of Accounting
- 10/66 BO.1.00 Overview of Resource Expenditure Metering
- 10/66 BO.1.01 Processor Usage Metering
- 12/66 BO.1.02 Core Residence Metering
- 02/67 BO.1.05 Dedicated Resource Usage Metering
- 10/66 BO.1.06 Secondary Storage Usage Metering
- 05/68 BV.1.00 BOS - Bootload Operating System*
- 05/68 BV.1.02 BOS Dump Command*
- 05/68 BV.1.03 BOS Snapshot Generator*
- 05/68 BV.1.04 BOS Snapshot Restore*
- 07/68 BV.1.05 BOS Patch Command
- 06/68 BV.4 MST Checker*
Multics Design Memos (Partial List)
- 11/68 MCB-206 Moving to IPC CTSS
- 12/69 MCB-376 Help Command
- 02/72 MSB-15 Load Control Groups
- 03/72 MSB-30 Improved Multics Resource Control
- 04/72 MSB-41 User Control Changes
- 06/72 MSB-69 User Tapes
- 01/73 Initializer and Daemon Terminal Management*
- 01/73 MOSN-279 Changes for Message Coordinator*
- 10/72 MCB-1029 System Administration Status
- 03/73 MCB-1076 Proposed Improvements to Multics Backup*
- 05/73 MSB-100 Copyright Notices on Source*
- MTB-013 The dial facility (1973-11-01)
- MTB-151 Improvements to the Answering Service (1975-01-10)
- MTB-152 Unattended Operation of Multics (1975-01-13)
- MTB-153 Indexing Multics Manuals (1975-01-13)
- MTB-173 Proposed Changes to the Syserr Mechanism (1975-03-12)
- MTB-201 New Version of the Help Command (1975-06-01)
- MTB-210 Adding a "Property List" to the Branch (1975-07-07)
- MTB-215 Handling Subroutine Errors (1975-07-24)
- MTB-296 Directory Owners (1976-07-27)
- MTB-313 Unattended Operation of Multics - Part II (1976-12-03)
- MTB-317 Protected Files (1977-01-18)
- MTB-318 New Access Control Rules (1977-01-18)
- MTB-333 Multics Transaction Processing (1977-03-22)
- MTB-335 System Error Message Documentation (1977-04-11)
- MTB-347 HLSUA Meeting Report (1977-11-11)
- MTB-420 Adding a "Property List" to the Branch (1979-06-29)
- MTB-515 New Database Architecture: Security (1981-02-11)
- MTB-516 New Database Architecture: Distributed Databases (1981-02-11)
- MTB-522 Hexadecimal Floating Point (1981-04-10)
Multics Storage System Memos
See the references in "The New Storage System."
Manuals
- Multics System Administrator's Manual
- Multics Project Administrator's Manual
- Multics Operator's Handbook
Honeywell Large Systems Users Association (HLSUA) Presentations
- 04/70 Multics (GESHUA XI)
- 10/74 Multics Storage System Enhancements
- 10/76 Multics Reliability Enhancements
- 02/77 Reliability
- 04/77 SCP responses
- 10/77 MR6.0 Storage System
- 04/78 SCP Responses
- 10/78 SCP Responses
- 04/79 Improvements to compose
11/11/94, updated 08/18/96, 11/29/02