C:\2000S\STEAM.TXT

2003

Steam: Installing a Game Becomes an Ongoing Task

Steam's 2003 client and 2004 Half-Life 2 preloading turned game delivery into a managed relationship among accounts, local files and continuing updates.

8 min readCovers September 12, 2003 client release; August 2004 Half-Life 2 preloadSoftware That Shaped the 2000s

A boxed game suggests a satisfying transaction. Acquire the box, install the contents, and play. Then a patch arrives, a server expects another version, or a file turns out to be damaged. The box remains reassuringly unchanged while the installed software develops a maintenance schedule.

Steam made ongoing delivery part of the application relationship. A client could maintain game content and connect it to a service, rather than leaving every update to a separate manual download and installation procedure.

Valve’s September 12, 2003 announcement is unusually brief: it says the Steam client has been released and directs readers to download locations. It establishes the release date without pretending that the announcement itself contains a complete architectural account.1

The historical significance lies in the continuing client. Distribution became something software managed after the first installation. That helped turn the PC game library into a platform relationship, with real convenience and real dependencies attached.

Read the maintenance notes

Period client notes are useful evidence because they show what needed attention. Valve’s December 3, 2003 notice announced an update for the following day and described client changes. The release wasn’t the end of client development; the delivery tool was itself software requiring delivery.2

That recursive arrangement is quite sensible once accepted. The client maintains game software and also has to maintain its own ability to communicate, track content, and present useful information. A stale updater is an especially inconvenient piece of stale software.

A multiplayer game’s version is more than a label in a menu. It can determine which rules, data or network expectations an installation follows. Two players who believe they are running “the same game” may have different builds.

A managed update system can make those versions easier to align. It still has to decide when to update, how to recover from interruption, and how much work to perform before a player can start. Convenience has acquired a set of policies.

This article doesn’t attribute every current Steam library feature to the 2003 client. Modern cloud storage, community functions and distribution internals have their own histories. The early milestone is the managed delivery relationship, not the entire present-day platform arriving at once.

The bytes and the permission can arrive separately

Valve’s August 26, 2004 Half-Life 2 notice announced preloading through Steam. It stated that purchase wasn’t required to preload but was required to activate the game.3

That is a revealing separation. A machine can receive content before the owner has permission to use it in the intended way. Delivery and activation are distinct events, even when both eventually appear behind the same Play button.

Preloading moves some network work before a heavily anticipated release. Instead of every interested user requesting all the large content at the opening moment, much of it can already be local. There remains an activation step and any remaining delivery work.

The period notice supports that distinction without supplying enough detail to reconstruct every cryptographic operation. This article doesn’t claim to have reverse engineered the 2004 client or measured its launch traffic.

For a player, the benefit is understandable: a large download can happen earlier. The tradeoff is dependence on the service’s activation arrangement. Having bytes on disk is no longer the only condition that matters.

Delivery, entitlement and activation as separate states

Original CC0 teaching diagram, 2026, based on the distinction in Valve’s 2004 notice. Not a client screenshot or reconstruction of its encryption implementation.

This is a broader software-distribution idea. An installer can manage content separately from the decision to release or authorize it. The interface combines several states that a simple file-copy model would treat as one.

An installation needs a description

Imagine an invented game composed of four files. A content manifest describes the expected files and enough information to identify their intended versions. The client compares that description with what exists locally.

This is a general teaching model. Modern Steamworks documentation describes a later system, SteamPipe, using chunks and content builds. The model explains the problem those systems address; it isn’t assigned as the exact September 2003 mechanism.4

Our first build contains:

FileSize, MiBState in next build
Executable4Replaced
Textures80Unchanged
Sound40Unchanged
Map20Replaced

The full installation is 144 MiB. In a simplified file-level update where the executable and map retain their sizes, sending only the replacements requires 24 MiB. The other 120 MiB is already useful locally.

That difference is 83⅓ percent of the full payload. It isn’t a Steam benchmark. The numbers and file names are invented, and the model ignores compression, metadata and overhead.

The crucial operation is comparison. The updater needs to know whether a local file matches the required content, rather than trusting that a familiar filename means the latest version. Names identify destinations; content identifiers help identify what belongs there.

A missing or damaged unchanged file also needs attention. If the local sound file doesn’t match the target manifest, the client can’t keep it merely because the developer didn’t change sound in this release. The target state, not the user’s recollection of the last download, determines what is required.

A small edit can produce a large update

File-level replacement has a limitation. If one texture changes inside an 80-MiB container, the simple model retransmits the container. Only a small part of its meaning changed, but its file-level identity changed.

A chunk system can describe smaller regions. Suppose a fixed-boundary teaching model divides that container into 80 one-MiB chunks and one chunk changes in place. If the other chunks still match, only one MiB of new chunk data is needed for that container.

Modern SteamPipe documentation explains that unchanged chunks can be reused, and warns that game packaging can make updates larger than expected. That is later implementation guidance, not proof that the original client used the same chunk boundaries.4

Now insert bytes near the beginning of a fixed-boundary file. Later bytes shift position. Many chunks can differ even when much of the underlying material remains the same. The amount of edited source content and the amount of changed packaged content are different measurements.

File and chunk update models for invented game data

Original CC0 diagram, 2026. Invented sizes and simplified update units; the later SteamPipe comparison is explicitly separate from the 2003 client.

Compression can introduce another complication. A small edit before whole-file compression may alter the compressed representation beyond the edited region. The update system receives packaged bytes, not the developer’s intention to make a tiny change.

The teaching calculation was checked with Python. I also compared tiny fixed-size chunks before and after a replacement and an insertion. The result illustrates why preserving locality matters, without simulating Steam’s real content algorithm.

This is a useful distribution lesson: build tools and delivery tools have to agree about structure. An efficient downloader cannot always recover locality that packaging has destroyed.

Downloaded doesn’t necessarily mean installed

After new data arrives, the local installation has to become coherent. Running a new executable with an incompatible old map can fail even when both files are individually intact.

One general strategy prepares the new state separately, verifies what is needed, then commits the switch. This can keep incomplete work from being mistaken for a completed build. Modern Valve documentation describes constructing replacement pack files alongside existing ones before committing an update.4

The strategy can need extra disk space. In our file-level teaching example, keeping the 144-MiB old installation while staging the 24 MiB of replacement files needs 168 MiB before cleanup, ignoring temporary metadata and other overhead.

A user watching a small download may therefore still wait for substantial local work. The network transfers changed bytes; the storage system may need to copy and assemble larger files. A progress display has to summarize two quite different kinds of effort.

Verification adds work too, but it serves a purpose. An interrupted operation should remain recognizable as incomplete. A completed operation should match the expected build. A fast update that quietly leaves the game in a mixed state has merely moved the delay into debugging.

None of this requires assuming a particular 2003 staging design. It explains the continuing job accepted by managed delivery. The client isn’t finished when the last packet arrives.

A library is a record of a relationship

Game content is only part of what a distribution client knows. It also needs to associate a user with access to particular products. The preload notice makes that separation visible: content could be obtained before purchase, while activation required the purchase condition.

A conceptual library record can therefore say that a product belongs to an account even when it isn’t installed on the current machine. Conversely, local files can exist without the same account holding the required entitlement.

Those distinctions make reinstalling and moving between machines easier to reason about. They also make the account and service part of the player’s dependence. Losing files and losing access are different failures, with different remedies.

The software’s convenience should be assessed together with that relationship. Centralized distribution can simplify patching and acquisition, while concentrating decisions about access and available versions. A library interface is also an interface to an institution.

This isn’t a claim that every game requires identical online behavior. Products, client versions and offline arrangements differ. It is the architectural consequence of attaching access to managed records rather than treating possession of a disc as the whole installation story.

The publisher keeps a route to the machine

Steam’s early release belongs in this decade because it helped make continuing digital distribution an ordinary part of PC gaming. The client provided a route for new content and updates after installation, while later games made the delivery/activation distinction especially visible.

The worked manifest shows the basic economics of retaining correct local content. The chunk example shows why small developer changes can still become large customer downloads. The staging calculation shows why network savings don’t eliminate storage work.

Those mechanisms are useful precisely because game installations are substantial, changing objects. A one-time copy operation is a poor description of their entire useful life.

What I find consequential is that the installer stayed. It became a participant in the ongoing relationship between publisher, account and game. That could save players from hunting for the correct patch, while giving a new service a place in the route from ownership to play. The box had stopped being the last word.

Sources

Footnotes

  1. Valve, Steam Client Released, September 12, 2003. Primary release-date notice. ↩

  2. Valve, Steam Client Update to be Released Tomorrow, December 3, 2003. Period evidence of continuing client maintenance. ↩

  3. Valve, Half-Life 2 Pre-Loading Begins, August 26, 2004. Delivery before purchase; purchase required for activation. ↩

  4. Valve, Uploading to Steam, modern SteamPipe documentation, content structure and patching sections. Later chunking/staging explanation, never backdated to the 2003 implementation. ↩ ↩2 ↩3

software-historysteamvalvegamesdistribution2000s