FIELD NOTE / 2026.09.136 MIN READ / 5 SOURCES

When Software Became Infrastructure: From Programs to Dependence

Software moved from being bundled with expensive machines to becoming the hidden infrastructure beneath business, communications, public services, and everyday life.

Software began as part of the machine rather than a separate industry

Early computer users did not usually encounter software as an independent layer of infrastructure. Programs were closely tied to particular machines, and manufacturers often supplied operating routines and programming support as part of the overall computer system. The Computer History Museum notes that software was once given away with computers before becoming one of their most expensive components, while Martin Campbell-Kelly’s history of the software industry describes a 1950s world in which programs were not yet a normal tradable commodity.[1][2] In that environment, the computer itself looked like the scarce capital asset. Code appeared to be an accompaniment to hardware rather than a durable system on which organizations would later become dependent.

Hardware economics initially hid software economics

When a computer filled a room and represented a major capital purchase, it was natural to think of the machine as the infrastructure. Yet every useful installation was already accumulating programs, procedures, operator knowledge and data formats that could be harder to replace than the electronics.

Independent software turned programs into products and commitments

That balance changed as packaged software and independent software firms emerged. Campbell-Kelly identifies the growth of software contracting in the 1950s, packaged software in the 1960s and personal-computer software in the late 1970s and 1980s.[2] Once a program could be bought separately, organizations could choose software that would survive several hardware purchases, and vendors could build businesses around maintaining one code base for many customers. This was an economic change, but it was also an architectural one. A payroll system, database or operating system could now become a long-lived organizational dependency. Replacing the computer no longer necessarily meant replacing the software, and replacing the software could require retraining people, converting data and rewriting connected systems.

Large systems exposed software dependence before people called it infrastructure

The 1968 NATO conference on software engineering captured a field struggling with the scale and reliability of increasingly important programs. The conference report discussed software production, design, large systems and servicing as engineering problems rather than treating programming as a small finishing task.[3] That shift matters historically because infrastructure begins when failure becomes socially expensive. A program that performs an isolated calculation can simply be rerun or rewritten. A program that coordinates reservations, banking, defense, manufacturing or communications has users and institutions arranged around its continued operation.

The software crisis was partly a dependence crisis

The famous difficulty of building large programs was not only that code was complicated. It was that organizations were asking code to carry larger portions of their operations, so lateness, unreliability and maintenance problems propagated beyond the programming team.

Operating systems and networks moved software beneath other software

As computing matured, more programs depended on common layers that users rarely saw directly. Operating systems mediated processors, memory, storage and devices; networking stacks mediated communication; database systems managed persistent organizational records. The Computer History Museum’s software collections emphasize how software came to shape nearly every aspect of modern life, from communication and business to medicine and entertainment.[1] This layering changed the meaning of failure. An application bug might affect one workflow, but a defect in an operating system, shared library or network service could disrupt many unrelated applications at once. Software increasingly behaved like infrastructure because other software assumed it would be present and stable.

Y2K made invisible software dependence visible to the public

The Year 2000 problem was a dramatic demonstration of how old implementation decisions could become infrastructure risks. The Computer History Museum describes how two-digit year representations in existing software created concern that telecommunications, finance and other vital systems could fail when the calendar rolled over to 2000.[4] The feared catastrophe did not occur at scale in part because governments and businesses spent years finding and repairing vulnerable code. The episode showed that critical software does not have to be new, elegant or centrally designed. It can become infrastructure simply because enough important processes have grown around an old assumption.

Infrastructure can be created by accumulated dependence

No committee had to declare a decades-old date routine foundational. It became foundational when replacing or misunderstanding it threatened systems that had acquired real economic and operational obligations.

Modern security policy now defines some software by the power it holds

Contemporary policy makes this infrastructure role explicit. NIST’s definition of critical software includes programs that run with elevated privilege, control access to data or operational technology, manage networking or computing resources, perform functions critical to trust, or operate across important trust boundaries.[5] The definition also pays attention to direct software dependencies. That language recognizes what decades of computing practice established: the risk of a component is not captured only by what its user interface appears to do. Its position in a dependency chain, its privileges and the systems that rely on it can make a small component structurally important.

Infrastructure software accumulates obligations that ordinary programs do not

Once software becomes infrastructural, its designers inherit obligations to compatibility, migration, recovery and security. A new version cannot simply be better in isolation; it must preserve contracts relied on by databases, scripts, devices, operators and other applications. The cost of change therefore shifts from writing code to coordinating an ecosystem. This is one reason old platforms persist. Their continued use may look irrational when viewed only as a comparison of features, but replacement costs include data conversion, testing, institutional knowledge and the risk of breaking connections that have become invisible through routine use.

Installation cost and replacement cost are different histories

A program may have been cheap to adopt when it was new and still become expensive to remove decades later. Historical dependence is itself a technical property because it determines which interfaces and behaviors must continue to work.

Why software infrastructure belongs in the history of computing

The history of software is not only a sequence of languages and products. It is also the history of how code moved downward into the foundations of institutions. Software began as machine-specific instructions, became a tradable product, accumulated shared platforms and eventually became something governments explicitly classify according to critical functions and dependencies.[2][5] That transformation explains why software failures can now resemble failures of transportation, finance or communications infrastructure even when no physical asset is visibly damaged.

Thinking historically about software infrastructure also changes how we judge technical success. Longevity is not merely evidence that an old system failed to be replaced. It may indicate that an interface became dependable enough for thousands of later decisions to build upon it. The same success creates fragility: every new dependency raises the cost of incompatible change. Software infrastructure is therefore a record of accumulated trust, not just accumulated code.

The useful question is no longer whether software is infrastructure in the abstract. Much of it clearly is. The harder historical question is how particular programs acquired infrastructural status—through market adoption, standardization, integration, organizational habit or privileged position in a stack. Those paths explain why some pieces of code become easy to replace while others quietly become part of the environment in which everything else must operate.

RESEARCH / PROVENANCE

Works Cited

5 SOURCES
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05

CodeHistory is a living archive. Citations document the evidence used for this edition; later evidence may refine the account.

Contribute / Corrections

Improve the record.

Use this moderated submission form to suggest a correction, provide a source, challenge a priority claim or identify a missing contributor. Submissions are treated as research leads, not automatically published comments.

Submit a research lead

Please do not submit confidential material or claims you cannot support.