Software is the collective term for computer programs, which are instructions in code telling a computer what to do in response to specific user inputs. Software is part of a functioning computer system, which also consists of hardware, the actual computer machinery and equipment.
Although computers were commercially introduced in the early 1950s, the term software did not appear until the early 1960s. Originally, commercial software was either developed and sold exclusively by computer hardware manufacturers and their valueadded resellers as part of a computer system, or it was custom-written by computer programmers for individual clients. It was only in the 1970s, once the mainframe and minicomputer market had sufficiently grown and microcomputers had appeared, that independent software companies emerged.
Two types of software—systems software and applications software—are needed to perform most common functions on a computer.
Operating systems software is the basic set of instructions for how a computer operates; most types perform similar functions. Operating systems may be either proprietary—that is designed and sold only with a specific computer hardware brand—or they may be sold independently of a computer brand, as long as the operating systems and the computers meet certain industry standards. During the course of the 1980s operating systems became increasingly independent of hardware.
Widely used proprietary system software include MVS and OS/390 for IBM mainframe computers, Unix for Sun Microsystems Inc.'s workstations, and VMS for Digital Equipment Corp.'s VAX minicomputers. MacOS is the proprietary operating system of Apple Macintosh computers, although for a brief stint in the mid-1990s it was licensed to outside developers who made Mac clones. In the 1990s Microsoft Corp.'s Windows became the dominant operating system for microcomputers, specifically IBM-compatible PCs, covering as much as 90 percent of the market. Other common nonproprietary operating systems for desktop computers include MS-DOS, OS/2, and the various versions—sometimes termed "flavors"—of Unix, including the increasingly popular Linux open standard. Generally, applications software must be designed to run on a given operating system, although some operating systems, such as OS/2, can execute software designed for other operating systems.
The operating system is often closely associated with the user interface; however, the two are technically separate. In many cases, particularly with PCs, the operating system includes an interface that serves as a template for application interfaces running on that system, but individual applications each have their own interfaces and may diverge substantially from the standard look and feel, often to the chagrin of users. Windows in its early versions was essentially an elaborate graphical user interface (GUI) running on top of MS-DOS, the core operating system at that time, yet DOS's own interface was decidedly ungraphical. Similarly, interface and operating system are divorced from one another on many systems. Windows NT and the Windows 9x versions, on the other hand, were operating systems in their own right which also had GUIs.
A special category of systems software is network operating systems. This software, in conjunction with network adapter hardware, allows multiple computers to be connected together and share data and the use of peripheral equipment. These software systems are designed to cope with the special problems involved in linking multiple users, including file sharing, device sharing, traffic management, and security. The most common network operating systems for local area networks (LANs) are Novell, Inc.'s NetWare and Microsoft Windows NT. The rise of corporate Web sites and e-commerce activities has spawned a special breed of network operating systems, known as server operating systems or sometimes simply servers, for hosting and managing Web site activities.
Systems software also includes a large class of often narrowly focused programs that are used to help manage computer resources. Many of these fall under the collective heading of utilities, which include such programs as virus checkers, system backup programs, and disk management and error recovery tools. These are particularly prevalent on desktop computers, but they exist for nearly all kinds of systems. Most utilities serve as a means to make the computer run smoothly for other applications, rather than as an end in themselves. A related class of software is file management tools, often considered a special set of utilities, which are specialized programs to facilitate more powerful file manipulations than the operating system's generic interface provides. Such file management activities might include browsing and modifying the computer's file and directory structure, renaming large groups of files in batches, or performing advanced searches for files that meet certain criteria.
The other major branch of systems software includes various programming tools that are used mainly by specialists on midrange or mainframe computers. While some of the newer software development suites for PC users like Microsoft's Visual C+ + may be closer to applications software than systems software, other programming tools serve a more basic purpose for the system and may be considered systems software. On higher-end systems, on which programmers may write or customize any number of small programs or routines, the system is typically equipped with a compiler and possibly a debugger or an assembler. A compiler transforms source code written in a human-readable language, such as C or Ada or FORTRAN, into a machine readable language that can be executed as a program. Thus, after the programmer writes or modifies a program to be run on the system, it must be compiled in order to work. Debuggers are tools to help programmers identify and fix logical or syntax errors in their source code. In some cases an assembler may be used to create machine language from an intermediate form of a program known as assembly language. Assembly language, which is specific to a computer's type of processor, allows for a more nuanced handling of the program code than conventional programming languages provide.
Whereas systems software provides behind-the-scenes coordination and support, applications are front-end resources people use to get things done. Applications software may be custom-designed by or for an individual corporate user, developed and sold as part of a computer hardware system with its own proprietary operating system, or developed and marketed independently for use on one or more of the standard operating systems, also referred to as off-the-shelf software. The trend has been toward off-the-shelf software packages.
Software applications used in business may be of a generic type, sometimes called horizontal software, or be tailored to the very specific needs of an industry segment, which is referred to as vertical software. Common horizontal software categories include:
One of the biggest trends in general application software has been the integration of common taskoriented programs such as the above into so-called productivity suites. Widely held brands include Microsoft Office, Lotus SmartSuite, and Corel Word-Perfect Office. While early iterations of these suites were little more than a set of discrete programs marketed as a bundle, refinements and innovations have begun to prove the power of integration. Some of the more useful innovations include multiple item clipboards for copying and pasting within suite programs (e.g., a user could copy a paragraph from a word processor and a table from a spreadsheet and paste them both into an e-mail message in one step), central configuration consoles for customizing all the programs in a suite from one menu, and integrating small Web browser windows into the desktop alongside non-Web resource windows.
Certain software applications, while not industry-specific, are designed mostly for business applications because of their capabilities to handle large volumes of data. One example is database management software, especially transaction processing software. This includes payroll and billing processing software and software used in retail and wholesale trade. Such software is typically developed for larger, more powerful computers, such as mainframes and minicomputers. Other examples of high end software products include management information systems, human resource management systems (HRMSs), enterprise resource planning (ERP) systems, and executive information systems.
Software for a specific industry, or vertical software, is at its core a combination of generic software types, such as database management plus communications software, often with the addition of certain data and features. Examples of vertical software include transaction processing software used by banks, computer reservations software used by travel agents to book airline flights and hotel rooms, appointment scheduling software used in medical offices, software that monitors customer orders in mail-order houses, and software that keeps track of parts and labor for appliance repair contractors. Vertical software is more often proprietary than horizontal software, but it, too, is becoming increasingly available in off-the-shelf packages as its respective markets expand.
Other kinds of industry-specific software are those that facilitate engineering, manufacturing, and other production needs. Computer-aided design (CAD) software, for instance, is widely used in engineering and industrial design fields. Automated industrial machinery, such as in manufacturing or materials handling, uses software to control the machinery and processes. Desktop publishing software, used for publications design and typesetting, is regularly used not only by publishing and printing companies but also by many organizations and individuals wishing to create attractive documents.
The ability to integrate different software applications is a growing trend in business software. Different activities of a company have historically used independent software programs, such as one for accounts receivable, another for inventory management, another for manufacturing process control, and yet another for product design. Newer software tends to offer expanded features or the ability to "interface" with, or be connected to, other software programs. Similarly, various "add-in" software has been developed to add features to specific existing software packages. For example, in the retail/wholesale industries, the same software is now being used to record retail sales, keep track of inventories, and place orders with suppliers. In engineering, a CAD program can be linked to a database of information on component prices and labor costs to provide instant cost estimates for a specific design, which aids in budget planning. In some kinds of manufacturing, process control software not only automatically adjusts the flow of additives into product for desired quality, but also keeps track of the amount and rate of additive use; this data can be analyzed on a connected spreadsheet program to keep track of costs.
[ Heather Behn Hedden ]
Slater, Derek. "Software Essentials." CIO, 15 February 1999. Available from www.cio.com .
Tanenbaum, Andrew S., and Albert S. Woodhull. Operating Systems: Design and Implementation. 2nd ed. Upper Saddle River, NJ: Prentice Hall, 1997.
Wailgum, Tom. "Your OS at Work." CIO, 15 August 1998.
"Work Smart." (Buyer's Guide.) Fortune, summer 1998.