Software is a generic term for programs that are used by computers and other products that contain logic circuitry (i.e., embedded systems). In a broader sense it can also refer to all information (i.e., both programs and data) in electronic form, and it can provide a distinction from hardware, which refers to media and systems on which software can exist and be used.
A program is a sequence of instructions for a microprocessor. Also commonly referred to as a processor, a microprocessor is a semiconductor device that performs logic operations in computers and a vast array of other products. The main microprocessor in a computer is called the central processing unit (CPU).
Programs are created by a humans by first typing source code in any of dozens of programming language with the use of a text editor and often an integrated development environment (IDE). This human-readable version is then converted by a specialized program called a compiler into object code, and then into executable (i.e., runnable) files, which can be understood directly by computers' CPUs. The term software can refer to programs at any stage, from source code to final, executable files.
Software can be conveniently divided into two main categories: system software and application programs. The former, which includes operating systems, programming languages, compilers, device drivers, servers, windowing systems and various utilities, helps run computer hardware and serves as a base for the application programs. The most commonly used language by far for writing system software is C.
Application programs allows a user to accomplish one or more specific tasks. Typical application categories include office suites, business software, educational software, database systems, art programs and computer games. Most popular application programs today use graphical user interfaces (GUIs). Among the most frequently used languages for writing application software are C, C++ and Java.
Software requires hardware, which is the physical substrate on which software exists and runs, and hardware is useless without software. In addition to CPUs and other processors, hardware devices include memory chips and modules, storage devices and media, various circuit boards, busses (i.e., sets of wires that are used to connect the CPU, memory and other devices) and input and output devices (e.g., displays, keyboards and mice).
In order to be used, software must be loaded into memory, which is usually composed of RAM (random access memory) chips in the case of computers, from the storage medium where it is kept. Storage refers to devices or media that can retain data for relatively long periods of time, for example, years or even decades. This contrasts with memory, whose contents can be accessed (i.e., read and written to) at extremely high speeds but which are retained only temporarily (i.e., while in use or only as long as the power supply remains on). Examples of storage devices include hard disk drives (HDDs), floppy disks, optical disks (e.g., CDs and DVDs) and magnetic tape.
The term software has been used since at least 1850. At that time it referred to a type of garbage that would decompose, and hardware referred to garbage that would not decompose. The current usage dates back to at least 1958, when John W. Tukey, a highly influential statistician who held posts at both Princeton University and Bell Labs, used the term in an article in the January 1958 issue of American Mathematical Monthly. Titled The Teaching of Concrete Mathematics, the following passage occurs near the beginning:
Today the "software" comprising the carefully planned interpretive routines, compilers, and other aspects of automative programming are at least as important to the modern electronic calculator as its "hardware" of tubes, transistors, wires, tapes and the like.
Software has become one of the world's largest industries. It consists not only of the development of the familiar packaged software but also of the development of customized software as well as installation and maintenance (particularly removing bugs, upgrading security and modifying for new hardware) of both types of software.
Software has, of course, come to be important only for itself, but also because it increasingly facilitates and enhances an expanding range of other activities. For example, it allows businesses to greatly reduce their costs and improve their productivity, and it makes possible many types of research and development that would be very difficult or impossible without it (e.g., molecular biology and space exploration).
The software industry has continued to advance at a rapid pace. Among the most important long-term trends has been the development of new and improved tools (e.g., programming languages, compilers and IDEs) that increase the ease of creating new programs. This has resulted in a reduced cost for any given level of functionality and performance, and it has also made possible the development of increasingly more complex software with greater levels of functionality and performance.
Another important trend has been the emergence of free software, also referred to as open source software, as an increasingly viable alternative to proprietary (i.e., commercial) software. Free software consists of programs that are free not only with regard to price but also with regard to use and for which the source code is freely available. One of the most outstanding successes of free software to date is the Apache web server, which hosts more than 70 percent of web sites on the Internet. Likewise, the Internet and the Web are based on open standards, which are standards that are fully published (rather than being kept secret, as is often the case for proprietary software), and to which free software conforms by definition.
Many industry experts expect that this trend is just at its beginning, and that free software will become dominant for both systems software and application programs within a few years. This is a result of the facts that such software (1) is continuing to improve rapidly in terms of performance and ease of use, (2) can save users tens of billions of dollars annually in acquisition and licensing costs, (3) can be customized by knowledgeable users without restriction and (4) is becoming better known, along with its advantages, among people who still are not using it.
Created November 26, 2005. Updated November 18, 2006.