Computer software, or just software is a general term used to describe a collection of computer programs, procedures and documentation that perform some tasks on a computer system.
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 provide the necessary services for application software, and middleware which controls and co-ordinates distributed systems. Software includes websites, programs, video games etc. that are coded by programming languages like C, C++, etc.
"Software" is sometimes used in a broader context to mean anything which is not hardware but which is used with hardware, such as film, tapes and records.
Overview
Computer software is usually regarded as anything but
hardware, meaning that the "hard" are the parts that are
tangible (able to hold) while the "soft" part is the intangible objects inside the computer. Software encompasses an extremely wide array of products and technologies developed using different techniques like
programming languages,
scripting languages etc. The types of software include
web pages developed by technologies like
HTML,
PHP,
Perl,
JSP,
ASP.NET,
XML, and
desktop applications like
Microsoft Word,
OpenOffice developed by technologies like
C,
C++,
Java,
C#, etc. Software usually runs on an underlying
operating system (which is a software also) like
Microsoft Windows,
Linux (running
GNOME and
KDE),
Sun Solaris etc. Software also includes
video games like the
Super Mario,
Call of Duty for
personal computers or
video game consoles. These games can be created using
CGI (computer generated imagery) that can be designed by applications like
Maya,
3ds Max etc.
Also a software usually runs on a software platform like Java and .NET so that for instance, Microsoft Windows software will not be able to run on Mac OS because how the software is written is different between the systems (platforms). These applications can work using software porting, interpreters or re-writing the source code for that platform.
Relationship to computer hardware
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, software consists of a
machine language specific to an individual processor. A machine language consists of groups of binary values signifying processor instructions 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. In computer science and software engineering, computer software is all computer programs. 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.
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 as 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, interpreting, 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.
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. Libraries may be
called by one to many other programs; programs may call zero to many other programs.
Three layers
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. 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 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:
End-user development tailors systems to meet 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.
Design and creation
Software is usually created (coded, programmed) and designed in
integrated development environments like
emacs,
xemacs,
Microsoft Visual Studio .NET and
Eclipse that can simplify the process and
compile the program. As noted in different section, software is usually created on top of an existing software and the
application programming interface (API) that the underlying software provides like
GTK+,
JavaBeans,
Swing etc. Libraries (APIs) are categorized for different purposes. For instance
JavaBeans library is used for designing
enterprise applications,
Windows Forms library is used for designing
graphical user interface (GUI) applications like
Microsoft Word and
Windows Communication Foundation is used for designing
web services. There are also underlying
concepts in
computer programming like
quicksort,
hashtable,
array,
binary tree that can be useful to creating a software. When a program is designed, it relies on the API. For instance, if a user is designing a
Microsoft Windows desktop application, he/she might use the
.NET Windows Forms library to design the desktop application and call its APIs like
Form1.Close() and
Form1.Show() to close or open the application and write the additional operations him/herself that it need to have. Without these APIs, the programmer need to write these APIs him/herself. Companies like
Sun Microsystems,
Novell and
Microsoft provide their own APIs so that many applications are written using their
software libraries that usually have numerous APIs in them.
Software has special economic characteristics that make its design, creation, and distribution different from most other economic goods.
Software documentation
Most commercial and large softwares have
software documentation so that the
end user can understand the program, what it does and how to use it. Without a clear documentation a software can be hard to use and especially if it is a very specialized and relatively complex softwares like the
Photoshop,
AutoCAD, etc.
Operation
Computer software has to be "loaded" into the
computer's storage (such as a
hard drive,
memory, or
RAM). 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.
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.
Quality and reliability
Software quality is very important to a software, especially for commercial and system softwares like the
Microsoft Office,
Microsoft Windows,
Linux, etc. If a software is faulty (buggy), it can delete a person's work, crash the computer and do other unexpected things. Faults and errors are called a "
bug" and those are eliminated (debugged) through
software testing. All major software companies like
Microsoft,
Novell and
Sun Microsystems and others have their own software testing departments with specific goal of just testing. Softwares can be tested through
unit testing,
regression testing, etc. which are done manually or most commonly automatically since the amount of code to be tested can be quite large. For instance
NASA has an extremely rigorous software testing procedures for its
Space Shuttle and other programs because a faulty software can essentially crash the whole program and make the vehicle not functional at a great expense.
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. See also
License Management.
Patents
Software can be patented; however
software patents can be controversial in the software industry with many people holding different views about it. 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. The controversy over software patents is that a specific
algorithm or technique that the software has cannot be duplicated by others and is considered an
intellectual property and
copyright infringement depending on the severity.
Ethics and rights for software users
Many people have their own understanding about how software should be viewed. For instance, the
free software or the
open source community operates under the understanding that software freedom is essential. For instance, most of them believe that software should be sold for money, can be edited and copied without a high restriction and are commonly against
software patents. Some of them don't like
proprietary software like those from
Microsoft and
Apple. One of the advocates of such view is for instance is
Richard Stallman. Companies like
Microsoft sell their software to make money and to produce other softwares. In this case license plays a huge role in that the free software communities can use the
General Public License (GPL) and Microsoft softwares like Microsoft Word are distributed under a very different license called the Microsoft End User Agreement (EULA).
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.
Software industry and organizations
There are many software companies in the world and selling software can be quite profitable industry. For instance, Bill Gates, the founder of Microsoft is the second richest man in the world in 2008 largely by selling the Microsoft Windows and Microsoft Office software programs, and same goes for Larry Ellison largely through his Oracle database software. Also there are many companies and non-profit software organizations like the Free Software Foundation, GNU Project, Mozilla Foundation. Also there are many software standard organizations like the W3 and others that try to come up with a software standard so that many software can work and interoperate with each other like the XML, HTML, [
], [
] standards and protocols.
Some large software companies include Microsoft, IBM, Oracle, SAP and HP.
See also
References
Economic Aspects