
Software consists of
computer program
A computer program is a sequence or set of instructions in a programming language for a computer to Execution (computing), execute. It is one component of software, which also includes software documentation, documentation and other intangibl ...
s that instruct the
execution of a
computer
A computer is a machine that can be Computer programming, programmed to automatically Execution (computing), carry out sequences of arithmetic or logical operations (''computation''). Modern digital electronic computers can perform generic set ...
.
Software also includes design documents and specifications.
The history of software is closely tied to the development of digital computers in the mid-20th century. Early programs were written in the
machine language specific to the hardware. The introduction of
high-level programming language
A high-level programming language is a programming language with strong Abstraction (computer science), abstraction from the details of the computer. In contrast to low-level programming languages, it may use natural language ''elements'', be ea ...
s in 1958 allowed for more human-readable instructions, making
software development
Software development is the process of designing and Implementation, implementing a software solution to Computer user satisfaction, satisfy a User (computing), user. The process is more encompassing than Computer programming, programming, wri ...
easier and more portable across different
computer architectures. Software in a programming language is run through a
compiler
In computing, a compiler is a computer program that Translator (computing), translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primaril ...
or
interpreter to
execute on the architecture's hardware. Over time, software has become complex, owing to developments in
networking,
operating systems, and
databases.
Software can generally be categorized into two main types:
#
operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
s, which manage hardware resources and provide services for applications
#
application software
Application software is any computer program that is intended for end-user use not operating, administering or programming the computer. An application (app, application program, software application) is any program that can be categorized as ...
, which performs specific tasks for users
The rise of
cloud computing has introduced the new software delivery model
Software as a Service
Software as a service (SaaS ) is a cloud computing service model where the provider offers use of application software to a client and manages all needed physical and software resources. SaaS is usually accessed via a web application. Unlike o ...
(SaaS). In SaaS, applications are hosted by a
provider and
accessed over the
Internet
The Internet (or internet) is the Global network, global system of interconnected computer networks that uses the Internet protocol suite (TCP/IP) to communicate between networks and devices. It is a internetworking, network of networks ...
.
The process of developing software involves several stages. The stages include
software design
Software design is the process of conceptualizing how a software system will work before it is implemented or modified.
Software design also refers to the direct result of the design process the concepts of how the software will work which co ...
,
programming,
testing,
release, and
maintenance.
Software quality assurance
Software quality assurance (SQA) is a means and practice of monitoring all software engineering processes, methods, and work products to ensure compliance against defined standards. It may include ensuring conformance to standards or models, suc ...
and
security are critical aspects of software development, as
bugs and
security vulnerabilities can lead to system failures and security breaches. Additionally, legal issues such as software licenses and intellectual property rights play a significant role in the distribution of software products.
History

The first use of the word ''software'' to describe computer programs is credited to mathematician
John Wilder Tukey in 1958.
The first programmable computers, which appeared at the end of the 1940s, were programmed in
machine language. Machine language is difficult to debug and not
portable across different computers. Initially, hardware resources were more expensive than
human resources
Human resources (HR) is the set of people who make up the workforce of an organization, business sector, industry, or economy. A narrower concept is human capital, the knowledge and skills which the individuals command. Similar terms include ' ...
. As programs became complex,
programmer productivity became the bottleneck. The introduction of
high-level programming language
A high-level programming language is a programming language with strong Abstraction (computer science), abstraction from the details of the computer. In contrast to low-level programming languages, it may use natural language ''elements'', be ea ...
s in 1958
hid the details of the hardware and expressed the underlying
algorithm
In mathematics and computer science, an algorithm () is a finite sequence of Rigour#Mathematics, mathematically rigorous instructions, typically used to solve a class of specific Computational problem, problems or to perform a computation. Algo ...
s into the code . Early languages include
Fortran,
Lisp, and
COBOL.
Types
There are two main types of software:
*
Operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
s are "the
layer of software that manages a computer's resources for its users and their
applications". There are three main purposes that an operating system fulfills:
**Allocating resources between different applications, deciding when they will receive
central processing unit
A central processing unit (CPU), also called a central processor, main processor, or just processor, is the primary Processor (computing), processor in a given computer. Its electronic circuitry executes Instruction (computing), instructions ...
(CPU) time or space in
memory
Memory is the faculty of the mind by which data or information is encoded, stored, and retrieved when needed. It is the retention of information over time for the purpose of influencing future action. If past events could not be remembe ...
.
**Providing an interface that abstracts the details of accessing
hardware details (like physical memory) to make things easier for programmers.
**Offering common services, such as an interface for accessing network and disk devices. This enables an application to be run on different hardware without needing to be rewritten.
*
Application software
Application software is any computer program that is intended for end-user use not operating, administering or programming the computer. An application (app, application program, software application) is any program that can be categorized as ...
runs on top of the operating system and uses the computer's resources to perform a task. There are many different types of application software because the range of tasks that can be performed with modern computers is so large. Applications account for most software and require the
environment provided by an operating system, and often other applications, in order to function.
Software can also be categorized by how it is
deployed. Traditional applications are purchased with a perpetual
license for a specific version of the software, downloaded, and run on hardware belonging to the purchaser. The rise of
the Internet and
cloud computing enabled a new model,
software as a service
Software as a service (SaaS ) is a cloud computing service model where the provider offers use of application software to a client and manages all needed physical and software resources. SaaS is usually accessed via a web application. Unlike o ...
(SaaS), in which the provider hosts the software (usually built on top of rented
infrastructure or
platforms) and provides the use of the software to customers, often in exchange for a
subscription fee. By 2023, SaaS products—which are usually delivered via a
web application—had become the primary method that companies deliver applications.
Software development and maintenance

Software companies aim to deliver a high-quality product on time and under budget. A challenge is that
software development effort estimation is often inaccurate.
Software development
Software development is the process of designing and Implementation, implementing a software solution to Computer user satisfaction, satisfy a User (computing), user. The process is more encompassing than Computer programming, programming, wri ...
begins by conceiving the project, evaluating its feasibility, analyzing the business requirements, and making a
software design
Software design is the process of conceptualizing how a software system will work before it is implemented or modified.
Software design also refers to the direct result of the design process the concepts of how the software will work which co ...
. Most software projects speed up their development by
reusing or incorporating existing software, either in the form of
commercial off-the-shelf (COTS) or
open-source software.
Software quality assurance
Software quality assurance (SQA) is a means and practice of monitoring all software engineering processes, methods, and work products to ensure compliance against defined standards. It may include ensuring conformance to standards or models, suc ...
is typically a combination of manual
code review by other engineers and automated
software testing
Software testing is the act of checking whether software satisfies expectations.
Software testing can provide objective, independent information about the Quality (business), quality of software and the risk of its failure to a User (computin ...
. Due to time constraints, testing cannot cover all aspects of the software's intended functionality, so developers often focus on the most critical functionality.
Formal methods are used in some safety-critical systems to prove the correctness of code, while
user acceptance testing helps to ensure that the product meets customer expectations. There are a variety of
software development methodologies, which vary from completing all steps in order to concurrent and iterative models. Software development is driven by
requirements taken from prospective users, as opposed to maintenance, which is driven by events such as a change request.
Frequently, software is
released in an incomplete state when the development team runs out of time or funding. Despite
testing and
quality assurance, virtually all software contains
bugs where the system does not work as intended. Post-release
software maintenance
Software maintenance is the modification of software after delivery.
Software maintenance is often considered lower skilled and less rewarding than new development. As such, it is a common target for outsourcing or offshoring. Usually, the tea ...
is necessary to remediate these bugs when they are found and keep the software working as the environment changes over time. New features are often added after the release. Over time, the level of maintenance becomes increasingly restricted before being cut off entirely when the product is withdrawn from the market. As software
ages, it becomes known as
legacy software and can remain in use for decades, even if there is no one left who knows how to fix it. Over the lifetime of the product, software maintenance is estimated to comprise 75 percent or more of the total development cost.
Completing a software project involves various forms of expertise, not just in
software programmers but also testing, documentation writing,
project management,
graphic design
Graphic design is a profession, academic discipline and applied art that involves creating visual communications intended to transmit specific messages to social groups, with specific objectives. Graphic design is an interdisciplinary branch of ...
,
user experience, user support,
marketing
Marketing is the act of acquiring, satisfying and retaining customers. It is one of the primary components of Business administration, business management and commerce.
Marketing is usually conducted by the seller, typically a retailer or ma ...
, and fundraising.
Quality and security
Software quality is defined as meeting the stated requirements as well as customer expectations. Quality is an overarching term that can refer to a code's correct and efficient behavior, its reusability and
portability, or the ease of modification. It is usually more cost-effective to build quality into the product from the beginning rather than try to add it later in the development process. Higher quality code will reduce lifetime cost to both suppliers and customers as it is more reliable and
easier to maintain. Software failures in
safety-critical systems can be very serious including death. By some estimates, the cost of poor quality software can be as high as 20 to 40 percent of sales. Despite developers' goal of delivering a product that works entirely as intended, virtually all software contains bugs.
The rise of the Internet also greatly increased the need for
computer security
Computer security (also cybersecurity, digital security, or information technology (IT) security) is a subdiscipline within the field of information security. It consists of the protection of computer software, systems and computer network, n ...
as it enabled malicious actors to conduct
cyberattacks remotely. If a bug creates a security risk, it is called a
vulnerability.
Software patches are often released to fix identified vulnerabilities, but those that remain unknown (
zero days) as well as those that have not been patched are still liable for exploitation. Vulnerabilities vary in their ability to be
exploited by malicious actors, and the actual risk is dependent on the nature of the vulnerability as well as the value of the surrounding system. Although some vulnerabilities can only be used for
denial of service attacks that compromise a system's availability, others allow the attacker to
inject and run their own code (called
malware), without the user being aware of it. To thwart cyberattacks, all software in the system must be designed to withstand and recover from external attack. Despite efforts to ensure security, a significant fraction of computers are infected with malware.
Encoding and execution
Programming languages

Programming languages are the format in which software is written. Since the 1950s, thousands of different programming languages have been invented; some have been in use for decades, while others have fallen into disuse. Some definitions classify
machine code—the exact instructions directly implemented by the hardware—and
assembly language—a more human-readable alternative to machine code whose statements can be translated one-to-one into machine code—as programming languages. Programs written in the
high-level programming languages
A high-level programming language is a programming language with strong abstraction from the details of the computer. In contrast to low-level programming languages, it may use natural language ''elements'', be easier to use, or may automate ...
used to create software share a few main characteristics: knowledge of machine code is not necessary to write them, they can be
ported to other computer systems, and they are more concise and human-readable than machine code. They must be both human-readable and capable of being translated into unambiguous instructions for computer hardware.
Compilation, interpretation, and execution
The invention of high-level programming languages was simultaneous with the
compiler
In computing, a compiler is a computer program that Translator (computing), translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primaril ...
s needed to translate them automatically into machine code. Most programs do not contain all the resources needed to run them and rely on external
libraries. Part of the compiler's function is to link these files in such a way that the program can be executed by the hardware. Once compiled, the program can be saved as an
object file and the
loader (part of the operating system) can take this saved file and
execute it as a
process on the computer hardware. Some programming languages use an
interpreter instead of a compiler. An interpreter converts the program into machine code at
run time, which makes them 10 to 100 times slower than compiled programming languages.
Legal issues
Liability
Software is often released with the knowledge that it is incomplete or contains bugs. Purchasers knowingly buy it in this state, which has led to a legal regime where
liability for software products is significantly curtailed compared to other products.
Licenses

Since the mid-1970s, software and its source code have been protected by
copyright law that vests the owner with the exclusive right to copy the code. The underlying ideas or algorithms are not protected by copyright law, but are sometimes treated as a
trade secret
A trade secret is a form of intellectual property (IP) comprising confidential information that is not generally known or readily ascertainable, derives economic value from its secrecy, and is protected by reasonable efforts to maintain its conf ...
and concealed by such methods as
non-disclosure agreements. A
software copyright is often owned by the person or company that financed or made the software (depending on their contracts with employees or
contractors who helped to write it). Some software is in the
public domain
The public domain (PD) consists of all the creative work to which no Exclusive exclusive intellectual property rights apply. Those rights may have expired, been forfeited, expressly Waiver, waived, or may be inapplicable. Because no one holds ...
and has no restrictions on who can use it, copy or share it, or modify it; a notable example is software written by the
United States Government
The Federal Government of the United States of America (U.S. federal government or U.S. government) is the Federation#Federal governments, national government of the United States.
The U.S. federal government is composed of three distinct ...
.
Free and open-source software also allow free use, sharing, and modification, perhaps with a few specified conditions. The use of some software is governed by an agreement (
software license) written by the copyright holder and imposed on the user.
Proprietary software is usually sold under a restrictive license that limits its use and sharing. Some free software licenses require that modified versions must be released under the same license, which prevents the software from being sold
or distributed under proprietary restrictions.
Patents
Patent
A patent is a type of intellectual property that gives its owner the legal right to exclude others from making, using, or selling an invention for a limited period of time in exchange for publishing an sufficiency of disclosure, enabling discl ...
s give an inventor an exclusive, time-limited license for a novel product or process. Ideas about what software could accomplish are not protected by law and concrete implementations are instead covered by
copyright law. In some countries, a requirement for the claimed invention to have an effect on the physical world may also be part of the requirements for a software patent to be held valid.
[Gerardo Con Díaz, "The Text in the Machine: American Copyright Law and the Many Natures of Software, 1974–1978", ''Technology and Culture'' 57 (October 2016), 753–79.] Software patents have been
historically controversial. Before the 1998 case ''
State Street Bank & Trust Co. v. Signature Financial Group, Inc.'', software patents were generally not recognized in the United States. In that case, the
Supreme Court decided that business processes could be patented. Patent applications are complex and costly, and lawsuits involving patents can drive up the cost of products. Unlike copyrights, patents generally only apply in the jurisdiction where they were issued.
Impact

Engineer
Capers Jones writes that "computers and software are making profound changes to every aspect of human life: education, work, warfare, entertainment, medicine, law, and everything else". It has become ubiquitous in
everyday life
Everyday life, daily life or routine life comprises the ways in which people typically act, think, and feel on a daily basis. Everyday life may be described as mundane, routine, natural, habitual, or Normality (behavior), normal.
Human diurna ...
in
developed countries. In many cases, software augments the functionality of existing technologies such as household
appliances and
elevators. Software also spawned entirely new technologies such as
the Internet,
video games,
mobile phones, and
GPS. New methods of communication, including
email,
forums,
blog
A blog (a Clipping (morphology), truncation of "weblog") is an informational website consisting of discrete, often informal diary-style text entries also known as posts. Posts are typically displayed in Reverse chronology, reverse chronologic ...
s,
microblogging,
wikis, and
social media
Social media are interactive technologies that facilitate the Content creation, creation, information exchange, sharing and news aggregator, aggregation of Content (media), content (such as ideas, interests, and other forms of expression) amongs ...
, were enabled by the Internet. Massive amounts of knowledge exceeding any paper-based library are now available with a quick
web search. Most creative professionals have switched to software-based tools such as
computer-aided design,
3D modeling, digital
image editing, and
computer animation. Almost every complex device is controlled by software.
References
Sources
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
{{Authority control