Software versus hardware
Software is the set of instructions and data that tells hardware what to do. The word is generally credited, in print, to a statistician named John Tukey in the late 1950s, as a playful counterpart to hardware, although the idea of separating instructions from machinery is older. In the earliest electronic computers there was no clear line: changing what a machine did could mean rewiring it. The stored-program idea made software a distinct thing that could be loaded, copied and changed without touching the circuitry.
Programs and code
- Program. A sequence of instructions that a computer follows to do a task. The same word is used for a single small routine and for a large product.
- Code. A general name for program text. People say “write code,” “read the code” or “the code has a bug.”
- Source code. The human-readable form of a program, written in a programming language. Source code is meant to be read and changed by people.
- Machine code. The low-level numeric instructions that a particular processor can run directly. It is hard for people to read.
- Assembly language. A readable notation that maps closely to machine code, with short names standing in for each instruction. It was widely used in early programming.
- Compiler. A tool that translates source code into a form the machine can run, usually all at once.
- Interpreter. A tool that reads and carries out source code step by step, without producing a separate finished file first.
Both approaches have been used for decades, and some modern systems combine them. The practical differences are covered in more detail in the discussion of compilers and interpreters.
Layers of software
Software is often described in layers, from the machine upward.
- Firmware. Software stored in a chip so that it stays when the power is off. It is used to start a device or control simple hardware. The name reflects that it sits between hardware, which is fixed, and software, which is easy to change. Firmware can often be updated, though less casually than ordinary programs.
- Operating system. The core software that manages hardware, runs other programs and provides services such as file storage. Its central part is often called the kernel.
- Driver. A small program that lets the operating system communicate with a specific piece of hardware, such as a printer or a graphics card. Drivers allow one operating system to work with many different devices.
- Library. A collection of ready-made code that programs can reuse, so developers do not rewrite common tasks. The term borrows from the idea of a shared collection.
- Middleware. Software that sits between other programs and helps them work together, for example by passing messages.
- Utility. A small program that performs a maintenance or support task, such as copying files or checking a disk.
- Application. A program aimed at a task the user wants done, like writing a letter, managing accounts or playing a game. The word is also shortened to “app,” which became especially common with smartphones.
Describing how software is delivered
- Release. A version made available to users.
- Version number. A label such as 2.1 that identifies which release you have. Conventions differ between projects.
- Patch. A small update that fixes a flaw or changes behavior. The word comes from the practice, in the days of paper tape and punched cards, of physically patching a hole or adding a section to alter a program. Whether the figure of speech started there or in earlier technical trades, the sense of mending something is the same.
- Bug fix. An update that corrects a mistake. The term bug itself predates computing, a point discussed in the story of the computer bug.
- Beta. A test version released before the final one, usually to find remaining problems.
- Open source. Software whose source code is made available under terms that let others read it and, usually, change and share it. The term was adopted in the late 1990s, although sharing code among users was common in earlier decades.
- Proprietary. Software whose source code and rights are controlled by its owner.
Data and interfaces
- File. A named collection of data stored on a device.
- Database. An organized collection of data designed so it can be searched and updated. The relational model, from the 1970s, became a long-lasting design.
- API. Application programming interface, a defined way for one program to request services from another.
- GUI. Graphical user interface, meaning windows, icons and menus rather than typed commands.
- Command line. An interface where users type text instructions.
Why the vocabulary matters
Software words overlap, which can mislead. A program can be an application, a utility or a driver. Firmware can be thought of as software or as part of the hardware. A browser is an application, yet it also runs other programs inside it. The labels are best understood as descriptions of role, not rigid categories. A useful habit when reading about any piece of software is to ask what it does, what it depends on, and who or what uses it. That usually settles which term fits.