MVS (Multiple Virtual Storage) is IBM's flagship operating
system for its mainframe computers. Its roots stretch back to OS/360,
which began life in the mid-1960s as the operating system IBM wanted
its customers to use on the then-new System/360 computer systems.
Descendants of this code remain at the heart of today's IBM mainframe
operating systems. Though the code has been almost entirely
rewritten, the basic design is largely untouched; backward
compatibility has been religiously maintained, to the point that
applications written for OS/360 run unmodified on the MVS of 64-bit
z/Series mainframe computers three architectural generations
later.
Of all the operating systems surveyed here, MVS is the only one
that could be considered older than Unix (the ambiguity stems from the
degree to which it has evolved over time). It is also the least
influenced by Unix concepts and technology, and represents the
strongest design contrast with Unix. The unifying idea of MVS is that
all work is batch; the system is designed to make the most efficient
possible use of the machine for batch processing of huge amounts of
data, with minimal concessions to interaction with human users.
Native MVS terminals (the 3270 series) operate only in block
mode. The user is presented with a screen that he fills in,
modifying local storage in the terminal. No interrupt is presented to
the mainframe until the user presses the send key. Character-level
interaction, in the manner of Unix's raw mode, is impossible.
TSO, the closest equivalent to the Unix interactive environment,
is limited in native capabilities. Each TSO user is represented to
the rest of the system as a simulated batch job. The facility is
expensive — so much so that its use is typically limited to
programmers and support staff. Ordinary users who need to merely run
applications from a terminal almost never use TSO. Instead, they work
through transaction monitors, a kind of multiuser application server
that does cooperative multitasking and supports asynchronous I/O. In
effect, each kind of transaction monitor is a specialized timesharing
plugin (almost, but not entirely unlike a webserver running CGI).
Another consequence of the batch-oriented architecture is that
process spawning is a slow operation. The I/O system deliberately
trades high setup cost (and associated latency) for better
throughput. These choices are a good match for batch operation, but
deadly to interactive response. A predictable result is that TSO users
nowadays spend almost all their time inside a dialog-driven interactive
environment, ISPF. It is rare for a programmer to do anything inside
native TSO except start up an instance of ISPF. This does away with
process-spawn overhead, at the cost of introducing a very large
program that does everything but start the machine room
coffeepot.
MVS uses the machine MMU; processes have separate address
spaces. Interprocess communication is supported only through shared
memory. There are facilities for threading (which MVS calls
“subtasking”), but they are lightly used, mainly because
the facility is only easily accessible from programs written in
assembler. Instead, the typical batch application is a short series of
heavyweight program invocations glued together by JCL (Job Control
Language) which provides scripting, though in a notoriously difficult
and inflexible way. Programs in a job communicate through temporary
files; filters and the like are nearly impossible to do in a usable
manner.
Every file has a record format, sometimes implied (inline input
files in JCL are implied to have an 80-byte fixed-length record format
inherited from punched cards, for example), but more often explicitly
specified. Many system configuration files are in text format, but
application files are usually in binary formats specific to the
application. Some general tools for examining files have evolved out
of sheer necessity, but it is still not an easy problem to solve.
File system security was an afterthought in the original
design. However, when security was found to be necessary, IBM added it
in an inspired fashion: They defined a generic security API, then made
all file access requests pass by that interface before being
processed. As a result, there are at least three competing security
packages with differing design philosophies — and all of them
are quite good, with no known cracks against them between 1980 and
mid-2003. This variety allows an installation to select the package
that best suits local security policy.
Networking facilities are another afterthought. There is no
concept of one interface for both network connections and local files;
their programming interfaces are separate and quite different. This
did allow TCP/IP to supplant IBM's native SNA (Systems Network
Architecture) as the network protocol of choice fairly seamlessly. It
is still common in 2003 to see both in use at a given
installation, but SNA is dying out.
Casual programming for MVS is almost nonexistent except within
the community of large enterprises that run MVS. This is not due so
much to the cost of the tools themselves as it is to the cost of the
environment — when one must spend several million dollars on the
computer system, a few hundred dollars a month for a compiler is
almost incidental. Within that community, however, there is a
thriving culture of freely available software, mainly programming and
system-administration tools. The first computer user's group, SHARE,
was founded in 1955 by IBM users, and is still going strong
today.
Considering the vast architectural differences, it is a
remarkable fact that MVS was the first non-System-V operating system
to meet the Single Unix Specification (there is less to this than
meets the eye, however, as ports of Unix software from elsewhere have
a strong tendency to founder on ASCII-vs.-EBCDIC character-set
issues). It's possible to start a Unix shell from TSO; Unix
file systems are specially formatted MVS data sets. The MVS Unix
character set is a special EBCDIC codepage with newline and linefeed
swapped (so that what appears as linefeed to Unix appears like newline
to MVS), but the system calls are real system calls implemented in the
MVS kernel.
The intended role of MVS has always been in the back
office. Like VMS and Unix itself, MVS predates the server/client
distinction. Interface complexity for back-office users is not only
tolerated but expected, in the name of making the computer spend
fewer expensive resources on interfaces and more on the work it's
there to get done.