PWB/UNIX (usually called just 'PWB; the acronym is from its formal name, the 'Programmer's Workbench')) was a variant of early UNIX (initially V6 Unix) inside Bell Labs, with minor changes to the kernel make it more suitable for use in a production environment (e.g. better response to resource shortages). Of more consequence were those found in the applications: both major new ones such as 'make' and the Source Code Control System, and also changes to the shell (both functionality improvement for use in shell programming, and also increased efficiency - the PWB machines had large user communities, and were heavily loaded; extensive use was made of shell programs).
The effort started in mid-1973 after a suggestion by M. L. Ivie, with its first PDP-11/45 later that year. The intent was to provide a good environment for large programming projects, which were producing software for other, larger computers. Those machines were usually batch processing systems, so extensive remote job entry sub-systems were developed to interact with them (including handling the output). The PWB machines themselves provided tools for the programmers of each project to manage their source code, and collaborate with other individuals in the project.
By October, 1977 it ran on a group of seven PDP-11/45's and PDP-11/70's in a computing center of the Business Information Systems Program (BISP) group at Bell. It rapidly spread inside Bell, so by that point there were about 10 other PWB sites (some with more than one system) at Bell Labs, and a half-dozen more inside Bell System; others outside (including MIT) also ran it.
The first major version of PWB, 'PWB 1.0', was, as indicated above, a V6 variant. The operating system itself had only minor modifications:
- a new system call, ustat() (one of 4 functions which shared the new pwbsys() system call), which allowed the amount of free space in a given file system to be discovered (to prevent un-noticed file truncation when a file system was full)
- another new system call, udata (also in pwbsys(), along with calls to retrieve the system's name, and modify file times), which was used to hold the user's name and home directory in the process' 'user segment'
Other kernel changes
The kernel includes a number of other changes compared to V6, but it is not clear if they were done by the PWB project, or if they were done by Research personnel for their own use, as part of their program of continuous system improvement, after V6 was released, but before PWB copied the system. (V6 was released in May 1975, but PWB 1.0, the code examined for this list, was released on July 1, 1977.) The first two changes in the list would have been visible to users; the rest were purely internal.
- the access(), tell(), and setpgrp() system calls
- the exec() system call was changed to temporarily hold its arguments in swap space, rather than doing so in disk buffers; this allowed use of much larger argument lists to exec() (V6 had limited the number of processes allowed to be in an exec() call simultaneously, to prevent deadlocks)
- improved locking on use of 'pure texts' (shared copies of read-only executable binaries)
- changes to the logic for swapping processes in and out
PWB supports all the standard V6 system calls. Most V6 applications will run without object code modification on PWB 1.0.
The next major version of PWB, 'PWB 2.0', was a Unix Seventh Edition variant. This version is apparently no longer extant, and nothing is known of it.
- T. A. Dolotta, R.C. Haight, J. R. Mashey, The Programmer's Workbench, Bell System Technical Journal, Vol. 57, No. 6, July-August 1978
- PWB1 - Complete source and binary
- PWB/UNIX 1.0 on the 11/23+
|v • d • e UNIX Versions, Vendors and Related|
| Research Unix PDP-7 UNIX • UNIX First Edition • UNIX Second Edition • UNIX Third Edition|
UNIX Fourth Edition • UNIX Fifth Edition • UNIX Sixth Edition • Unix Seventh Edition
Unix Eighth Edition • Unix Ninth Edition • Unix Tenth Edition
LSX • MINI-UNIX • Unix/32V
AT&T - CB-UNIX • PWB/UNIX • USG UNIX • System III • System IV • System V
BSD - 2.9 BSD • 2.10 BSD • 2.11 BSD • 3BSD • 4BSD • 4.1 BSD • 4.2 BSD • 4.3 BSD • 4.4 BSD
BSD Descendants 386BSD • NetBSD • OpenBSD • FreeBSD • NeXTSTEP • Darwin
Other - AMIX • SunOS • Solaris • ULTRIX • A/UX • Xenix • AIX • Dell UNIX