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; most of his MCRs were 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*
- 11/73 MTB-013 The Dial Facility
- 01/75 MTB-151
Improvements to the Answering Service - 01/75 MTB-152
Unattended operation of Multics - 01/75 MTB-153 Indexing Multics Manuals
- 03/75 MTB-173 Proposed Changes to SYSERR*
- 06/75 MTB-201 New Version of the Help command
- 01/76 MTB-210 Property List
- 01/76 MTB-215
Handling Subroutine Errors - 07/76 MTB-296 Directory Owners
- 12/76 MTB-313 Unattended Operations of Multics II
- 01/77 MTB-317 Protected Files
- 01/77 MTB-318 New Access Control Rules
- 03/77 MTB-333 Multics Transaction Processing
- 05/77 MTB-335 System Error Message Documentation
- 11/77 MTB-347 HLSUA Meeting Report
- 06/79 MTB-420 Adding a Property List to the Branch
- 02/81 MTB-516 New Database Architecture: Distributed Databases
- 02/81 MTB-515 New Database Architecture: Security
- 04/81 MTB-522 Hexadecimal Floating Point
Multics Storage System Memos
- 11/73 MTB-017 The Storage Problem*
- 03/74 MTB-055 The New Storage System--Overview*
- 06/74 MTB-095 Adding Support for Secure Removable Disk
- 08/74 MTB-110
Implementation of New Storage System* - 10/74 MTR-068 New Storage System Implementation Plans
- 02/75 MTB-167 New Storage System Disk Usage*
- 03/75 MTR-081 New Storage System Long Range Plans
- 06/75 MTB-206 SAVE and RESTOR for New Storage System
- 07/75 MTR-095 New Storage System Long Range Plans
- 10/75 MTB-229
Use of Demountable Logical Volumes* - 11/75 MTB-238 Contents of Initial NSS at MIT
- 12/75 MOSN-A001
Operational Changes for MR4.0 - 12/75 MOSN-A002 Dumper and Reloader Changes for MR4.0
- 12/75 Installation Instructions for MR4.0
- 11/75 MTB-239 Storage System Error Recovery
- 12/75 MTR-112 New Storage System Long Range Plans
- 12/75 MTB-243
Changes to User Ring Programs for NSS - 02/76 MTB-260 Interim version of mount and demount*
- 03/76 MTR-120 Design Discussion of MTB-260
- 03/76 MTR-119 New Storage System Long Range Plans
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