Software can be thought of as the variable part of a computer and hardware the invariable part. Software is often divided into application software (programs that do work users are directly interested in) and system software (which includes operating systems and any program that supports application software). The term middleware is sometimes used to describe programming that mediates between application and system software or between two different kinds of application software (for example, sending a remote work request from an application in a computer that has one kind of operating system to an application in a computer with a different operating system).
An additional and difficult-to-classify category of software is the utility, which is a small useful program with limited capability. Some utilities come with operating systems. Like applications, utilities tend to be separately installable and capable of being used independently from the rest of the operating system.
Software can be purchased or acquired as shareware (usually intended for sale after a trial period), liteware (shareware with some capabilities disabled), freeware (free software but with copyright restrictions), public domain software (free with no restrictions), and open source (software where the source code is furnished and users agree not to limit the distribution of improvements).
Software is often packaged on CD-ROMs and diskettes. Today, much purchased software, shareware, and freeware is downloaded over the Internet. A new trend is software that is made available for use at another site known as an application service provider.
Some general kinds of application software include:
- Productivity software, which includes word processors, spreadsheets, and tools for use by most computer users
- Presentation software
- Graphics software for graphic designers
- CAD/CAM software
- Specialized scientific applications
- Vertical market or industry-specific software (for example, for banking, insurance, retail, and manufacturing environments)
Firmware or microcode is programming that is loaded into a special area on a microprocessor or read-only memory on a one-time or infrequent basis so that thereafter it seems to be part of the hardware.