Array ( [0] => {{Short description|Non-tangible executable component of a computer}} [1] => {{Other uses}} [2] => {{pp|small=yes}} [3] => {{More citations needed|talk=Lots of missing citations.|date=January 2022}} [4] => [5] => [[File:Operating system placement (software).svg|thumb|upright|A diagram showing how the [[User (computing)|user]] interacts with [[application software]] on a typical [[desktop computer]]. The application software layer interfaces with the [[operating system]], which in turn communicates with the [[computer hardware|hardware]]. The arrows indicate information flow.]] [6] => [7] => '''Software''' is a collection of [[computer program|program]]s and [[data (computing)|data]] that tell a computer how to perform specific tasks. Software often includes associated [[software documentation]].{{cite web |date=2020-09-03 |title=ISO/IEC 2382:2015 |url=https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/06/35/63598.html |access-date=2022-05-26 |website=ISO |language=en-US |quote=[Software includes] all or part of the programs, procedures, rules, and associated documentation of an information processing system. |archive-date=16 March 2023 |archive-url=https://web.archive.org/web/20230316023234/https://www.iso.org/standard/63598.html |url-status=live }} This is in contrast to [[computer hardware|hardware]], from which the system is built and which actually performs the work. [8] => [9] => At the [[low-level programming language|lowest programming level]], [[executable code]] consists of [[machine code|machine language]] instructions supported by an individual [[processor (computing)|processor]]—typically a [[central processing unit]] (CPU) or a [[graphics processing unit]] (GPU). Machine language consists of groups of [[Binary number|binary values]] signifying [[instruction set architecture|processor instructions]] that change the state of the computer from its preceding state. For example, an instruction may change the value stored in a particular storage location in the computer—an effect that is not directly observable to the user. An instruction [[system call|may also invoke]] one of many [[input/output|input or output operations]], for example, displaying some text on a computer screen, causing state changes that should be visible to the [[user (computing)|user]]. The processor [[instruction cycle|executes]] the instructions in the order they are provided, unless it is instructed to [[branch instruction|"jump" to a different instruction]] or is [[interrupt]]ed by the operating system. {{As of|2024}}, most [[personal computer]]s, [[smartphone]] devices, and [[server (computing)|servers]] have [[multi-core processor|processors with multiple execution units]], or [[multiprocessing|multiple processors performing computation]] together, so computing has become a much more [[concurrent computing|concurrent]] activity than in the past. [10] => [11] => The majority of software is written in [[high-level programming language]]s for example [[Python (programming language)|Python]], [[JavaScript]], [[Visual Basic]], [[Delphi (software)|Delphi]], [[Perl]], [[PHP]], [[ECMAScript]], [[Ruby (programming language)|Ruby]], [[C Sharp (programming language)|C#]], and [[Java (programming language)|Java]]. They are easier and more efficient for programmers because they are closer to [[natural language]]s than machine languages.{{cite web |title=Compiler construction |url=http://www.cs.uu.nl/education/vak.php?vak=INFOMCCO |url-status= |archive-url=https://web.archive.org/web/20131102143144/http://www.cs.uu.nl/education/vak.php?vak=INFOMCCO |archive-date=2 November 2013 |website=cs.uu.nl |df=dmy-all}} High-level languages are translated into machine language using a [[compiler]], an [[Interpreter (computing)|interpreter]], or a combination of the two. Software may also be written in a low-level [[assembly language]], for example [[C (programming language)|C]], [[C++]], [[Assembly language|Assembly]], and [[Fortran]]. Assembly languages have a strong correspondence to the computer's machine language instructions and are translated into machine language using an assembler. [12] => [13] => ==History== [14] => {{Main|History of software}} [15] => An [[algorithm]] for what would have been the first piece of software was written by [[Ada Lovelace]] in the 19th century, for the planned [[Analytical Engine]].{{Sfn|Evans|2018|p=21}} She created [[mathematical proof|proofs]] to show how the engine would calculate [[Bernoulli number]]s.{{Sfn|Evans|2018|p=21}} Because of the proofs and the algorithm, she is considered the first computer programmer.{{cite journal|last1=Fuegi|first1=J.|last2=Francis|first2=J.|date=2003|title=Lovelace & Babbage and the creation of the 1843 'notes'|journal=Annals of the History of Computing|volume=25|issue=4|pages=16–26|doi=10.1109/MAHC.2003.1253887|s2cid=40077111|url=https://pdfs.semanticscholar.org/81bb/f32d2642a7a8c6b0a867379a4e9e99d872bc.pdf|archive-url=https://web.archive.org/web/20200215003909/https://pdfs.semanticscholar.org/81bb/f32d2642a7a8c6b0a867379a4e9e99d872bc.pdf|url-status=dead|archive-date=2020-02-15}}{{Cite news |last= |first= |date=December 10, 2012 |title=Ada Lovelace honoured by Google doodle |language=en-US |newspaper=The Guardian |url=https://www.theguardian.com/technology/2012/dec/10/ada-lovelace-honoured-google-doodle |url-status=live |access-date=25 November 2018 |archive-url=https://web.archive.org/web/20181225024306/https://www.theguardian.com/technology/2012/dec/10/ada-lovelace-honoured-google-doodle |archive-date=Dec 25, 2018}} [16] => [17] => 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).{{cite journal|last1=Turing|first1=Alan Mathison|date=1936|title=On Computable Numbers, with an Application to the Entscheidungsproblem|journal=Journal of Mathematics|volume=58|pages=230–265|url=https://www.wolframscience.com/prizes/tm23/images/Turing.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://www.wolframscience.com/prizes/tm23/images/Turing.pdf |archive-date=2022-10-09 |url-status=live|access-date=2022-08-28}} This eventually led to the creation of the academic fields of computer science and software engineering; both fields study software and its creation.{{Cite web |title=What's the Difference Between Computer Science and Software Engineering? |url=https://www.evidyalam.com/2023/10/computer-science-vs-software-engineering.html |access-date=2023-10-24 |website=eVidyalam |language=en}} 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.{{Cite journal |last=Lorge Parnas |first=David |date=1984-11-01 |title=Software Engineering Principles |url=https://doi.org/10.1080/03155986.1984.11731932 |journal=INFOR: Information Systems and Operational Research |volume=22 |issue=4 |pages=303–316 |doi=10.1080/03155986.1984.11731932 |issn=0315-5986}} [18] => [19] => In 2000, Fred Shapiro, a librarian at the Yale Law School, published a letter revealing that [[John Wilder Tukey]]'s 1958 paper "The Teaching of Concrete Mathematics" contained the earliest known usage of the term "software" found in a search of [[JSTOR]]'s electronic archives, predating the [[OED|''Oxford English Dictionary'']]'s citation by two years. This led many to credit Tukey with coining the term, particularly in obituaries published that same year, although Tukey never claimed credit for any such coinage. In 1995, Paul Niquette claimed he had originally coined the term in October 1953, although he could not find any documents supporting his claim. The earliest known publication of the term "software" in an engineering context was in August 1953 by Richard R. Carhart, in a [[Rand Corporation]] Research Memorandum. [20] => [21] => ==Types== [22] => {{See also|Software categories}} [23] => [[File:Cube in Blender Editor.jpg|thumb|250px|[[Blender (software)|Blender]], a [[free software]] program]] [24] => [25] => On virtually all computer platforms, software can be grouped into a few broad categories. [26] => [27] => ===Purpose, or domain of use=== [28] => Based on the goal, computer software can be divided into: [29] => * '''[[Application software]]''' uses the computer system to perform special functions beyond the basic operation of the computer itself. There are many different types of application software because the range of tasks that can be performed with a modern computer is so large—see [[list of software]]. [30] => * '''[[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 to provide a platform for running application software,{{cite web|url=http://home.olemiss.edu/~misbook/sfsysfm.htm|title=System Software|publisher=The University of Mississippi|archive-url=https://web.archive.org/web/20010530092843/http://home.olemiss.edu/~misbook/sfsysfm.htm|archive-date=30 May 2001|url-status=dead|df=dmy-all}} and it includes the following: [31] => ** '''[[Operating system]]s''' are essential collections of software that manage resources and provide common services for other software that runs "on top" of them. [[Supervisory program]]s, [[boot loader]]s, [[shell (computing)|shells]] and [[window system]]s are 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. [32] => ** '''[[Device driver]]s''' 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. [33] => ** '''[[Software utility|Utilities]]''' are computer programs designed to assist users in the maintenance and care of their computers. [34] => * '''[[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 joke]]s. [35] => [36] => ===Nature or domain of execution=== [37] => * [[Desktop application]]s such as [[web browser]]s and [[Microsoft Office]] and [[LibreOffice]] and [[WordPerfect]], as well as [[smartphone]] and [[Tablet computer|tablet]] applications (called "[[mobile app|apps]]").{{cite web |date=2011-01-08 |title='App' voted 2010 word of the year by the American Dialect Society (UPDATED) |url=http://www.americandialect.org/app-voted-2010-word-of-the-year-by-the-american-dialect-society-updated |url-status=live |archive-url=https://web.archive.org/web/20150905032056/http://www.americandialect.org/app-voted-2010-word-of-the-year-by-the-american-dialect-society-updated |archive-date=2015-09-05 |access-date=2012-01-28 |publisher=American Dialect Society}} [38] => * [[JavaScript]] scripts are pieces of software traditionally embedded in [[web page]]s that are run directly inside the web browser when a web page is loaded without the need for a web browser plugin. Software written in other programming languages can also be run within the web browser if the software is either translated into JavaScript, or if a web browser plugin that supports that language is installed; the most common example of the latter is [[ActionScript]] scripts, which are supported by the [[Adobe Flash]] plugin.{{Cite web |date=2007-09-16 |title=Press Release |url=https://web.archive.org/web/20070916144913/https://wp.netscape.com/newsref/pr/newsrelease67.html |access-date=2024-03-17 |website=web.archive.org}} [39] => * [[Server software]], including: [40] => ** [[Web application]]s, which usually run on the [[web server]] and output dynamically generated web pages to web browsers, using e.g. [[PHP]], [[Java (programming language)|Java]], [[ASP.NET]], or even [[Node.js|JavaScript that runs on the server]]. In modern times these commonly include some JavaScript to be run in the web browser as well, in which case they typically run partly on the server, partly in the web browser.{{cite web |title=Usage Statistics of JavaScript as Client-side Programming Language on Websites |url=https://w3techs.com/technologies/details/cp-javascript |access-date=2024-02-27 |website=W3Techs}} [41] => * [[Plug-in (computing)|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.{{Cite web |title=What is a Plugin? |url=https://www.computerhope.com/jargon/p/plugin.htm |url-status=live |access-date=2022-01-26 |website=Computer Hope |date=June 6, 2021 |language=en-US |archive-date=26 January 2022 |archive-url=https://web.archive.org/web/20220126171421/https://www.computerhope.com/jargon/p/plugin.htm }} [42] => * [[Embedded software]] resides as [[firmware]] within [[embedded system]]s, devices dedicated to a single use or a few uses such as [[car]]s and [[television]]s (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).{{cite web|title=Embedded Software—Technologies and Trends|url=http://www.computer.org/csdl/mags/so/2009/03/mso2009030014.html|publisher=IEEE Computer Society|date=May–June 2009|access-date=6 November 2013|url-status=live|archive-url=https://web.archive.org/web/20131028045823/http://www.computer.org/csdl/mags/so/2009/03/mso2009030014.html|archive-date=28 October 2013|df=dmy-all}} 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 system]]s, 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).{{cite web |title=Tessel 2... Leverage all the libraries of Node.JS to create useful devices in minutes with Tessel. |url=https://tessel.io/ |url-status=live |archive-url=https://web.archive.org/web/20210526212559/https://tessel.io/ |archive-date=2021-05-26 |access-date=2021-05-08 |website=tessel.io}}{{cite web |title=Node.js Raspberry Pi GPIO Introduction |url=https://www.w3schools.com/nodejs/nodejs_raspberrypi_gpio_intro.asp |url-status=live |archive-url=https://web.archive.org/web/20210813192938/https://www.w3schools.com/nodejs/nodejs_raspberrypi_gpio_intro.asp |archive-date=2021-08-13 |access-date=2020-05-03 |website=w3schools.com}}{{cite web |title=Espruino – JavaScript for Microcontrollers |url=https://www.espruino.com/ |url-status=live |archive-url=https://web.archive.org/web/20200501010722/https://www.espruino.com/ |archive-date=2020-05-01 |access-date=2020-05-03 |website=espruino.com}} [43] => * [[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.{{cite journal|last1=Landskov|first1=D.|last2=Davidson|first2=S.|last3=Shriver|first3=B.|last4=Mallett|first4=P.W.|date=1980|title=Local microcode compaction techniques|journal=ACM Computing Surveys|volume=12|issue=3|pages=261–294|doi=10.1145/356819.356822 |s2cid=16238043 }} 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.{{Citation needed|date=September 2021}} [44] => [45] => ===Programming tools=== [46] => {{Main|Programming tool}} [47] => Programming tools are also software in the form of programs or applications that [[software developer|developer]]s use to create, [[Debugging|debug]], [[Software maintenance|maintain]], or otherwise [[Technical support|support]] software.{{Cite web |title=What is a Programming Tool? - Definition from Techopedia |url=http://www.techopedia.com/definition/8996/programming-tool |url-status=live |access-date=2022-01-26 |website=Techopedia.com |date=2 July 2020 |language=en-US |archive-date=26 January 2022 |archive-url=https://web.archive.org/web/20220126183105/https://www.techopedia.com/definition/8996/programming-tool }}{{better source needed|date=June 2022}} [48] => [49] => Software is written in one or more programming languages; there are many [[programming language]]s 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 [[compiler]]s, [[debugger]]s, [[interpreter (computing)|interpreters]], [[linker (computing)|linkers]], and [[text editor]]s, 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.{{Cite book |url=https://link.springer.com/book/10.1007/978-3-031-11806-7 |title=Programming Language Design and Implementation |language=en |doi=10.1007/978-3-031-11806-7}} IDEs may do this by either invoking the relevant individual tools or by re-implementing their functionality in a new way.{{Citation needed|date=September 2021}} An IDE can make it easier to do specific tasks, such as searching for files in a particular project.{{Cite web |title=What is an IDE? - Integrated Development Environment Explained - AWS |url=https://aws.amazon.com/what-is/ide/ |access-date=2024-04-25 |website=Amazon Web Services, Inc. |language=en-US}} Many programming language implementations provide the option of using both individual tools or an IDE.{{Citation needed|date=September 2021}} [50] => [51] => ==Topics== [52] => ===Architecture=== [53] => {{See also|Software architecture}} [54] => People who use modern general purpose computers (as opposed to [[embedded system]]s, [[analog computer]]s and [[supercomputer]]s) usually see three layers of software performing a variety of tasks: platform, application, and user software.{{Citation needed|date=September 2021}} [55] => * '''Platform software''': The [[computing platform|platform]] includes the [[firmware]], [[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. On a [[Personal computer|PC]] one will usually have the ability to change the platform software. [56] => * '''Application software''': [[Application software]] is what most people think of when they think of software.{{Citation needed|date=September 2021}} Typical examples include office suites and [[video game]]s. 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.{{Cite web |last=Indeed Editorial Team |date=December 28, 2022 |title=What Is Application Software? Definition, Types and FAQs |url=https://www.indeed.com/career-advice/career-development/what-is-application-software |website=Indeed}} [57] => * '''User-written software''': [[End-user development]] tailors systems to meet users' specific needs. User software includes spreadsheet templates and [[word processor]] templates.{{Citation needed|date=September 2021}} Even email filters are a kind of user software. Users create this software themselves and often overlook how important it is.{{Citation needed|date=September 2021}} 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.{{Citation needed|date=September 2021}} [58] => [59] => ===Execution=== [60] => {{Main|Execution (computing)}} [61] => Computer software has to be "loaded" into the computer's [[computer storage|storage]] (such as the [[hard drive]] or [[Computer memory|memory]]). Once the software has loaded, the computer is able to ''execute'' the software. This involves passing instructions from the application software, through the system software, to the hardware which ultimately receives the instruction as machine code. Each instruction causes the computer to carry out an operation—moving data, carrying out a [[computation]], or altering the [[control flow]] of instructions.{{Citation needed|date=September 2021}} [62] => [63] => 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.{{Citation needed|date=September 2021}} 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.{{Citation needed|date=September 2021}} [74] => [75] => ===Quality and reliability=== [76] => {{Main|Software quality|Software testing}} [77] => Software quality is very important, especially for [[commercial software|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 "[[software bug|bugs]]" which are often discovered during alpha and beta testing.{{Citation needed|date=September 2021}} Software is often also a victim to what is known as [[software aging]], the progressive performance degradation resulting from a combination of unseen bugs.{{Citation needed|date=September 2021}} [78] => [79] => 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).{{cite web |date=2018-05-09 |title=scripting intelligence book examples |url=https://github.com/mark-watson/scripting-intelligence-book-examples/blob/master/part1/wikipedia_text/software.txt |url-status=live |archive-url=https://web.archive.org/web/20151106154317/https://github.com/mark-watson/scripting-intelligence-book-examples/blob/master/part1/wikipedia_text/software.txt |archive-date=6 November 2015 |access-date=2015-11-06 |website=[[GitHub]] |df=dmy-all}} In the [[Waterfall model|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.{{Citation needed|date=September 2021}} 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.{{Citation needed|date=September 2021}} Programs containing command software enable hardware engineering and system operations to function much easier together.{{Cite web |title=What is System Software? – Definition from WhatIs.Com |url=https://www.techtarget.com/whatis/definition/system-software |access-date=2023-02-27 |website=WhatIs.com |language=en |archive-date=27 February 2023 |archive-url=https://web.archive.org/web/20230227150703/https://www.techtarget.com/whatis/definition/system-software |url-status=live }} [80] => [81] => ===License=== [82] => {{Main|Software license}} [83] => The software's license gives the user the right to use the software in the licensed environment, and in the case of [[free software license]]s, also grants other rights such as the right to make copies.{{Cite web |title=What is a Software License? Everything You Need to Know |url=https://www.techtarget.com/searchcio/definition/software-license |access-date=2023-02-27 |website=CIO |language=en |archive-date=27 February 2023 |archive-url=https://web.archive.org/web/20230227150704/https://www.techtarget.com/searchcio/definition/software-license |url-status=live }} [84] => [85] => [[Proprietary software]] can be divided into two types: [86] => * [[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.{{Cite web |title=Freeware vs Shareware - Difference and Comparison {{!}} Diffen |url=https://www.diffen.com/difference/Freeware_vs_Shareware |url-status=live |access-date=2022-01-26 |website=www.diffen.com |language=en |archive-date=26 January 2022 |archive-url=https://web.archive.org/web/20220126171419/https://www.diffen.com/difference/Freeware_vs_Shareware }} [87] => * software available for a fee, which can only be legally used on purchase of a license.{{Cite journal |last1=Morin |first1=Andrew |last2=Urban |first2=Jennifer |last3=Sliz |first3=Piotr |date=2012-07-26 |title=A Quick Guide to Software Licensing for the Scientist-Programmer |journal=PLOS Computational Biology |language=en |volume=8 |issue=7 |pages=e1002598 |doi=10.1371/journal.pcbi.1002598 |issn=1553-7358 |pmc=3406002 |pmid=22844236|bibcode=2012PLSCB...8E2598M |doi-access=free }} [88] => [89] => [[Open-source software]] comes with a free software license, granting the recipient the rights to modify and redistribute the software.{{Cite web |title=Open source software explained |url=https://www.ionos.ca/digitalguide/server/know-how/what-is-open-source/ |url-status=live |access-date=2022-01-26 |website=IONOS Digitalguide |language=en-US |archive-date=26 January 2022 |archive-url=https://web.archive.org/web/20220126171422/https://www.ionos.ca/digitalguide/server/know-how/what-is-open-source/ }} [90] => [91] => ===Patents=== [92] => {{Main|Software patent|Software patent debate}} [93] => Software patents, like other types of [[patent]]s, 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.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. [94] => [95] => 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.{{Citation needed|date=September 2021}} 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.{{Citation needed|date=September 2021}} 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.{{Citation needed|date=September 2021}} [96] => [97] => ==Design and implementation== [98] => {{Main|Software development|Computer programming|Software engineering}} [99] => Design and implementation of software vary depending on the complexity of the software. For instance, the design and creation of [[Microsoft Word]] took much more time than designing and developing [[Microsoft Notepad]] because the former has much more basic functionality.{{Citation needed|date=September 2021}} [100] => [101] => Software is usually developed in [[integrated development environment]]s (IDE) like [[Eclipse (software)|Eclipse]], [[IntelliJ IDEA|IntelliJ]] and [[Microsoft Visual Studio]] that can simplify the process and [[compiler|compile]] the software.{{cite web |last=Constantin |first=Alin |title=Microsoft Source Code Control Interface |url=http://alinconstantin.dtdns.net/webdocs/scc/MSSCCI.htm |url-status=dead |archive-url=https://web.archive.org/web/20080218111934/http://alinconstantin.dtdns.net/webdocs/scc/MSSCCI.htm |archive-date=February 18, 2008 |access-date=January 3, 2008 |website=Alin Constantin}} As noted in a different section, software is usually created on top of existing software and the [[application programming interface]] (API) that the underlying software provides like [[GTK+]], JavaBeans or [[Swing (Java)|Swing]].{{Citation needed|date=September 2021}} Libraries (APIs) can be categorized by their purpose. For instance, the [[Spring Framework]] is used for implementing [[enterprise application]]s, the [[Windows Forms]] library is used for designing graphical user interface (GUI) applications like Microsoft Word, and [[Windows Communication Foundation]] is used for designing [[web service]]s.{{Citation needed|date=September 2021}} When a program is designed, it relies upon the API. For instance, a Microsoft Windows desktop application might call API functions in the [[.NET Framework|.NET]] Windows Forms library like ''Form1.Close()'' and ''Form1.Show()''{{cite web |title=MSDN Library |url=http://msdn.microsoft.com/en-us/library/default.aspx |url-status=live |archive-url=https://web.archive.org/web/20100611204810/http://msdn.microsoft.com/en-us/library/default.aspx |archive-date=11 June 2010 |access-date=2010-06-14 |website=Microsoft |df=dmy-all}} to close or open the application. Without these APIs, the programmer needs to write these functionalities entirely themselves. Companies like [[Oracle Corporation|Oracle]] and [[Microsoft]] provide their own APIs so that many applications are written using their [[library (computing)|software libraries]] that usually have numerous APIs in them.{{Citation needed|date=September 2021}} [102] => [103] => [[Data structure]]s such as [[hash table]]s, [[array data type|arrays]], and [[binary tree]]s, and [[algorithm]]s such as [[quicksort]], can be useful for creating software. [104] => [105] => Computer software has special economic characteristics that make its design, creation, and distribution different from most other economic goods.{{Specify|Which characteristics?|date=May 2012}}{{cite journal |author=v. Engelhardt, Sebastian |year=2008 |url=https://ideas.repec.org/p/jrp/jrpwrp/2008-045.html |title=The Economic Properties of Software |journal=Jena Economic Research Papers |volume=2 |issue=2008–045 |url-status=live |archive-url=https://web.archive.org/web/20160105145954/https://ideas.repec.org/p/jrp/jrpwrp/2008-045.html |archive-date=5 January 2016 |df=dmy-all }}{{cite web |last=Kaminsky |first=Dan |date=1999-03-02 |title=Why Open Source Is The Optimum Economic Paradigm for Software |url=http://dankaminsky.com/1999/03/02/69/ |url-status=live |archive-url=https://web.archive.org/web/20120522001231/http://dankaminsky.com/1999/03/02/69/ |archive-date=22 May 2012 |access-date=2021-11-19 |website=dankaminsky.com |language=en-US |df=dmy-all}} [106] => [107] => A person who creates software is called a [[programmer]], [[software engineer]] or software developer, terms that all have a similar meaning. More informal terms for programmer also exist such as "coder" and "hacker"{{Spaced ndash}}although use of the latter word may cause confusion, because it is more often used to mean [[security hacker|someone who illegally breaks into computer systems]]. [108] => [109] => ==See also== [110] => * [[Computer program]] [111] => * [[Independent software vendor]] [112] => * [[Open-source software]] [113] => * [[Outline of software]] [114] => * [[Software asset management]] [115] => * [[Software release life cycle]] [116] => [117] => ==References== [118] => {{reflist|refs= [119] => {{cite book |author-last=Carhart |author-first=Richard |title=A survey of the current status of the electronic reliability problem |date=1953 |publisher=[[Rand Corporation]] |location=Santa Monica, CA |page=69 |url=https://www.rand.org/content/dam/rand/pubs/research_memoranda/2013/RM1131.pdf#79 |archive-url=https://ghostarchive.org/archive/20221009/https://www.rand.org/content/dam/rand/pubs/research_memoranda/2013/RM1131.pdf#79 |archive-date=2022-10-09 |url-status=live |quote=[…] It will be recalled from Sec. 1.6 that the term ''personnel'' was defined to include people who come into direct contact with the hardware, from production to field use, i.e., people who assemble, inspect, pack, ship, handle, install, operate, and maintain electronic equipment. In any of these phases personnel failures may result in unoperational gear. As with the hardware factors, there is almost no quantitative data concerning these software or human factors in reliability: How many faults are caused by personnel, why they occur, and what can be done to remove the errors. […]}} [120] => {{cite journal |author-first=John Wilder |author-last=Tukey |author-link=John Wilder Tukey |title=The Teaching of Concrete Mathematics |journal=[[American Mathematical Monthly]] |publisher=[[Taylor & Francis, Ltd.]] / [[Mathematical Association of America]] |volume=65 |issue=1 |pages=1–9, 2 |date=January 1958 |id={{CODEN|AMMYAE}} |issn=0002-9890 |doi=10.2307/2310294 |quote=[…] Today the "software" comprising the carefully planned interpretive routines, compilers, and other aspects of automative programming are at least as important to the modern electronic calculator as its "hardware" of tubes, transistors, wires, tapes, and the like. […]|jstor=2310294 }} [121] => {{citation |author-last=Niquette |author-first=R. Paul |date=2006 |title=Softword: Provenance for the Word 'Software |isbn=1-58922-233-4 |url=http://www.niquette.com/books/softword/tocsoft.html |access-date=2019-08-18 |url-status=live |archive-url=https://web.archive.org/web/20190808124650/http://www.niquette.com/books/softword/tocsoft.html |archive-date=2019-08-08}} [122] => {{cite journal |author-last=Shapiro |author-first=Fred |date=2000 |title=Origin of the Term Software: Evidence from the JSTOR Electronic Journal Archive |journal=[[IEEE Annals of the History of Computing]] |volume=22 |issue=2 |pages=69–71 |doi=10.1109/mahc.2000.887997 |url=http://computer.org/annals/an2000/pdf/a2069.pdf |access-date=2013-06-25 |url-status=dead |archive-url=https://web.archive.org/web/20030605004419/http://computer.org/annals/an2000/pdf/a2069.pdf |archive-date=2003-06-05}} [123] => {{cite news |title=John Tukey, 85, Statistician; Coined the Word 'Software' |author-last=Leonhardt |author-first=David |newspaper=[[The New York Times]] |date=2000-07-28 |url=https://www.nytimes.com/2000/07/28/us/john-tukey-85-statistician-coined-the-word-software.html |access-date=2012-09-24 |archive-date=16 June 2021 |archive-url=https://web.archive.org/web/20210616140125/http://www.nytimes.com/2000/07/28/us/john-tukey-85-statistician-coined-the-word-software.html |url-status=live }} [124] => {{cite book |author-first=Nelson H. F. |author-last=Beebe |title=The Mathematical-Function Computation Handbook - Programming Using the MathCW Portable Software Library |chapter=Chapter I - Integer arithmetic |date=2017-08-22 |location=Salt Lake City, UT, US |publisher=[[Springer International Publishing AG]] |edition=1 |lccn=2017947446 |isbn=978-3-319-64109-6 |doi=10.1007/978-3-319-64110-2 |pages=969, 1035|s2cid=30244721 }} [125] => }} [126] => [127] => ===Sources=== [128] => * {{Cite book|url=https://books.google.com/books?id=C8ouDwAAQBAJ&q=9780735211759&pg=PP1|title=Broad Band: The Untold Story of the Women Who Made the Internet|last=Evans|first=Claire L.|publisher=Portfolio/Penguin|year=2018|isbn=9780735211759|location=New York}} [129] => [130] => ==External links== [131] => * [https://www.britannica.com/technology/software Software] at ''[[Encyclopædia Britannica]]'' [132] => * {{curlie|Computers/Software}} [133] => {{subject bar|Free and open-source software|auto=1}} [134] => [135] => {{Software digital distribution platforms|state=collapsed}} [136] => {{Authority control}} [137] => {{Use dmy dates|date=May 2017}} [138] => [139] => [[Category:Software| ]] [] => )
good wiki

Software

Software is a set of instructions or programs that tell a computer how to perform specific tasks. It is a general term that encompasses everything from operating systems to applications and games.

More about us

About

It is a general term that encompasses everything from operating systems to applications and games. Software can be categorized into two main types: system software and application software. System software refers to the programs that operate the computer hardware, manages resources, and provides common services for other software. This includes operating systems like Windows, macOS, and Linux, as well as device drivers, utilities, and programming languages. Application software, on the other hand, is designed for individuals or organizations to perform specific tasks. This includes word processors, spreadsheets, graphic design software, video editing tools, and many other applications that cater to different needs and industries. Software development involves the process of designing, coding, testing, and maintaining software. It requires programmers and developers to create software from scratch or modify existing programs to meet specific requirements. The development process often follows methodologies such as waterfall or agile, ensuring a systematic and efficient approach. Software piracy is a prevalent issue in the software industry, where unlicensed copies of software are distributed or used without permission from the copyright owner. This can result in significant financial loss for software developers and companies. Open-source software is an alternative to proprietary software, where the source code is openly available and can be modified by users. This promotes collaboration, transparency, and innovation, as developers can contribute to improving the software and customize it to their needs. The software industry has evolved rapidly over the years, with advancements like cloud computing, mobile applications, artificial intelligence, and virtual reality shaping the way software is developed and used. The demand for software professionals continues to grow, as technology becomes more integrated into various aspects of our lives.

Expert Team

Vivamus eget neque lacus. Pellentesque egauris ex.

Award winning agency

Lorem ipsum, dolor sit amet consectetur elitorceat .

10 Year Exp.

Pellen tesque eget, mauris lorem iupsum neque lacus.