software for other uses see software disambiguation a diagram showing how the user interacts with application software on a typical desktop computerthe application software layer interfaces with the operating system which in turn communicates with the hardware the arrows indicate information flow computer software or simply software is a collection of data or computer instructions that tell the computer how to work this is in contrast to physical hardware from which the system is built and actually performs the work in computer science and software engineering computer software is all information processed by computer systems programs and data computer software includes computer programs libraries and related nonexecutable data such as online documentation or digital media computer hardware and software require each other and neither can be realistically used on its own at the lowest programming level most personal computers smartphone devices and servers have processors with multiple execution units or multiple processors performing computation together and computing has become a much more concurrent activity than in the past the majority of software is written in highlevel programming languages they are easier and more efficient for programmers because they are closer to natural languages than machine languages highlevel languages are translated into machine language using a compiler or an interpreter or a combination of the two software may also be written in a lowlevel assembly language which has strong correspondence to the computers machine language instructions and is translated into machine language using an assembler history history of software an outline 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 however neither the analytical engine nor any software for it were ever created the first theory about softwareprior to creation of computers as we know them todaywas proposed by alan turing in his 1935 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 turings essay is an example of computer science whereas software engineering is the application of engineering and development of software however prior to 1946 software was not yet the programs stored in the memory of storedprogram digital computers as we now understand it the first electronic computing devices were instead rewired in order to reprogram them types see also list of software categories on virtually all computer platforms software can be grouped into a few broad categories purpose or domain of use part of a series onecommerce online goods and services digital distribution ebooks software streaming media retail services banking dvdbymail flower delivery food ordering grocery pharmacy travel marketplace services advertising auctions comparison shopping social commerce trading communities wallet mobile commerce payment ticketing customer service call centre help desk live support software eprocurement purchasetopayvte based on the goal computer software can be divided into application software which is software that uses the computer system to perform special functions or provide entertainment 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 largesee list of software system software which is software that directly operates the computer hardware to provide basic functionality needed by users and other software and to provide a platform for running application software system software includes operating systems which are essential collections of software that manage resources and provides common services for other software that runs on top of them supervisory programs boot loaders shells and window systems 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 device drivers which 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 utilities which are computer programs designed to assist users in the maintenance and care of their computers malicious software or malware which is software that is developed to harm and disrupt computers as such malware is undesirable malware is closely associated with computerrelated crimes though some malicious programs may have been designed as practical jokes nature or domain of execution desktop applications such as web browsers and microsoft office as well as smartphone and tablet applications called apps there is a push in some parts of the software industry to merge desktop applications with mobile apps to some extent windows 8 and later ubuntu touch tried to allow the same style of application user interface to be used on desktops laptops and mobiles javascript scripts are pieces of software traditionally embedded in web pages 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 server software including web applications which usually run on the web server and output dynamically generated web pages to web browsers using eg php java aspnet or even 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 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 nonembedded 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 programming tool programming tools are also software in the form of programs or applications that software developers also known as programmers coders hackers or software engineers use to create debug maintain ie improve or fix or otherwise support software 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 selfcontained programs such as compilers debuggers interpreters linkers and text editors that can be combined together to accomplish a task or they may form an integrated development environment ide which combines much or all of the functionality of such selfcontained tools ides may do this by either invoking the relevant individual tools or by reimplementing 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 topics architecture see also software architecture users often see things differently from programmers 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 platform includes the firmware device drivers an operating system and typically a graphical user interface which in total allow a user to interact with the computer and its peripherals associated equipment platform software often comes bundled with the computer on a pc one will usually have the ability to change the platform software application software application software or applications are what most people think of when they think of software typical examples include office suites and video games application software is often purchased separately from computer hardware sometimes applications are bundled with the computer but that does not change the fact that they run as independent applications applications are 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 userwritten software enduser development tailors systems to meet users specific needs user software include 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 userwritten 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 coworkers execution execution computing computer software has to be loaded into the computers storage such as the hard drive or 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 operationmoving 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 highspeed 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 quality and reliability software quality software testing and software reliability software quality is very important especially for commercial and system software like microsoft office microsoft windows and linux if software is faulty buggy it can delete a persons 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 eliminated debugged through software testing however software testing rarelyif evereliminates every bug some programmers say that every program has at least one more bug lubarskys 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 usersclients 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 quite large for instance nasa has extremely rigorous software testing procedures for many operating systems and communication functions many nasabased operations interact and identify each other through command programs this enables many people who work at nasa to check and evaluate functional systems overall programs containing command software enable hardware engineering and system operations to function much easier together license software license the softwares license gives the user the right to use the software in the licensed environment and in the case of free software licenses also grants other rights such as the right to make copies 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 trialfreemium software as the name suggests freeware can be used 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 often inaccurately termed commercial software which can only be legally used on purchase of a license open source software on the other hand comes with a free software license granting the recipient the rights to modify and redistribute the software patents software patent and software patent debate software patents like other types of patents are theoretically supposed to give an inventor an exclusive timelimited license for a detailed idea eg 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 ie the actual software packages implementing the patent are not supposed to be patentable eitherthe 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 validalthough 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 lawyersfor example the patent for aspectoriented 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 fastmoving 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 software development computer programming and software engineering design and implementation of software varies 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 latter has much more basic functionality software is usually designed and created aka codedwrittenprogrammed in integrated development environments ide like eclipse intellij and microsoft visual studio that can simplify the process and compile the software if applicable 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 libraries apis can be categorized by their purpose for instance the spring framework is used for implementing enterprise applications 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 services when a program is designed it relies upon the api for instance a microsoft windows desktop application might call api functions in the net windows forms library like form1close and form1show to close or open the application without these apis the programmer needs to write these functionalities entirely themselves companies like oracle and microsoft provide their own apis so that many applications are written using their software libraries that usually have numerous apis in them data structures such as hash tables arrays and binary trees and algorithms such as quicksort can be useful for creating software computer software has special economic characteristics that make its design creation and distribution different from most other economic goods 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 although use of the latter word may cause confusion because it is more often used to mean someone who illegally breaks into computer systems industry and organizations software industry a great variety of software companies and programmers in the world comprise a software industry software can be quite a profitable industry bill gates the cofounder of microsoft was the richest person in the world in 2009 largely due to his ownership of a significant number of shares in microsoft the company responsible for microsoft windows and microsoft office software products both market leaders in their respective product categories nonprofit software organizations include the free software foundation gnu project and mozilla foundation software standard organizations like the w3c ietf develop recommended software standards such as xml http and html so that software can interoperate through these standards other wellknown large software companies include google ibm tcs infosys wipro hcl technologies oracle novell sap symantec adobe systems sidetrade and corel while small companies often provide innovation software release life cycle independent software vendor list of software software asset management opensource software software portalfree software portalinformation technology portal softwareat wikipedias sister projects definitions from wiktionary media from wikimedia commons news from wikinews texts from wikisource textbooks from wikibooks resources from wikiversity software at curlie vtesoftware distribution platforms and content delivery networks app store cloud gaming digital library online game store package manager software distribution streaming media activepersonalcomputer allmyapps amazon digital game store battlenet big fish games chrome web store digital river direct2drive dotemu gogcom gamehouse gameshadow gamersgate game jolt gnome software green man gaming humble store mac games arcade itchio mac app store macupdate metaboligamesplanet microsoft store msn games origin playism playster pogocom pokki steam uplay wildtangent video gameconsoles gamefly microsoft store nintendo eshop playstation now playstation store wii shop channel xbox store xbox live arcade mobile amazon appstore apple app store aptoide blackberry world cafe bazaar cydia fdroid gamersgate getjar google play handango microsoft store samsung galaxy apps slideme opera mobile store playster arcade allnet nesicaxlive eamusement discontinued club nokia desura gameagent gametap games for windows live games for windows marketplace impulse intel appup jumboplay kazaa ngage nokia download nokia ovi store onlive playnow arena stardock central triton ubuntu software center ubuntu app store vodafone live windows marketplace windows marketplace for mobile windows phone store yahoo games zune marketplace zylom authority control bne xx530960 bnf cb133183707 data gnd 40553826 lccn sh85029534 ndl 00684642 