Difference between revisions of "Computer software" - New World Encyclopedia

From New World Encyclopedia
 
(20 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{redirect|Software}}  
+
{{Paid}}{{Images OK}}{{Submitted}}{{Approved}}{{copyedited}}
[[Image:Packagedsoftwareatretail.jpg|thumb|right|300px|Starting in the 1980s, application software has been sold in mass-produced packages through retailers.]]
 
  
'''Software''' fundamentally is the unique ''image'' or representation of physical or material alignment that constitutes configuration to or functional identity of a [[machine]], usually a [[computer]]. As a content of [[memory (computers)|memory]], software in principle can be changed without the adjustment to the static [[paradigm]] of the [[hardware]] thus without the remanufacturing thereof. Commonly software is of an [[algorithm|algorithmic]] form which translates into being to a sequence of machine [[machine code|instructions]]. Some software, however, is of a [[relation (mathematics)|relational]] form which translates into being the [[graph (mathematics)|map]] of a ''realization'' [[digital network|network]] (see [[VHDL]]).
+
'''Computer software''' is a [[computer program|program]] that enables a [[computer]] to perform a specific task, as opposed to the physical components of the system ''([[hardware]])''. This includes [[application software]] such as a word processor, which enables a user to perform a task, and [[system software]] such as an [[operating system]], which enables other software to run properly, by interfacing with hardware and with other software.
 
+
{{toc}}
Software is a [[computer program|program]] that enables a [[computer]] to perform a specific task, as opposed to the physical components of the system (''[[hardware]]''). This includes [[application software]] such as a word processor, which enables a user to perform a task, and [[system software]] such as an [[operating system]], which enables other software to run properly, by interfacing with hardware and with other software.
+
The term "software" was first used in this sense by [[John W. Tukey]] in 1957. In [[computer science]] and [[software engineering]], '''computer software''' is all computer programs. The concept of reading different sequences of instructions into the [[Memory (computers)|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''.<ref>Mike Hally, ''Electronic brains/Stories from the Dawn of the Computer Age'' (London: British Broadcasting Corporation and Granta Books, 2005, ISBN 1-86-207663-4).</ref>
 
 
The term "software" was first used in this sense by [[John W. Tukey]] in [[1957]]. In [[computer science]] and [[software engineering]], '''computer software''' is all computer programs. The concept of reading different sequences of instructions into the [[Memory (computers)|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''. <ref>Hally, Mike (2005:79). ''Electronic brains/Stories from the dawn of the computer age''. British Broadcasting Corporation and Granta Books, London. ISBN 1-86-207663-4.</ref>
 
  
 
==Relationship to hardware==
 
==Relationship to hardware==
{{main|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 [[random access memory]] (RAM) and executed in the [[central processing unit]]. At the lowest level, software consists of a [[machine language]] specific to an individual processor. The machine language consists of groups of binary values signifying processor instructions ([[object code]]), which change the state of the computer from its preceding state.
  
[[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 [[Random access memory|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 language]]s that are easier and more efficient for humans to use (closer to [[natural language]]) than machine language. High-level languages are [[compiler|compiled]] or [[Interpreter (computing)|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 [[assembly language#Assembler|assembler]].
+
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 language]]s that are easier and more efficient for humans to use (closer to [[natural language]]) than machine language. High-level languages are [[compiler|compiled]] or [[Interpreter (computing)|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 [[assembly language#Assembler|assembler]].
  
 
==Relationship to data==
 
==Relationship to data==
Software has historically been considered an intermediary between electronic hardware and ''data,'' which latter entity the ''hardware'' processes according to the sequence of instructions defined by the ''software.'' As computational math becomes increasingly complex, the distinction between software and data becomes less precise. Data has generally been considered as either the output or input of executed software. However, data is not the only possible output or input. For example, (system) configuration information may also be considered input, although not ''necessarily'' considered data (and certainly not applications data). The output of a particular piece of executed software may be the input for another executed piece of software. Therefore, software may be considered an interface between hardware, data, and/or (other) software.
+
Software has historically been considered an intermediary between electronic hardware and ''[[data]],'' which are defined by the instructions defined by the ''software.'' As computational math becomes increasingly complex, the distinction between software and data becomes less precise. Data has generally been considered as either the output or input of executed software. However, data is not the only possible output or input. For example, (system) configuration information may also be considered input, although not ''necessarily'' considered data (and certainly not applications data). The output of a particular piece of executed software may be the input for another executed piece of software. Therefore, software may be considered an interface between hardware, data, and/or (other) software.
  
 
==Types==
 
==Types==
Practical computer systems divide software into three major classes: [[system software]], [[programming software]] and [[application software]], although the distinction is arbitrary and often blurred.
+
Practical computer systems divide software 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 system]]s, [[device driver]]s, diagnostic tools, [[Server (computing)|server]]s, [[windowing system]]s, [[software utility|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 use, especially memory and other hardware features, and such accessory devices as communications, printers, readers, displays, keyboards, etc.
+
*'''System software''' helps run the [[computer hardware]] and [[computer system]]. It includes [[operating system]]s, [[device driver]]s, diagnostic tools, [[Server (computing)|server]]s, [[windowing system]]s, [[software utility|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 program]]s and software using different [[programming language]]s in a more convenient way. The tools include [[text editors]], [[compilers]], [[interpreter (computing)|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 [[command]]s for compiling, interpreter, debugging, tracing, and etc., because the IDE usually has an advanced ''graphical user interface,'' or GUI.
+
*'''Programming software''' usually provides tools to assist a [[programmer]] in writing [[computer program]]s and software using different [[programming language]]s in a more convenient way. The tools include [[text editors]], [[compilers]], [[interpreter (computing)|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 [[command]]s for compiling, interpreter, debugging, tracing, and etc., because the IDE usually has an advanced ''graphical user interface'' (GUI).
*'''[[Application software]]''' allows humans to accomplish one or more specific (non-computer related) [[task]]s. Typical applications include [[Industry|industrial]] [[automation]], [[business software]], [[educational software]], [[medical software]], [[database]]s 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.
+
*'''Application software''' allows humans to accomplish one or more specific (non-computer related) [[task]]s. Typical applications include [[Industry|industrial]] [[automation]], [[business software]], [[educational software]], [[medical software]], [[database]]s, 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.
 +
 
 +
==Computer viruses==
 +
Computer viruses are a malignant type of computer program even though they might not be considered software. They can be created as any of the three types of software. Some viruses cause minor problems, such as slowing down a computer or using email to spread. Other viruses can cause more serious problems, such as destroying data or damaging hardware.
  
 
==Program and library==
 
==Program and library==
A [[Computer program|program]] may not be sufficiently complete for execution by a [[computer]]. In particular, it may require additional software from a  
+
A [[Computer program|program]] may not be sufficiently complete for execution by a [[computer]]. In particular, it may require additional software from a [[software library]] to be complete. Such a library may include software components used by [[stand-alone]] programs, but which cannot be executed 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 that are activated by some [[Event-driven programming|computer event]] and/or perform some function (such as computer "housekeeping") but do not return data to their activating program. Programs may be called by other programs and/or may call other programs.
[[software library]] in order to be complete. Such a library may include software components used by [[stand-alone]] programs, but which cannot be executed 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 [[Event-driven programming|computer event]] and/or perform some function (e.g., of computer 'housekeeping') but do not return data to their activating program. Programs may be called by other programs and/or may call other programs.vb
 
  
 
==Three layers==
 
==Three layers==
 +
Users often see things differently than programmers. People who use modern general purpose computers (as opposed to [[embedded system]]s, [[analog computer]]s, [[supercomputer]]s, and so forth) usually see three layers of software performing a variety of tasks: Platform, application, and user software.
  
Users often see things differently than programmers. People who use modern general purpose computers (as opposed to [[embedded system]]s, [[analog computer]]s, [[supercomputer]]s, etc.) usually see three layers of software performing a variety of tasks: platform, application, and user software.
+
*'''Platform software:''' Platform includes the [[BIOS|basic input-output system]] (often described as ''[[firmware]]'' rather than ''software''), [[device driver]]s, an [[operating system]], and typically a graphical user interface which, in total, allow a user to interact with the computer and its [[peripheral]]s (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.
  
; Platform software : Platform includes the [[BIOS|basic input-output system]] (often described as ''[[firmware]]'' rather than ''software''), [[device driver]]s, an [[operating system]], and typically a graphical user interface which, in total, allow a user to interact with the computer and its [[peripheral]]s (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 simply, "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.
  
; 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, graphics and animation scripts. 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.
  
; User-written software : [[User software]] tailors systems to meet the users specific needs. User software include spreadsheet templates, word processor macros, scientific simulations, graphics and animation scripts. 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.
+
==Operation==
 +
Computer software has to be "loaded" into the [[computer storage|computer's storage]] (also known as ''memory'' and ''[[RAM]]'').
  
{{see also|Software architecture}}
+
Once the software is loaded, the computer is able to execute the software. Computers operate by ''executing'' the [[computer program]]. This involves passing [[instruction (computer science)|instructions]] from the application software, through the system software, to the [[hardware]] which ultimately receives the instruction as [[machine language|machine code]]. Each instruction causes the computer to carry out an operation—moving [[data (computing)|data]], carrying out a [[computation]], or altering the [[control flow]] of instructions.
  
==Creation==
+
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.
{{main|Computer programming}}
 
  
==Software architecture==
+
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.  
The '''software architecture''' of a system comprises its software components, their external properties, and their relationships with one another.  The term also refers to documentation of a system's software architecture. Documenting software architecture facilitates communication between [[stakeholders]], documents early decisions about high-level design, and allows reuse of design components and patterns between projects.<ref>{{cite book|last=Bass|first=Len|coauthors=Paul Clements, Rick Kazman|title=Software Architecture In Practice|publisher = Addison-Wesley|date=1998|location=Boston|pages=p. 23-28|id=ISBN 0-201-19930-0}}
 
</ref>
 
  
===Background===
+
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 impossible if done by 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&mdash;especially, pleasing music and literature.
The field of computer science has come across problems associated with complexity since its formation.<ref>{{cite web|author=University of Waterloo|title= A Very Brief History of Computer Science |url=http://www.cs.uwaterloo.ca/~shallit/Courses/134/history.html |date=2006|accessdate=2006-09-23}}</ref> Earlier problems of complexity were solved by developers by choosing the right data structures, developing algorithms, and by applying the concept of separation of concerns. Although the term “software architecture” is relatively new to the industry, the fundamental principles of the field have been applied sporadically by software engineering pioneers since mid 1980s. Early attempts to capture and explain software architecture of a system were imprecise and disorganized - often characterized by a set of box-and-line diagrams.<ref>{{cite web|author=IEEE Transactions on Software Engineering|title= Introduction to the Special Issue on Software Architecture |url=http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/trans/ts/&toc=comp/trans/ts/1995/04/e4toc.xml&DOI=10.1109/TSE.1995.10003
 
|date=2006|accessdate=2006-09-23}}</ref> During the 1990’s there was a concentrated effort to define and codify fundamental aspects of the discipline. Initial sets of design patterns, styles, best practices, description languages, and formal logic were developed during that time.
 
  
The software architecture discipline is centered on the idea of reducing complexity through abstraction and separation of concerns. To date there is still no agreement on the precise definition of the term “software architecture”.<ref>{{cite web|author=SEI|title= How do you define Software Architecture?|url= http://www.sei.cmu.edu/architecture/definitions.html |date=2006|accessdate=2006-09-23}}</ref>
+
==Quality and reliability==
 +
[[Software reliability]] considers the errors, faults, and failures related to the creation and operation of software. A lot of the quality and reliability of a program has to do with the Application software being written for a specific System software. One example is that an application for an older System software may not work on a newer one.
  
As a maturing discipline with no clear rules on the right way to architect a system the action of architecting is still a composition of art and science. The “art” aspect of software architecture is due to the fact that a commercial software system supports some aspect of a business or a mission. How a system supports key business drivers is described via scenarios as non-functional requirements of a system, also known as quality attributes, determine how a system will behave.<ref name="softwareqa">{{cite web|author=SoftwareArchitectures.com|title= Intro to Software Quality Attributes |url=http://www.softwarearchitectures.com/one/Designing+Architecture/78.aspx |date=2006|accessdate=2006-09-23}}</ref> Every system is unique due to the nature of the business drivers it supports, as such the degree of quality attributes exhibited by a system such as fault-tolerance, backward compatibility, extensibility, reliability, maintainability, availability, security, usability, and such other –ilities will vary with each implementation.<ref name="softwareqa"/>
+
==Software architecture==
 
+
The '''software architecture''' of a system comprises its software components, their external properties, and their relationships with one another. The term also refers to documentation of a system's software architecture.<ref>Len Bass, Paul Clements, and Rick Kazman, ''Software Architecture In Practice'' (Boston: Addison-Wesley, 1998, ISBN 0-201-19930-0).</ref>
To bring a software architecture user's perspective into the software architecture, it can be said that software architecture gives the direction to take steps and do the tasks involved in each such user's speciality area and interest e.g. the stake holders of software systems, the software developer, the software system operational support group, the software maintenance specialists, the deployer, the tester and also the business end user{{cite needed}}.  In this sense software architecture is really the amalgamation of the multiple perspectives a system always embodies. The fact that those several different perspectives can be put together into a software architecture stands as the vindication of the need and justification of  creation of software architecture before the software development in a project attains maturity.
 
  
 
===History===
 
===History===
The origins of software architecture as a concept was first identified in the research work of [[Edsger Dijkstra]] in 1968 and [[David Parnas]] in the early 1970’s. The scientists emphasized that the structure of a software system matters and getting the structure right is critical<ref>{{cite web|author=SEI|title= Origins of Software Architecture Study |url= http://www.sei.cmu.edu/architecture/roots.html |date=2006|accessdate=2006-09-25}}</ref>. The study of the field increased in popularity since the early [[1990s]] with research work concentrating on architectural styles ([[patterns]]), architecture description languages, architecture documentation, and formal methods<ref>{{cite web|author=Garlan & Shaw |title= An Introduction to Software Architecture |url= http://www.cs.cmu.edu/afs/cs/project/able/ftp/intro_softarch/intro_softarch.pdf |date=2006|accessdate=2006-09-25}}</ref>. Many research institutions such as [[Carnegie Mellon University]] and [[University of California, Irvine]] are doing a lot of research in the field of software architecture. Mary Shaw and David Garlan of Carnegie Mellon wrote a book titled ''Software Architecture: Perspectives on an Emerging Discipline'' in [[1996]], which brought forward the concepts in Software Architecture, such as [[software component|components]], connectors, styles and so on. UCI's Institute for Software Research's efforts in software architecture research is directed primarily in architectural styles, architecture description languages, and dynamic architectures.  
+
The origins of software architecture as a concept were first identified in the research work of [[Edsger Dijkstra]] in 1968, and [[David Parnas]] in the early 1970s. The scientists emphasized that the structure of a software system matters and getting the structure right is critical.<ref>SEI, Origins of Software Architecture Study.</ref> The study of the field increased in popularity since the early 1990s, with research work concentrating on architectural styles ([[patterns]]), architecture description languages, architecture documentation, and formal methods.<ref>Garlan & Shaw, [http://www.cs.cmu.edu/afs/cs/project/able/ftp/intro_softarch/intro_softarch.pdf An Introduction to Software Architecture.] Retrieved May 31, 2008.</ref>
  
''[[Ieee 1471|ANSI/IEEE 1471-2000: Recommended Practice for Architecture Description of Software-Intensive Systems]]'' is the first formal standard in the area of software architecture, and was recently adopted by ISO as ''[[IEEE 1471|ISO/IEC DIS 25961]]''.
+
Mary Shaw and David Garlan of Carnegie Mellon wrote a book titled, ''Software Architecture: Perspectives on an Emerging Discipline'' in 1996, which brought forward the concepts in Software Architecture, such as [[software component|components]], connectors, styles, and so on. UCI's Institute for Software Research's efforts in software architecture research is directed primarily in architectural styles, architecture description languages, and dynamic architectures.
  
 
=== Describing architectures ===
 
=== Describing architectures ===
 
====Architecture description languages====
 
====Architecture description languages====
[[Architecture description language]]s (ADLs) are used to describe a Software Architecture. Several different ADLs have been developed by different organizations, including [[Wright (ADL)|Wright]] (developed by Carnegie Mellon), Acme (developed by Carnegie Mellon), xADL (developed by UCI), Darwin (developed by [[Imperial College London]]), DAOP-ADL (developed by University of Málaga). Common elements of an ADL are [[software component|component]], connector and configuration.
+
[[Architecture Description Language]]s (ADLs) are used to describe a Software Architecture. Several different ADLs have been developed by different organizations, including [[Wright (ADL)|Wright]] (developed by Carnegie Mellon), Acme (developed by Carnegie Mellon), xADL (developed by UCI), Darwin (developed by [[Imperial College London]]), and DAOP-ADL (developed by University of Málaga). Common elements of an ADL are [[software component|component]], connector and configuration.
  
 
====Views====
 
====Views====
Software architecture is commonly organized in views<ref name="documenting">{{cite book
+
Software architecture is commonly organized in views,<ref>Paul Clements, Felix Bachmann, Len Bass, David Garlan, James Ivers, Reed Little, Robert Nord, and Judith Stafford, ''Documenting Software Architectures: Views and Beyond'' (Boston: Addison-Wesley, 2003, ISBN 0-201-70372-6).</ref> which are analogous to the different types of [[blueprint]]s made in building [[architecture]].
  | last = Clements
 
  | first = Paul
 
  | coauthors = Felix Bachmann, Len Bass, David Garlan, James Ivers, Reed Little, Robert Nord, Judith Stafford
 
  | title = Documenting Software Architectures: Views and Beyond
 
  | publisher = Addison-Wesley
 
  | date = 2003
 
  | location = Boston
 
  | pages = pp. 13-15
 
  | id = ISBN 0-201-70372-6 }}</ref>, which are analogous to the different types of [[blueprint]]s made in building [[architecture]].
 
Within the ontology established by [[Ieee 1471|ANSI/IEEE 1471-2000]], ''views'' are instances of ''viewpoints'', where a viewpoint exists to describe the architecture in question from the perspective of a given set of stakeholders and their concerns.
 
 
 
Some possible views (actually, ''viewpoints'' in the 1471 ontology) are:
 
 
 
*Functional/logic view
 
*Code view
 
*Development/structural view
 
*Concurrency/process/thread view
 
*Physical/deployment view
 
*User action/feedback view
 
 
 
Several languages for describing software architectures have been devised, but no consensus has yet been reached on which symbol-set and view-system should be adopted. Some believe that [[Unified Modeling Language|UML]] will establish a standard for ''software architecture views''{{cite needed}}. Others believe that effective development of software relies on understanding unique constraints of each problem, and so universal notations are doomed because each provides a [[notational bias]] that necessarily makes the notation useless or dangerous for some set of tasks{{cite needed}}. They point to the proliferation of [[programming language]]s and a succession of failed attempts to impose a single 'universal language' on programmers, as proof that software thrives on  diversity and not on standards.
 
 
 
===Architecture examples===
 
There are many common ways of designing computer software modules and their communications, among them:
 
 
 
*[[Client-server]]
 
*[[Distributed computing]]
 
*[[Peer-to-peer]]
 
*[[Blackboard (computing)|Blackboard]]
 
*[[Implicit invocation]]
 
*[[Pipes and filters]]
 
*[[Plugin]]
 
*[[Monolithic system]]
 
*[[Three-tier (computing)|Three-tier model]]
 
*[[Structured Systems Analysis and Design Methodology|Structured]] (module-based but usually monolithic within modules)
 
*[[Software componentry]] (strictly module-based, usually [[object-oriented programming]] within modules, slightly less monolithic)
 
*[[Service-oriented architecture]]
 
 
 
==Operation==
 
Computer software has to be "loaded" into the [[computer storage|computer's storage]] (also known as ''memory'' and ''[[RAM]]'').
 
 
 
Once the software is loaded, the computer is able to execute the software.  Computers operate by ''executing'' the [[computer program]].  This involves passing [[instruction (computer science)|instructions]] from the application software, through the system software, to the [[hardware]] which ultimately receives the instruction as [[machine language|machine code]].  Each instruction causes the computer to carry out an operation — moving [[data (computing)|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 know 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 (programming)|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 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 (computer programming)|script]], [[computer configuration|configuration]].
 
 
 
==Quality and reliability==
 
[[Software reliability]] considers the errors, faults, and failures related to the creation and operation of software.
 
 
 
See [[Computer security audit|Software auditing]], [[Software quality]], [[Software testing]], and [[Software reliability]].
 
  
 
==License==
 
==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]].
[[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]].
 
  
 
===Proprietary software===
 
===Proprietary software===
 +
'''Proprietary software''' is software that has restrictions on using and copying it, usually enforced by a [[proprietary|proprietor]]. The prevention of use, copying, or modification can be achieved by legal or technical means. Technical means include releasing machine-readable [[binaries]] only, and withholding the human-readable [[source code]]. Legal means can involve [[software license|software licensing]], [[copyright]], and [[patent]] law. Proprietary software can be sold for money as [[commercial software]] or available at zero-price as [[freeware]]. The [[monopoly]] provided by proprietary software allows a distributor of commercial copies to charge any price for those copies. Distributors of proprietary software have more control over what users can do with the software than [[nonproprietary software]].
  
'''Proprietary software''' is software that has restrictions on using and copying it, usually enforced by a [[proprietary|proprietor]].  The prevention of use, copying, or modification can be achieved by legal or technical means. Technical means include releasing machine-readable [[binaries]] only, and withholding the human-readable [[source code]]. Legal means can involve [[software license|software licensing]], [[copyright]] and [[patent]] law.  Proprietary software can be sold for money as [[commercial software]] or available at zero-price as [[freeware]].  The [[monopoly]] provided by proprietary software allows a distributor of commercial copies to charge any price for those copies. Distributors of proprietary software have more control over what users can do with the software than [[non-proprietary software]].
+
===Free software===
 +
'''Free software,''' as defined by the [[Free Software Foundation]], is software which can be used, copied, studied, modified, and redistributed without restriction. Freedom from such restrictions is central to the concept, with the opposite of free software being [[proprietary software]] (a distinction unrelated to whether a fee is charged). The usual way for software to be distributed as free software is for the software to be licensed to the recipient with a [[free software license]] (or be in the public domain), and the [[source code]] of the software to be made available (for a [[compiled language]]). Most free software is distributed [[online]] without charge, or [[off-line]] at the marginal cost of distribution, but this is not required, and people may sell copies for any price.
  
===Free software===
+
To help distinguish ''[[Gratis versus Libre|libre]]'' (freedom) software from ''gratis'' (zero price) software, [[Richard Stallman]], founder of the [[free software movement]], developed the following explanation: "Free software is a matter of liberty, not price. To understand the concept, you should think of 'free' as in '[[free speech]]', not as in '[[free beer]].'" More specifically, free software means that [[user (computing)|computer users]] have the freedom to cooperate with whom they choose, and to control the software they use.
  
'''Free software''', as defined by the [[Free Software Foundation]], is [[software]] which can be used, copied, studied, modified and redistributed without restriction. Freedom from such restrictions is central to the concept, with the opposite of free software being [[proprietary software]] (a distinction unrelated to whether a fee is charged). The usual way for software to be distributed as free software is for the software to be licensed to the recipient with a [[free software license]] (or be in the public domain), and the [[source code]] of the software to be made available (for a [[compiled language]]).
+
===Open-source software===
 +
'''Open-source software''' is computer software whose [[source code]] is available under a [[license|copyright license]] that permits users to study, change, and improve the software, and to redistribute it in modified or unmodified form. It is the most prominent example of open source development.
  
To help distinguish ''[[Gratis versus Libre|libre]]'' (freedom) software from ''[[Gratis versus Libre|gratis]]'' (zero price) software, [[Richard Stallman]], founder of the [[free software movement]], developed the following explanation: "Free software is a matter of liberty, not price. To understand the concept, you should think of 'free' as in '[[free speech]]', not as in '[[free beer]]'". More specifically, free software means that [[user (computing)|computer users]] have the freedom to cooperate with whom they choose, and to control the software they use. The [[GNU Manifesto]] contains language that gives evidence of Stallman's initial confusion with the usage.
+
In 1998, a group of individuals advocated that the term "free software" be replaced by open-source software (OSS) as an expression which is less ambiguous and more comfortable for the corporate world. Software developers may want to publish their software with an [[open-source license|open-source software license]], so that anybody may also develop the same software or understand how it works. Open-source software generally allows anybody to make a new version of the software, port it to new operating systems and processor architectures, share it with others or market it. The aim of open source is to let the product be more understandable, modifiable, duplicable, reliable, or simply accessible, while it is still marketable.
  
Most free software is distributed [[online]] without charge, or [[off-line]] at the [[marginal cost]] of distribution, but this is not required, and people may sell copies for any price. Thus, free software is entirely compatible with [[commercial software]]: a prohibition on selling the software would be a restriction failing the [[free software definition]].
+
The [[Open Source Definition]], notably, presents an open-source philosophy, and further defines a boundary on the usage, modification and redistribution of open-source software. Software licenses grant rights to users which would otherwise be prohibited by copyright. These include rights on usage, modification and redistribution. Several open-source software licenses have qualified within the boundary of the Open Source Definition. The most prominent example is the popular [[GNU General Public License]] (GPL). While open source presents a way to broadly make the sources of a product publicly accessible, the open-source licenses allow the authors to fine tune such access.
  
==Patents==
+
===Freeware===
The issue of [[software patents]] is very controversial, since while [[patent]]s protect the ideas of "[[inventor]]s", they are widely believed to hinder [[software development]]. See [[Hacker ethic]].
+
'''Freeware''' is copyrighted computer software which is made available for use free of charge, for an unlimited time, as opposed to [[Shareware|shareware]], in which the user is required to pay (for example, after some trial period). The only criterion for being classified as "freeware" is that the software must be made available for use for an unlimited time at no cost. The software license may impose one or more other restrictions on the type of use including personal use, individual use, non-profit use, non-commercial use, academic use, commercial use. or any combination of these. For instance, the license may be "free for personal, non-commercial use." There is some software that may be considered freeware, but that have limited distribution; that is, they may only be downloaded from a specific site, and they can not be redistributed. Hence, such software wouldn't be [[freely redistributable software]]. According to the basic definition, that software would be freeware; according to stricter definitions, they wouldn't be. Everything created with the freeware programs can be distributed at no cost (for example graphic, documents, waves made by user).
  
==See also==
+
Freeware contrasts with [[free software]], because of the different meanings of the word "free." Freeware is gratis and refers to zero price, versus free software that is described as "libre," which means free to study, change, copy, redistribute, share, and use the software in any purpose. However, many programs are both freeware and free software. They are available for zero price, provide the source code and are distributed with free software permissions. This software would exclusively be called free software to avoid confusion with freeware that usually does not come with the source code and is therefore [[proprietary software]].
{{portalpar|free software}}
 
  
* [[Algorithm]]
+
===Shareware===
* [[Computer programming]]
+
'''Shareware''' is a [[marketing]] method for [[commercial software]], whereby a trial version is distributed in advance and without payment, as is common for [[proprietary software]]. Shareware software is typically obtained free of charge, either by downloading from the Internet or on magazine cover-disks. A user tries out the program, and thus shareware has also been known as "try before you buy," [[demoware]], trialware, and by many other names. A shareware program is accompanied by a request for payment, and the software's distribution license often requires such a payment. Payment is often required once a set period of time has elapsed after installation.
* [[Software development process]]
 
* [[Software development tools]]
 
* [[Software engineering]]
 
* [[Software maintenance]]
 
* [[Software optimization]]
 
* [[Software brittleness]]
 
*[[Software license]]s
 
**[[Proprietary software]]
 
**[[Free software]]
 
**[[Open source software]]
 
**[[Software piracy]]
 
**[[Freeware]]
 
**[[Shareware]]
 
**[[Postcardware]]
 
**[[Shovelware]]
 
**[[Dual license]]
 
*[[Software as a Service]]
 
*[[Software Security Assurance]]
 
*[[List of open source software packages]]
 
*[[Software industry]]
 
  
==Footnotes==
+
==Notes==
 
<references/>
 
<references/>
  
== Further reading ==
+
==References==
 
+
* Bass, Len, Paul Clements, and Rick Kazman: ''Software Architecture in Practice, Second Edition''. Boston: Addison Wesley, 2003. ISBN 0321154959.  
* ''Softword: Provenance for the Word 'Software', Paul Niquette, ISBN 1-58922-233-4, Internet Version at http://www.niquette.com/books/softword/tocsoft.html
+
* Kruchten, Philippe. "Architectural Blueprints: The 4+1 View Model of Software Architecture." ''IEEE Software.'' 12 (6): 42-50.
*Len Bass, Paul Clements, Rick Kazman: ''Software Architecture in Practice, Second Edition''. Addison Wesley, Reading 5/9/2003 ISBN 0321154959 (This book, now in second edition, eloquently covers the fundamental concepts of the discipline. The theme is centered around achieving quality attributes of a system.)
+
* Niquette, Paul. ''Softword: Provenance for the Word "Software."'' ISBN 1-58922-233-4.
*Philippe Kruchten: ''Architectural Blueprints - the 4+1 View Model of Software Architecture''. In: IEEE Software. 12 (6) November 1995, pp. 42-50 (also available online at the [http://www3.software.ibm.com/ibmdl/pub/software/rational/web/whitepapers/2003/Pbk4p1.pdf Rational website](PDF))
 
  
 
==External links==
 
==External links==
 +
All links retrieved January 7, 2024.
 +
*[http://www.sei.cmu.edu/architecture/definitions.html Software architecture definitions at Carnegie Mellon University Software Engineering Institute]
 +
* [http://iasaglobal.org/ International Association of Software Architects]
  
*[http://www.sei.cmu.edu/architecture/definitions.html Software architecture definitions at Carnegie Mellon University Software Engineering Institute]
 
* [http://eden-study.org/articles/2003/icse03.pdf Software architecture vs. software design]
 
* [http://www.wwisa.org/ Worldwide Institute of Software Architects]
 
* [http://www.booch.com/architecture/index.jsp Grady Booch's Handbook of Software Architecture project]
 
* [http://www.SoftwareArchitectures.com SoftwareArchitectures.com Independent resource of information on the discipline]
 
* [http://www.iasahome.org/iasaweb/appmanager/home/home/ International Association of Software Architects]
 
* [http://www.architecturejournal.net/ Microsoft Architecture Journal]
 
  
 
[[Category:Physical sciences]]
 
[[Category:Physical sciences]]
 
[[Category:Computer Science and Engineering]]
 
[[Category:Computer Science and Engineering]]
  
{{credit3|Computer_software|80783807|Software_architecture|80775806|Proprietary_software|81632913}}
+
{{credit7|Computer_software|80783807|Software_architecture|80775806|Proprietary_software|81632913|Free_software|81467989|Open_source_software|80712080|Freeware|81709009|Shareware|79809025}}

Latest revision as of 02:36, 8 January 2024


Computer software is a program that enables a computer to perform a specific task, as opposed to the physical components of the system (hardware). This includes application software such as a word processor, which enables a user to perform a task, and system software such as an operating system, which enables other software to run properly, by interfacing with hardware and with other software.

The term "software" was first used in this sense by John W. Tukey in 1957. 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.[1]

Relationship to 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 random access memory (RAM) and executed in the central processing unit. At the lowest level, software consists of a machine language specific to an individual processor. The 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.

Relationship to data

Software has historically been considered an intermediary between electronic hardware and data, which are defined by the instructions defined by the software. As computational math becomes increasingly complex, the distinction between software and data becomes less precise. Data has generally been considered as either the output or input of executed software. However, data is not the only possible output or input. For example, (system) configuration information may also be considered input, although not necessarily considered data (and certainly not applications data). The output of a particular piece of executed software may be the input for another executed piece of software. Therefore, software may be considered an interface between hardware, data, and/or (other) software.

Types

Practical computer systems divide software 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 (GUI).
  • Application software allows humans 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.

Computer viruses

Computer viruses are a malignant type of computer program even though they might not be considered software. They can be created as any of the three types of software. Some viruses cause minor problems, such as slowing down a computer or using email to spread. Other viruses can cause more serious problems, such as destroying data or damaging hardware.

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 to be complete. Such a library may include software components used by stand-alone programs, but which cannot be executed 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 that are activated by some computer event and/or perform some function (such as computer "housekeeping") but do not return data to their activating program. Programs may be called by other programs and/or may call 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, and so forth) usually see three layers of software performing a variety of tasks: Platform, application, and user software.

  • Platform software: Platform includes the basic input-output system (often described as firmware rather than software), 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 simply, "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, graphics and animation scripts. 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.

Operation

Computer software has to be "loaded" into the computer's storage (also known as memory and 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.

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.

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 impossible if done by 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.

Quality and reliability

Software reliability considers the errors, faults, and failures related to the creation and operation of software. A lot of the quality and reliability of a program has to do with the Application software being written for a specific System software. One example is that an application for an older System software may not work on a newer one.

Software architecture

The software architecture of a system comprises its software components, their external properties, and their relationships with one another. The term also refers to documentation of a system's software architecture.[2]

History

The origins of software architecture as a concept were first identified in the research work of Edsger Dijkstra in 1968, and David Parnas in the early 1970s. The scientists emphasized that the structure of a software system matters and getting the structure right is critical.[3] The study of the field increased in popularity since the early 1990s, with research work concentrating on architectural styles (patterns), architecture description languages, architecture documentation, and formal methods.[4]

Mary Shaw and David Garlan of Carnegie Mellon wrote a book titled, Software Architecture: Perspectives on an Emerging Discipline in 1996, which brought forward the concepts in Software Architecture, such as components, connectors, styles, and so on. UCI's Institute for Software Research's efforts in software architecture research is directed primarily in architectural styles, architecture description languages, and dynamic architectures.

Describing architectures

Architecture description languages

Architecture Description Languages (ADLs) are used to describe a Software Architecture. Several different ADLs have been developed by different organizations, including Wright (developed by Carnegie Mellon), Acme (developed by Carnegie Mellon), xADL (developed by UCI), Darwin (developed by Imperial College London), and DAOP-ADL (developed by University of Málaga). Common elements of an ADL are component, connector and configuration.

Views

Software architecture is commonly organized in views,[5] which are analogous to the different types of blueprints made in building architecture.

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.

Proprietary software

Proprietary software is software that has restrictions on using and copying it, usually enforced by a proprietor. The prevention of use, copying, or modification can be achieved by legal or technical means. Technical means include releasing machine-readable binaries only, and withholding the human-readable source code. Legal means can involve software licensing, copyright, and patent law. Proprietary software can be sold for money as commercial software or available at zero-price as freeware. The monopoly provided by proprietary software allows a distributor of commercial copies to charge any price for those copies. Distributors of proprietary software have more control over what users can do with the software than nonproprietary software.

Free software

Free software, as defined by the Free Software Foundation, is software which can be used, copied, studied, modified, and redistributed without restriction. Freedom from such restrictions is central to the concept, with the opposite of free software being proprietary software (a distinction unrelated to whether a fee is charged). The usual way for software to be distributed as free software is for the software to be licensed to the recipient with a free software license (or be in the public domain), and the source code of the software to be made available (for a compiled language). Most free software is distributed online without charge, or off-line at the marginal cost of distribution, but this is not required, and people may sell copies for any price.

To help distinguish libre (freedom) software from gratis (zero price) software, Richard Stallman, founder of the free software movement, developed the following explanation: "Free software is a matter of liberty, not price. To understand the concept, you should think of 'free' as in 'free speech', not as in 'free beer.'" More specifically, free software means that computer users have the freedom to cooperate with whom they choose, and to control the software they use.

Open-source software

Open-source software is computer software whose source code is available under a copyright license that permits users to study, change, and improve the software, and to redistribute it in modified or unmodified form. It is the most prominent example of open source development.

In 1998, a group of individuals advocated that the term "free software" be replaced by open-source software (OSS) as an expression which is less ambiguous and more comfortable for the corporate world. Software developers may want to publish their software with an open-source software license, so that anybody may also develop the same software or understand how it works. Open-source software generally allows anybody to make a new version of the software, port it to new operating systems and processor architectures, share it with others or market it. The aim of open source is to let the product be more understandable, modifiable, duplicable, reliable, or simply accessible, while it is still marketable.

The Open Source Definition, notably, presents an open-source philosophy, and further defines a boundary on the usage, modification and redistribution of open-source software. Software licenses grant rights to users which would otherwise be prohibited by copyright. These include rights on usage, modification and redistribution. Several open-source software licenses have qualified within the boundary of the Open Source Definition. The most prominent example is the popular GNU General Public License (GPL). While open source presents a way to broadly make the sources of a product publicly accessible, the open-source licenses allow the authors to fine tune such access.

Freeware

Freeware is copyrighted computer software which is made available for use free of charge, for an unlimited time, as opposed to shareware, in which the user is required to pay (for example, after some trial period). The only criterion for being classified as "freeware" is that the software must be made available for use for an unlimited time at no cost. The software license may impose one or more other restrictions on the type of use including personal use, individual use, non-profit use, non-commercial use, academic use, commercial use. or any combination of these. For instance, the license may be "free for personal, non-commercial use." There is some software that may be considered freeware, but that have limited distribution; that is, they may only be downloaded from a specific site, and they can not be redistributed. Hence, such software wouldn't be freely redistributable software. According to the basic definition, that software would be freeware; according to stricter definitions, they wouldn't be. Everything created with the freeware programs can be distributed at no cost (for example graphic, documents, waves made by user).

Freeware contrasts with free software, because of the different meanings of the word "free." Freeware is gratis and refers to zero price, versus free software that is described as "libre," which means free to study, change, copy, redistribute, share, and use the software in any purpose. However, many programs are both freeware and free software. They are available for zero price, provide the source code and are distributed with free software permissions. This software would exclusively be called free software to avoid confusion with freeware that usually does not come with the source code and is therefore proprietary software.

Shareware

Shareware is a marketing method for commercial software, whereby a trial version is distributed in advance and without payment, as is common for proprietary software. Shareware software is typically obtained free of charge, either by downloading from the Internet or on magazine cover-disks. A user tries out the program, and thus shareware has also been known as "try before you buy," demoware, trialware, and by many other names. A shareware program is accompanied by a request for payment, and the software's distribution license often requires such a payment. Payment is often required once a set period of time has elapsed after installation.

Notes

  1. Mike Hally, Electronic brains/Stories from the Dawn of the Computer Age (London: British Broadcasting Corporation and Granta Books, 2005, ISBN 1-86-207663-4).
  2. Len Bass, Paul Clements, and Rick Kazman, Software Architecture In Practice (Boston: Addison-Wesley, 1998, ISBN 0-201-19930-0).
  3. SEI, Origins of Software Architecture Study.
  4. Garlan & Shaw, An Introduction to Software Architecture. Retrieved May 31, 2008.
  5. Paul Clements, Felix Bachmann, Len Bass, David Garlan, James Ivers, Reed Little, Robert Nord, and Judith Stafford, Documenting Software Architectures: Views and Beyond (Boston: Addison-Wesley, 2003, ISBN 0-201-70372-6).

References
ISBN links support NWE through referral fees

  • Bass, Len, Paul Clements, and Rick Kazman: Software Architecture in Practice, Second Edition. Boston: Addison Wesley, 2003. ISBN 0321154959.
  • Kruchten, Philippe. "Architectural Blueprints: The 4+1 View Model of Software Architecture." IEEE Software. 12 (6): 42-50.
  • Niquette, Paul. Softword: Provenance for the Word "Software." ISBN 1-58922-233-4.

External links

All links retrieved January 7, 2024.

Credits

New World Encyclopedia writers and editors rewrote and completed the Wikipedia article in accordance with New World Encyclopedia standards. This article abides by terms of the Creative Commons CC-by-sa 3.0 License (CC-by-sa), which may be used and disseminated with proper attribution. Credit is due under the terms of this license that can reference both the New World Encyclopedia contributors and the selfless volunteer contributors of the Wikimedia Foundation. To cite this article click here for a list of acceptable citing formats.The history of earlier contributions by wikipedians is accessible to researchers here:

The history of this article since it was imported to New World Encyclopedia:

Note: Some restrictions may apply to use of individual images which are separately licensed.