This article needs additional citations for verification. (January 2022)
Software is a set of
The majority of software is written in high-level programming languages. They are easier and more efficient for programmers because they are closer to natural languages than machine languages. High-level languages are translated into machine language using a compiler, an interpreter, or a combination of the two. Software may also be written in a low-level assembly language that has a strong correspondence to the computer's machine language instructions and is translated into machine language using an assembler.
The first theory about software, prior to the creation of computers as we know them today, was proposed by Alan Turing in his 1936 essay, On Computable Numbers, with an Application to the Entscheidungsproblem (decision problem). This eventually led to the creation of the academic fields of computer science and software engineering; both fields study software and its creation. Computer science is the theoretical study of computer and software (Turing's essay is an example of computer science), whereas software engineering is the application of engineering principles to development of software.
In 2000, Fred Shapiro, a librarian at the Yale Law School, published a letter revealing that
On virtually all computer platforms, software can be grouped into a few broad categories.
Purpose, or domain of use
Based on the goal, computer software can be divided into:
- list of software.
- System software manages hardware behaviour, as to provide basic functionalities that are required by users, or for other software to run properly, if at all. System software is also designed for providing a platform for running application software, and it includes the following:
- window systemsare core parts of operating systems. In practice, an operating system comes bundled with additional software (including application software) so that a user can potentially do some work with a computer that only has one operating system.
- Device drivers operate or control a particular type of device that is attached to a computer. Each device needs at least one corresponding device driver; because a computer typically has at minimum at least one input device and at least one output device, a computer typically needs more than one device driver.
- Utilitiesare computer programs designed to assist users in the maintenance and care of their computers.
- Malicious software, or malware, is software that is developed to harm or disrupt computers. Malware is closely associated with computer-related crimes, though some malicious programs may have been designed as practical jokes.
Nature or domain of execution
- Server software, including:
- Plugins and extensions are software that extends or modifies the functionality of another piece of software, and require that software be used in order to function.
- Embedded software resides as firmware within embedded systems, devices dedicated to a single use or a few uses such as cars and televisions (although some embedded devices such as wireless chipsets can themselves be part of an ordinary, non-embedded computer system such as a PC or smartphone). In the embedded system context there is sometimes no clear distinction between the system software and the application software. However, some embedded systems run embedded operating systems, and these systems do retain the distinction between system software and application software (although typically there will only be one, fixed application which is always run).
- Microcode is a special, relatively obscure type of embedded software which tells the processor itself how to execute machine code, so it is actually a lower level than machine code. It is typically proprietary to the processor manufacturer, and any necessary correctional microcode software updates are supplied by them to users (which is much cheaper than shipping replacement processor hardware). Thus an ordinary programmer would not expect to ever have to deal with it.
Programming tools are also software in the form of programs or applications that
Software is written in one or more programming languages; there are many programming languages in existence, and each has at least one implementation, each of which consists of its own set of programming tools. These tools may be relatively self-contained programs such as compilers, debuggers, interpreters, linkers, and text editors, that can be combined to accomplish a task; or they may form an integrated development environment (IDE), which combines much or all of the functionality of such self-contained tools. IDEs may do this by either invoking the relevant individual tools or by re-implementing their functionality in a new way. An IDE can make it easier to do specific tasks, such as searching in files in a particular project. Many programming language implementations provide the option of using both individual tools or an IDE.
People who use modern general purpose computers (as opposed to embedded systems, analog computers and supercomputers) usually see three layers of software performing a variety of tasks: platform, application, and user software.
- Platform software: The
- Application software: video games. Application software is often purchased separately from computer hardware. Sometimes applications are bundled with the computer, but that does not change the fact that they run as independent applications. Applications are usually independent programs from the operating system, though they are often tailored for specific platforms. Most users think of compilers, databases, and other "system software" as applications.
- User-written software: End-user development tailors systems to meet users' specific needs. User software includes spreadsheet templates and word processor templates. Even email filters are a kind of user software. Users create this software themselves and often overlook how important it is. Depending on how competently the user-written software has been integrated into default application packages, many users may not be aware of the distinction between the original packages, and what has been added by co-workers.
Computer software has to be "loaded" into the computer's
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; 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.
Quality and reliability
Software quality is very important, especially for commercial and system software. If software is faulty, it can delete a person's work, crash the computer and do other unexpected things. Faults and errors are called "bugs" which are often discovered during alpha and beta testing. Software is often also a victim to what is known as software aging, the progressive performance degradation resulting from a combination of unseen bugs.
Many bugs are discovered and fixed through software testing. However, software testing rarely—if ever—eliminates every bug; some programmers say that "every program has at least one more bug" (Lubarsky's Law). In the waterfall method of software development, separate testing teams are typically employed, but in newer approaches, collectively termed agile software development, developers often do all their own testing, and demonstrate the software to users/clients regularly to obtain feedback. Software can be tested through unit testing, regression testing and other methods, which are done manually, or most commonly, automatically, since the amount of code to be tested can be large. Programs containing command software enable hardware engineering and system operations to function much easier together.
The software's license gives the user the right to use the software in the licensed environment, and in the case of
Proprietary software can be divided into two types:
- freeware, which includes the category of "free trial" software or "freemium" software (in the past, the term shareware was often used for free trial/freemium software). As the name suggests, freeware can be used for free, although in the case of free trials or freemium software, this is sometimes only true for a limited period of time or with limited functionality.
- software available for a fee, which can only be legally used on purchase of a license.
Software patents, like other types of patents, are theoretically supposed to give an inventor an exclusive, time-limited license for a detailed idea (e.g. an algorithm) on how to implement a piece of software, or a component of a piece of software. Ideas for useful things that software could do, and user requirements, are not supposed to be patentable, and concrete implementations (i.e. the actual software packages implementing the patent) are not supposed to be patentable either—the latter are already covered by copyright, generally automatically. So software patents are supposed to cover the middle area, between requirements and concrete implementation. 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—although since all useful software has effects on the physical world, this requirement may be open to debate. Meanwhile, American copyright law was applied to various aspects of the writing of the software code.
Software patents are controversial in the software industry with many people holding different views about them. One of the sources of controversy is that the aforementioned split between initial ideas and patent does not seem to be honored in practice by patent lawyers—for example the patent for aspect-oriented programming (AOP), which purported to claim rights over any programming tool implementing the idea of AOP, howsoever implemented. Another source of controversy is the effect on innovation, with many distinguished experts and companies arguing that software is such a fast-moving field that software patents merely create vast additional litigation costs and risks, and actually retard innovation. In the case of debates about software patents outside the United States, the argument has been made that large American corporations and patent lawyers are likely to be the primary beneficiaries of allowing or continue to allow software patents.
Design and implementation
Design and implementation of software vary depending on the complexity of the software. For instance, the design and creation of
Software is usually developed in
A person who creates software is called a
- Computer program
- Independent software vendor
- Open-source software
- Outline of software
- Software asset management
- Software release life cycle
- "ISO/IEC 2382:2015". ISO. 3 September 2020. Archived from the original on 16 March 2023. Retrieved 26 May 2022.
[Software includes] all or part of the programs, procedures, rules, and associated documentation of an information processing system.
- "Compiler construction". cs.uu.nl. Archived from the original on 2 November 2013.
- Evans 2018, p. 21.
- "Ada Lovelace honoured by Google doodle". The Guardian. 10 December 2012. Archived from the original on 25 December 2018. Retrieved 25 November 2018.
- Turing, Alan Mathison (1936). "On Computable Numbers, with an Application to the Entscheidungsproblem" (PDF). Journal of Mathematics. 58: 230–265. Archived (PDF) from the original on 9 October 2022. Retrieved 28 August 2022.
- Leonhardt, David (28 July 2000). "John Tukey, 85, Statistician; Coined the Word 'Software'". The New York Times. Archived from the original on 16 June 2021. Retrieved 24 September 2012.
- "System Software". The University of Mississippi. Archived from the original on 30 May 2001.
- Hope, Computer. "What is a Plugin?". www.computerhope.com. Archived from the original on 26 January 2022. Retrieved 26 January 2022.
- "Embedded Software—Technologies and Trends". IEEE Computer Society. May–June 2009. Archived from the original on 28 October 2013. Retrieved 6 November 2013.
- "What is a Programming Tool? - Definition from Techopedia". Techopedia.com. 2 July 2020. Archived from the original on 26 January 2022. Retrieved 26 January 2022.
- "scripting intelligence book examples". GitHub. 9 May 2018. Archived from the original on 6 November 2015. Retrieved 6 November 2015.
- "What is System Software? – Definition from WhatIs.Com". WhatIs.com. Archived from the original on 27 February 2023. Retrieved 27 February 2023.
- "What is a Software License? Everything You Need to Know". CIO. Archived from the original on 27 February 2023. Retrieved 27 February 2023.
- "Freeware vs Shareware - Difference and Comparison | Diffen". www.diffen.com. Archived from the original on 26 January 2022. Retrieved 26 January 2022.
- "Open source software explained". IONOS Digitalguide. Archived from the original on 26 January 2022. Retrieved 26 January 2022.
- 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.
- "MSDN Library". microsoft.com. Archived from the original on 11 June 2010. Retrieved 14 June 2010.
- v. Engelhardt, Sebastian (2008). "The Economic Properties of Software". Jena Economic Research Papers. 2 (2008–045). Archived from the original on 5 January 2016.
- Kaminsky, Dan (2 March 1999). "Why Open Source Is The Optimum Economic Paradigm for Software". dankaminsky.com. Archived from the original on 22 May 2012. Retrieved 19 November 2021.
- Evans, Claire L. (2018). Broad Band: The Untold Story of the Women Who Made the Internet. New York: Portfolio/Penguin. ISBN 9780735211759.