Computer software or just
software, is a collection of
computer programs and related
data that provides the instructions for telling a
computer what to do and how to do it. Software refers to one or more computer programs and data held in the storage of the computer for some purposes. In other words, software is a set of
programs, procedures, algorithms and its
documentation concerned with the operation of a data processing system. Program software performs the
function of the
program it implements, either by directly providing
instructions to the computer hardware or by serving as input to another piece of software. The
term was coined to contrast to the old term
hardware(meaning physical devices). In contrast to hardware, software "cannot be touched".
[1] Software is also sometimes used in a more narrow sense, meaning
application software only. Sometimes the term includes data that has not traditionally been associated with computers, such as film, tapes, and records.
[2]
Computer software is so called to distinguish it from
computer hardware, which encompasses the physical interconnections and devices required to store and execute (or run) the software. At the lowest level, executable code consists of machine language instructions specific to an individual processor. A machine language consists of groups of binary values signifying processor instructions that change the state of the computer from its preceding state. Programs are an ordered sequence of instructions for changing the state of the computer in a particular sequence. It is usually written in
high-level programming languages that are easier and more efficient for humans to use (closer to
natural language) than machine language. High-level languages are compiled or interpreted into machine language object code. Software may also be written in an
assembly language, essentially, a mnemonic representation of a machine language using a natural language alphabet. Assembly language must be assembled into object code via an
assembler.
[edit]History
Until that time, software was
bundled with the hardware by
Original equipment manufacturers (OEMs) such as
Data General,
Digital Equipment and IBM
[citation needed]. When a customer bought a
minicomputer, at that time the smallest computer on the market, the computer did not come with
Pre-installed software, but needed to be installed by engineers employed by the OEM. Computer hardware companies not only bundled their software, they also placed demands on the location of the hardware in a refrigerated space called a
computer room. Most companies had their software on the books for 0 dollars, unable to claim it as an asset (this is similar to financing of popular music in those days). When Data General introduced the
Data General Nova, a company called Digidyne wanted to use its
RDOSoperating system on its own
hardware clone. Data General refused to
license their software (which was hard to do, since it was on the books as a free asset), and claimed their "bundling rights". The
Supreme Court set a precedent called Digidyne v. Data General in 1985. The Supreme Court let a 9th circuit decision stand, and Data General was eventually forced into licensing the Operating System software because it was ruled that restricting the license to only DG hardware was an illegal
tying arrangement.
[5] Soon after, IBM 'published' its
DOSsource for free,
[citation needed] and
Microsoft was born. Unable to sustain the loss from lawyer's fees, Data General ended up being taken over by
EMC Corporation. The Supreme Court decision made it possible to value software, and also purchase
Software patents. The move by IBM was almost a protest at the time. Few in the industry believed that anyone would profit from it other than IBM (through free publicity). Microsoft and
Apple were able to thus cash in on 'soft' products. It is hard to imagine today that people once felt that software was worthless without a machine. There are many successful companies today that sell only software products, though there are still many common software licensing problems due to the complexity of designs and poor documentation, leading to
patent trolls.
With open software specifications and the possibility of software licensing, new opportunities arose for software tools that then became the
de facto standard, such as DOS for operating systems, but also various proprietary word processing and
spreadsheet programs. In a similar growth pattern, proprietary development methods became standard
Software development methodology.
[edit]Types of software
Software includes all the various forms and roles that digitally stored
data may have and play in a computer (or similar system), regardless of whether the data is used as
code for a CPU, or other
interpreter, or whether it represents other kinds of
information. Software thus encompasses a wide array of products that may be developed using different techniques such as ordinary
programming languages,
scripting languages,
microcode, or an
FPGA configuration.
The types of software include
web pages developed in languages and frameworks like
HTML,
PHP,
Perl,
JSP,
ASP.NET,
XML, and
desktop applications like
OpenOffice.org,
Microsoft Worddeveloped in languages like
C,
C++,
Objective-C,
Java,
C#, or
Smalltalk.
Application softwareusually runs on an underlying software
operating systems such as
Linux or
Microsoft Windows. Software (or
firmware) is also used in
video games and for the configurable parts of the
logicsystems of
automobiles,
televisions, and other
consumer electronics.
[edit]System software
System software is responsible for managing a variety of independent hardware components, so that they can work together harmoniously. Its purpose is to unburden the
application software programmer from the often complex details of the particular computer being used, including such accessories as
communications devices, printers, device readers, displays and keyboards, and also to partition the computer's resources such as memory and processor time in a safe and stable manner.
[edit]Programming software
Programming software include tools in the form of programs or applications that software developers use to create, debug, maintain, or otherwise support other programs and applications. The term usually refers to relatively simple programs such as
compilers,
debuggers,
interpreters,
linkers, and
text editors, that can be combined together to accomplish a task, much as one might use multiple hand tools to fix a physical object. Programming tools are intended to assist a programmer in writing
computer programs, and they may be combined in an
integrated development environment (IDE) to more easily manage all of these functions.
[edit]Application software
Application software is developed to perform in any task that benefits from computation. It is a set of programs that allows the computer to perform a specific data processing job for the user. It is a broad category, and encompasses
software of many kinds, including the
internet browser being used to display this page. This category includes:
[edit]Software topics
[edit]Architecture
Users often see things differently than programmers. People who use modern general purpose computers (as opposed to
embedded systems,
analog computers and
supercomputers) usually see three layers of software performing a variety of tasks: platform, application, and user software.
- Platform software: Platform includes the firmware, device drivers, an operating system, and typically a graphical user interface which, in total, allow a user to interact with the computer and its peripherals (associated equipment). Platform software often comes bundled with the computer. On a PC you will usually have the ability to change the platform software.
- Application software: Application software or Applications are what most people think of when they think of software. Typical examples include office suites and video games. Application software is often purchased separately from computer hardware. Sometimes applications are bundled with the computer, but that does not change the fact that they run as independent applications. Applications are usually independent programs from the operating system, though they are often tailored for specific platforms. Most users think of compilers, databases, and other "system software" as applications.
- User-written software: End-user development tailors systems to meet users' specific needs. User software include spreadsheet templates and word processor templates. Even email filters are a kind of user software. Users create this software themselves and often overlook how important it is. Depending on how competently the user-written software has been integrated into default application packages, many users may not be aware of the distinction between the original packages, and what has been added by co-workers.
[edit]Documentation
Most software has
software documentation so that the
end user can understand the program, what it does, and how to use it. Without clear documentation, software can be hard to use—especially if it is very specialized and relatively complex like
Photoshop or
AutoCAD.
Developer documentation may also exist, either with the code as comments and/or as separate files, detailing how the programs works and can be modified.
[edit]Library
An executable is almost always not sufficiently complete for direct execution.
Software libraries include collections of
functions and functionality that may be embedded in other applications. Operating systems include many standard Software libraries, and applications are often distributed with their own libraries.
[edit]Standard
[edit]Execution
Computer software has to be "loaded" into the
computer's storage (such as the
hard drive or
memory). Once the software has loaded, the computer is able to
execute the software. This involves passing
instructions from the application software, through the system software, to the hardware which ultimately receives the instruction as
machine code. Each instruction causes the computer to carry out an operation – moving
data, carrying out a
computation, or altering the
control flow of instructions.
Data movement is typically from one place in memory to another. Sometimes it involves moving data between memory and registers which enable high-speed data access in the CPU. Moving data, especially large amounts of it, can be costly. So, this is sometimes avoided by using "pointers" to data instead. Computations include simple operations such as incrementing the value of a variable data element. More complex computations may involve many operations and data elements together.
[edit]Quality and reliability
Software quality is very important, especially for commercial and system software like
Microsoft Office,
Microsoft Windows and
Linux. If software is faulty (buggy), it can delete a person's work, crash the computer and do other unexpected things. Faults and errors are called "
bugs." Many bugs are discovered and eliminated (debugged) through
software testing. However, software testing rarely – if ever – eliminates every bug; some programmers say that "every program has at least one more bug" (Lubarsky's Law). All major software companies, such as Microsoft, Novell and
Sun Microsystems, have their own software testing departments with the specific goal of just testing. Software can be tested through
unit testing,
regression testing and other methods, which are done manually, or most commonly, automatically, since the amount of code to be tested can be quite large. For instance,
NASA has extremely rigorous software testing procedures for many operating systems and communication functions. Many NASA based operations interact and identify each other through command programs called software. This enables many people who work at NASA to check and evaluate functional systems overall. Programs containing command software enable hardware engineering and system operations to function much easier together.
[edit]License
The software's license gives the user the right to use the software in the licensed environment. Some software comes with the license when purchased off the shelf, or an OEM license when bundled with hardware. Other software comes with a
free software license, granting the recipient the rights to modify and redistribute the software. Software can also be in the form of
freeware or
shareware.
[edit]Patents
Software can be patented in some but not all countries; however,
software patents can be controversial in the software industry with many people holding different views about it. The controversy over software patents is about specific
algorithms or techniques that the software contains, which may not be duplicated by others and considered
intellectual property and
copyright infringement depending on the severity