Software, consisting of programs, enables a computer to perform specific tasks, 
as opposed to its physical components (hardware) which can only do the tasks they 
are mechanically designed for. The term includes application software such as word 
processors which perform productive tasks for users, system software such as operating 
systems, which interface with hardware to run the necessary services for user-interfaces 
and applications, and middleware which controls and co-ordinates distributed systems.
Contents [hide]
1 Terminology 
2 Relationship to computer hardware 
3 Types 
4 Program and library 
5 Three layers 
6 Creation 
7 Operation 
8 Quality and reliability 
9 License 
10 Patents 
11 Ethics and rights for software users 
12 See also 
12.1 Computer programming 
12.2 Software licenses 
13 Footnotes 
[edit] Terminology
The term "software" is sometimes used in a broader context to describe any electronic 
media content which embodies expressions of ideas such as film, tapes, records, 
etc.[1]
A screenshot of computer software - AbiWord.The term "software" as an instruction-procedural 
programming source for scheduling instruction streams according to the von Neumann 
machine paradigm should not be confused with Configware and Flowware, which are 
programming sources for configuring the resources (structural "programming" by Configware) 
and for scheduling the data streams (data-procedural programming by Flowware) of 
the Anti machine paradigm of Reconfigurable Computing systems. This is an important 
issue, since Computer Science is meanwhile a dual-paradigm world, due to the existence 
of FPGAs and Reconfigurable Computing.
[edit] Relationship to computer hardware
Main article: Computer hardware
Computer software is so called in contrast to computer hardware, which encompasses 
the physical interconnections and devices required to store and execute (or run) 
the software. In computers, software is loaded into RAM and executed in the central 
processing unit. At the lowest level, software consists of a machine language specific 
to an individual processor. A machine language consists of groups of binary values 
signifying processor instructions (object code), which change the state of the computer 
from its preceding state. Software is an ordered sequence of instructions for changing 
the state of the computer hardware 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.
The term "software" was first used in this sense by John W. Tukey in 1958.[2] In 
computer science and software engineering, computer software is all computer programs. 
The concept of reading different sequences of instructions into the memory of a 
device to control computations was invented by Charles Babbage as part of his difference 
engine. The theory that is the basis for most modern software was first proposed 
by Alan Turing in his 1935 essay Computable numbers with an application to the Entscheidungsproblem.[3]
[edit] Types
Practical computer systems divide software systems into three major classes: system 
software, programming software and application software, although the distinction 
is arbitrary, and often blurred.
System software helps run the computer hardware and computer system. It includes 
operating systems, device drivers, diagnostic tools, servers, windowing systems, 
utilities and more. The purpose of systems software is to insulate the applications 
programmer as much as possible from the details of the particular computer complex 
being used, especially memory and other hardware features, and such accessory devices 
as communications, printers, readers, displays, keyboards, etc. 
Programming software usually provides tools to assist a programmer in writing computer 
programs and software using different programming languages in a more convenient 
way. The tools include text editors, compilers, interpreters, linkers, debuggers, 
and so on. An Integrated development environment (IDE) merges those tools into a 
software bundle, and a programmer may not need to type multiple commands for compiling, 
interpreter, debugging, tracing, and etc., because the IDE usually has an advanced 
graphical user interface, or GUI. 
Application software allows end users to accomplish one or more specific (non-computer 
related) tasks. Typical applications include industrial automation, business software, 
educational software, medical software, databases, and computer games. Businesses 
are probably the biggest users of application software, but almost every field of 
human activity now uses some form of application software. It is used to automate 
all sorts of functions. 
[edit] Program and library
A program may not be sufficiently complete for execution by a computer. In particular, 
it may require additional software from a software library in order to be complete. 
Such a library may include software components used by stand-alone programs, but 
which cannot work on their own. Thus, programs may include standard routines that 
are common to many programs, extracted from these libraries. Libraries may also 
include 'stand-alone' programs which are activated by some computer event and/or 
perform some function (e.g., of computer 'housekeeping') but do not return data 
to their calling program. Programs may be called by one to many other programs; 
programs may call zero to many other programs.
[edit] Three layers
Starting in the 1980s, application software has been sold in mass-produced packages 
through retailers.See also: Software architecture 
Users often see things differently than programmers. People who use modern general 
purpose computers (as opposed to embedded systems, analog computers, supercomputers, 
etc.) 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, and users may not realize that it exists or that they have a 
choice to use different 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 almost always 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 
User software tailors systems to meet the users specific needs. User software include 
spreadsheet templates, word processor macros, scientific simulations, and scripts 
for graphics and animations. 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 purchased 
application packages, many users may not be aware of the distinction between the 
purchased packages, and what has been added by fellow co-workers. 
[edit] Creation
Main article: Computer programming
[edit] Operation
Computer software has to be "loaded" into the computer's storage (such as a hard 
drive, memory, or RAM). Once the software is loaded, the computer is able to execute 
the software. Computers operate by executing the computer program. 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.
Instructions may be performed sequentially, conditionally, or iteratively. Sequential 
instructions are those operations that are performed one after another. Conditional 
instructions are performed such that different sets of instructions execute depending 
on the value(s) of some data. In some languages this is known as an "if" statement. 
Iterative instructions are performed repetitively and may depend on some data value. 
This is sometimes called a "loop." Often, one instruction may "call" another set 
of instructions that are defined in some other program or module. When more than 
one computer processor is used, instructions may be executed simultaneously.
A simple example of the way software operates is what happens when a user selects 
an entry such as "Copy" from a menu. In this case, a conditional instruction is 
executed to copy text from data in a 'document' area residing in memory, perhaps 
to an intermediate storage area known as a 'clipboard' data area. If a different 
menu entry such as "Paste" is chosen, the software may execute the instructions 
to copy the text from the clipboard data area to a specific location in the same 
or another document in memory.
Depending on the application, even the example above could become complicated. The 
field of software engineering endeavors to manage the complexity of how software 
operates. This is especially true for software that operates in the context of a 
large or powerful computer system.
Currently, almost the only limitations on the use of computer software in applications 
is the ingenuity of the designer/programmer. Consequently, large areas of activities 
(such as playing grand master level chess) formerly assumed to be incapable of software 
simulation are now routinely programmed. The only area that has so far proved reasonably 
secure from software simulation is the realm of human art— especially, pleasing 
music and literature.
Kinds of software by operation: computer program as executable, source code or script, 
configuration.
[edit] Quality and reliability
Software reliability considers the errors, faults, and failures related to the creation 
and operation of software.
See Software auditing, Software quality, Software testing, and Software reliability.
[edit] License
Software 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 OEM license 
when bundled with hardware. Software can also be in the form of freeware or shareware. 
See also License Management.
[edit] Patents
The issue of software patents is controversial. Some believe that they hinder software 
development, while others argue that software patents provide an important incentive 
to spur software innovation. See software patent debate.
[edit] Ethics and rights for software users
Being a new part of society, the idea of what rights users of software should have 
is not very developed. Some, such as the free software community, believe that software 
users should be free to modify and redistribute the software they use. They argue 
that these rights are necessary so that each individual can control their computer, 
and so that everyone can cooperate, if they choose, to work together as a community 
and control the direction that software progresses in. Others believe that software 
authors should have the power to say what rights the user will get.
The former philosophy is somewhat derived from the "hacker ethic" that was common 
in the 60s and 70s.
Home 
Arabic-العربيه Korean- 한국어 chinese 中国 Japanese 日本語 Russian- Русско Portuguese- português Itatian-Itatian French-français Spanish-español German-deutsch English