From Wikipedia, the free encyclopedia
Jump to: navigation, search
A piece of software designed to assist in the modeling of molecules


Software is a general term. It can refer to all computer instructions in general, or to any specific set of computer instructions. It is inclusive of both machine instructions (the binary code that the processor "understands") and source code (more human-understandable instructions that must be rendered into machine code by compilers or interpreters before being executed).

Computer software is a set of programs, procedures, functions, associated data and/or its documentation, if any. Program software performs the function of the program it implements, either by directly providing instructions to the digital electronics or by serving as an input to another piece of software. Software is also sometimes used in a more narrow sense, meaning application software only.

Computer software is so called to distinguish it from computer hardware, which encompasses the physical devices and interconnections required to store and run ("execute") the software. In contrast to hardware, executable software exists as data in the computer system and hence "cannot be touched", just as the 3D model shown in the illustration cannot be touched.[1] At the lowest level, executable code consists of machine language instructions specific to an individual processor. A machine language consists of groups of binary values signifying 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 inside the computer (an effect that is not directly observable to the user), or (indirectly) cause something to appear on a display of the computer system (a state change which should be visible to the user). The processor carries out the instructions in the order they are provided, unless it is instructed to "jump" to a different instruction, or interrupted.



Types of software[edit]

User Application Operating System Hardware

Software encompasses a wide array of products that may be developed using different techniques such as ordinary programming languages, microcode, or an FPGA configuration.[citation needed]


Domain of use[edit]

Based on the goal, computer software can be divided into:

  • Application software: Software that uses the computer system to perform useful work or provide entertainment functions beyond the basic operation of the computer itself.
  • System software is computer software designed to operate the computer hardware, to provide basic functionality, and to provide a platform for running application software.[3] System software includes:
    • operating system: An essential collection of software that manages computer hardware resources and provides common services for computer programs. Supervisory program, boot loader, shell and window system are core parts of operating systems. In practice, an operating system packages come bundled with additional software (including application software) so that a user can potentially do some work with a computer that only has an operating system.
    • device drivers: A computer program that operates or controls a particular type of device that is attached to a computer. Each device needs at least one corresponding device driver.
    • Utilities: Computers software designed to assist users in maintenance and care of the computer system.
  • Malware: Malware are computer software developed to harm and disrupt.

Domain of execution[edit]

  • Server software

Programming tools[edit]


Software topics[edit]







Quality and reliability[edit]

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 person's work, crash the computer and do other unexpected things. Faults and errors are called "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). 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.




Software can be patented in some but not all countries; however, software patents can be controversial in the software industry with many people holding different views about it. The controversy over software patents is about specific algorithms or techniques that the software contains, which may not be duplicated by others and considered intellectual property and copyright infringement depending on the severity.

Design and implementation[edit]

A screenshot of a piece of computer software that implements the board game shogi with a graphical user interface

Design 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()[6] 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.[specify][7][8]


Industry and organizations[edit]

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 founder of Microsoft was the richest person in the world in 2009 largely by selling the Microsoft Windows and Microsoft Office software products. The same goes for Larry Ellison, largely through his Oracle database software. Through time the software industry has become increasingly specialized.

Non-profit software organizations include the Free Software Foundation, GNU Project and Mozilla Foundation. Software standard organizations like the W3C, IETF develop software standards so that most software can interoperate through standards such as XML, HTML, HTTP or FTP.

Other well-known large software companies include Novell, SAP, Symantec, Adobe Systems, and Corel, while small companies often provide innovation.

See also[edit]


  2. ^ "Compiler construction". 
  3. ^ "System Software". The University of Mississippi. 
  4. ^ "Embedded Software—Technologies and Trends". IEEE Computer Society. Retrieved May/June 2009. 
  5. ^ "Microcode". Princeton University. 
  6. ^ "MSDN Library". Retrieved 2010-06-14. 

External links[edit]