Clean-Room vs Asset-Dependent Ports

A clean-room re-implementation writes 100% new code from observed behaviour and format specs, while remaining asset-dependent — it refuses to ship the original’s copyrighted content and instead loads the user’s own copy.

Why it matters

This split is what keeps projects like OpenClaw, OpenMW, and devilutionX legally durable and accepted upstream. Mixing the two — copying decompiled code, or bundling ripped sprites — is exactly what gets a project DMCA’d. Understanding the boundary tells you what you may write, read, and distribute, and what you must leave on the user’s disk. See legal-boundaries-code-vs-original-game-assets.

How it works

Two independent axes, often confused:

AxisClean-room (good)Tainted / bundled (risky)
Code originNew code from black-box behaviour + format docsCopy-pasted decompiler output
Asset sourceUser supplies original data file at runtimeAssets shipped in the repo/release

A defensible project is clean-room code + asset-dependent runtime. The clean-room discipline (the classic Phoenix BIOS pattern): people who observe the original behaviour and write the spec are separated from those who implement against the spec, so no copyrighted expression leaks into the new source. OpenClaw decodes proprietary formats this way — documenting bytes, then writing fresh parsers.

Example

OpenClaw in practice:

  • Clean-room code — its WWD and PID parsers are hand-written from reverse-engineered layouts; no Monolith source is linked.
  • Asset-dependent — the build contains no sprites, levels, or music; the player points it at their CLAW.REZ, which the engine reads at runtime.

Contrast: a naive “port” that runs a decompiled .exe through a translator and bundles extracted PNGs is neither clean-room nor asset-dependent — and is the unsafe path.

Pitfalls

  • “I’ll just peek at the disassembly to copy the algorithm” — that taints the code; document the behaviour, then re-derive the implementation.
  • Committing a test asset “temporarily” — a single ripped sprite in git history makes the whole repo redistributable infringement.
  • Conflating format spec with copyrighted content — the byte layout of WWD is fact/interface; the level data filling it is the copyrighted work.

See also