Software

Software is the set of instructions and associated data that tells a computer what to do, as opposed to the physical hardware that carries those instructions out. Software has no weight, does not wear out, and can be copied perfectly at almost no cost, yet it determines whether a machine is a word processor, a game console, or a medical device — it is the part of computing that is easiest to change and, for that reason, the part that changes most.

The word is younger than the thing it names. Early machines such as ENIAC were "programmed" by rewiring, and the stored-program computers of the late 1940s put instructions into memory, so programs existed well before anyone needed a name for them as a class. The statistician John Tukey used the word "software" in print in 1958, in contrast to the hardware of electronic calculators. In the early 1950s Grace Hopper's A-0 system for UNIVAC showed that a program could translate higher-level notation into machine instructions, the idea behind every compiler, and by 1968 a NATO conference on "software engineering" in Garmisch had acknowledged that building large programs was a discipline with its own failures, schedules, and costs.

Source code
readable text written by a programmer, for example in Python or C
Turning text into running software
Compile or interpret
translate source into machine instructions
Link and package
combine with libraries into an executable or app
Install
place it in storage on the target machine
The software stack on a running machine
Applications
browser, editor, spreadsheet
Operating system
Windows, macOS, Linux, Android
Firmware
low-level code stored on the hardware itself
Hardware executes the instructions
processor and memory carry out each step

Software is usually described in layers, each relying on the one below. Firmware is code stored in a device's own non-volatile memory, such as the startup code that initializes a motherboard or the controller code inside an SSD. The operating system sits above it, managing the processor, memory, storage, and devices and offering a consistent interface to everything else; Unix, written by Ken Thompson and Dennis Ritchie from 1969, and Linux, begun by Linus Torvalds in 1991, are the best-known lineage. System utilities, libraries, and frameworks sit above that, and application software — the browser, the spreadsheet, the game — sits on top, serving a person's actual goal.

Software is built in languages that humans can read, then translated for the machine. A program is written as source code in a language like Python, C, Java, or JavaScript, then either compiled ahead of time into machine instructions or interpreted while it runs. The same program is therefore a text file to a programmer and a sequence of numeric instructions to the processor. Version control systems record every change, tests check behavior, and updates deliver fixes after release, which is why most software is better described as a continuing process than a finished object.

How software is licensed and shared is part of what it is. Proprietary software is distributed as executables under terms that restrict copying and modification. Free and open-source software, a movement shaped by Richard Stallman's GNU project, begun in 1983, and later by licenses such as the GNU General Public License and the MIT license, publishes the source code so others can inspect, modify, and redistribute it. Much of the internet, from web servers to the Linux kernel inside most smartphones and cloud machines, runs on open-source components. Software as a service goes a step further: the program runs on someone else's servers and is reached through a browser, so the user never installs it at all.

A common misconception is that software, being intangible, cannot fail physically or be worn out — yet it routinely fails by being wrong. Bugs are mistakes in the instructions, and because software is copied faithfully, one defect ships to millions of machines at once. Software also decays in a different sense: the systems around it change, libraries are abandoned, and security flaws are discovered, so unmaintained programs become unreliable or dangerous. Data is not the same thing as software either — a photo or a spreadsheet is information the program acts on, not instructions that act on the computer.

Read software as the changeable, copyable half of every computer: instructions written by people, layered from firmware to applications, whose behavior is exactly as good — and as flawed — as the way those instructions were written and maintained.

Take software further

Ask the copilot about this term, or have our engineers assess it against your process.