Computer Software
Sometimes abbreviated as SW and S/W, software is a collection of instructions that enable the user to interact with a computer or have it perform specific tasks for them. Without software, computers would be useless. For example, without your Internet browser software you would be unable to surf the Internet or read this page and without a software operating system the browser would not be able to run on your computer. In the picture is a Microsoft Excel software box and an example of a software program.How do you get software?Software can be purchased at a local retail computer store or online, usually in a box that contains all the disks (floppy diskette, CD, DVD, or Blu-ray) required for the program, manuals, warranty, and other necessary documentation.
Software can also be downloaded to a computer over the Internet. Once downloaded, setup files are run to start the installation of the program on your computer.
Free software
In addition to purchasing software, there are also millions of free software programs available that are separated into different categories.
Examples of types of softwareBelow is a list of the different varieties of software that a computer may have installed with examples. Click the links for additional information.
Note: Although software may be thought of as a program, it can be anything that is run on your computer, which is why we also included a program column to help clarify what examples are software but not programs.
Software topics[edit]Architecture[edit]See also: Software architectureUsers 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.
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.
Quality and reliability[edit]Main articles: Software quality, Software testing and Software reliabilitySoftware 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 person's work, crash the computer and do other unexpected things. Faults and errors are called "bugs." 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 rarely – if ever – eliminates every bug; some programmers say that "every program has at least one more bug" (Lubarsky's Law).[6] All major software companies, such as Microsoft, Novell and Sun Microsystems, have their own software testing departments with the specific goal of just testing. 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 NASA-based operations interact and identify each other through command programs called software. 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[edit]Main article: Software licenseThe software's 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:
Patents[edit]Main articles: Software patent and Software patent debateSoftware 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.
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 US, 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[edit]Main articles: Software development, Computer programming and Software engineeringDesign and implementation of software varies depending on the complexity of the software. For instance, design and creation of Microsoft Word software will take much more time than designing and developing Microsoft Notepad because of the difference in functionalities in each one.
Software is usually designed and created (coded/written/programmed) in integrated development environments (IDE) like Eclipse, Emacs and Microsoft Visual Studio that can simplify the process and compile the program. As noted in 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) are categorized for different purposes. For instance, JavaBeans library is used for designing enterprise applications, 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. Underlying computer programming concepts like quicksort, hash table, array, and binary tree can be useful to creating software. When a program is designed, it relies on the API. For instance, if a user is designing a Microsoft Windows desktop application, he/she might use the .NET Windows Forms library to design the desktop application and call its APIs like Form1.Close() and Form1.Show()[7] to close or open the application and write the additional operations him/herself that it need to have. Without these APIs, the programmer needs to write these APIs him/herself. Companies like Sun Microsystems, Novell, and Microsoft provide their own APIs so that many applications are written using their software libraries that usually have numerous APIs in them.
Computer software has special economic characteristics that make its design, creation, and distribution different from most other economic goods.
Software components of a computer system have no physical presence, they are stored in digital form within computer memory. There are different categories of software, including system software, utilities and applications software. Software can also be described as being either generic or bespoke.
System software is the software used to manage and control the hardware components and which allow interaction between the hardware and the other types of software. The most obvious type of system software is the computer's operating system but device drivers are also included within this category.
Fig 1: a screenshot from a software applicationUtility software is software such as anti-virus software, firewalls, disk defragmenters and so on which helps to maintain and protect the computer system but does not directly interface with the hardware.
Applications software (also known as 'apps') are designed to allow the user of the system complete a specific task or set of tasks. They include programs such as web browsers, office software, games and so on. They are usually the reason you bought the computer system in the first place and aren't concerned with the management or maintenance of the system itself.
Any individual software package, whichever of the above types it falls into, can be either generic (or 'off-the-shelf') or it can be bespoke (custom-built). Generic software is mass produced with the intention that it will be used by a wide variety of different users in a range of different situations. Bespoke software is created for a specific purpose which will be used in a known environment.
Often generic software is used when there is a package available that meets the needs of the user. Because it is used by many more people the cost of creating it is spread over a greater number of people or organisations and so the cost to the individual is much lower. It also has the advantage that it is available immediately there's no waiting time involved while the software package is designed, created and tested. Bespoke software has the advantage that it can be tailor made to exact specifications but it significantly more expensive and will take time to create.
Software can also be downloaded to a computer over the Internet. Once downloaded, setup files are run to start the installation of the program on your computer.
Free software
In addition to purchasing software, there are also millions of free software programs available that are separated into different categories.
- Shareware or trial software is software that gives you a few days to try the software before you buy the program. After the trial time expires you'll be asked to enter a code or to register the product before you can continue to use it.
- Freeware is completely free software that never requires payment, as long as its not modified.
- Open source software is like freeware but not only is the program given away, but the source code used to make the program is as well, allowing anyone to modify the program or view how it was created.
Examples of types of softwareBelow is a list of the different varieties of software that a computer may have installed with examples. Click the links for additional information.
Note: Although software may be thought of as a program, it can be anything that is run on your computer, which is why we also included a program column to help clarify what examples are software but not programs.
Software topics[edit]Architecture[edit]See also: Software architectureUsers 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: 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.
- User-written software: End-user 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 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.
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.
Quality and reliability[edit]Main articles: Software quality, Software testing and Software reliabilitySoftware 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 person's work, crash the computer and do other unexpected things. Faults and errors are called "bugs." 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 rarely – if ever – eliminates every bug; some programmers say that "every program has at least one more bug" (Lubarsky's Law).[6] All major software companies, such as Microsoft, Novell and Sun Microsystems, have their own software testing departments with the specific goal of just testing. 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 NASA-based operations interact and identify each other through command programs called software. 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[edit]Main article: Software licenseThe software's 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 historical category shareware. As the name suggests, freeware can be used for free, although in the case of shareware, this is sometimes only true for a limited period of time. However, the term shareware has fallen out of use, as the original name "shareware" was coined in a pre-internet age, and even larger, well-established software companies such as Microsoft commonly offer free trial versions of some or all of their software.
- software available for a fee, often inaccurately termed "commercial software", which can only be legally used on purchase of a license.
Patents[edit]Main articles: Software patent and Software patent debateSoftware 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.
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 US, 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[edit]Main articles: Software development, Computer programming and Software engineeringDesign and implementation of software varies depending on the complexity of the software. For instance, design and creation of Microsoft Word software will take much more time than designing and developing Microsoft Notepad because of the difference in functionalities in each one.
Software is usually designed and created (coded/written/programmed) in integrated development environments (IDE) like Eclipse, Emacs and Microsoft Visual Studio that can simplify the process and compile the program. As noted in 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) are categorized for different purposes. For instance, JavaBeans library is used for designing enterprise applications, 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. Underlying computer programming concepts like quicksort, hash table, array, and binary tree can be useful to creating software. When a program is designed, it relies on the API. For instance, if a user is designing a Microsoft Windows desktop application, he/she might use the .NET Windows Forms library to design the desktop application and call its APIs like Form1.Close() and Form1.Show()[7] to close or open the application and write the additional operations him/herself that it need to have. Without these APIs, the programmer needs to write these APIs him/herself. Companies like Sun Microsystems, Novell, and Microsoft provide their own APIs so that many applications are written using their software libraries that usually have numerous APIs in them.
Computer software has special economic characteristics that make its design, creation, and distribution different from most other economic goods.
Software components of a computer system have no physical presence, they are stored in digital form within computer memory. There are different categories of software, including system software, utilities and applications software. Software can also be described as being either generic or bespoke.
System software is the software used to manage and control the hardware components and which allow interaction between the hardware and the other types of software. The most obvious type of system software is the computer's operating system but device drivers are also included within this category.
Fig 1: a screenshot from a software applicationUtility software is software such as anti-virus software, firewalls, disk defragmenters and so on which helps to maintain and protect the computer system but does not directly interface with the hardware.
Applications software (also known as 'apps') are designed to allow the user of the system complete a specific task or set of tasks. They include programs such as web browsers, office software, games and so on. They are usually the reason you bought the computer system in the first place and aren't concerned with the management or maintenance of the system itself.
Any individual software package, whichever of the above types it falls into, can be either generic (or 'off-the-shelf') or it can be bespoke (custom-built). Generic software is mass produced with the intention that it will be used by a wide variety of different users in a range of different situations. Bespoke software is created for a specific purpose which will be used in a known environment.
Often generic software is used when there is a package available that meets the needs of the user. Because it is used by many more people the cost of creating it is spread over a greater number of people or organisations and so the cost to the individual is much lower. It also has the advantage that it is available immediately there's no waiting time involved while the software package is designed, created and tested. Bespoke software has the advantage that it can be tailor made to exact specifications but it significantly more expensive and will take time to create.