The licensing model¶
Media tooling licensing is where most projects get vague. ffmpeg-wasi keeps three licences deliberately distinct, so you always know exactly what you're holding.
Not legal advice
This explains the project's intent and structure. It is not legal advice; a formal licence review precedes any tagged release.
Three licences, kept apart¶
1. This repository's source: MIT¶
The build tooling (build/) and the engine (src/driver.c) are MIT.
Two facts keep it that way:
- It vendors no FFmpeg source. FFmpeg (and any GPL dependency such as x264) is cloned at build time, never committed here.
- It links nothing. The tooling orchestrates a build: clone, configure, compile, package. It is not a derivative work of anything GPL, so it stays MIT, and it is yours to reuse.
That MIT pipeline (the reference "FFmpeg → WASI, libav-direct" build) is the valuable, reusable part we own.
2. The released artifacts: LGPL or GPL (your choice)¶
FFmpeg's libraries are LGPL-2.1-or-later by default. The artifact's licence is set entirely by what we enable:
| Variant | Built with | Artifact licence |
|---|---|---|
| LGPL (default) | stock libav*, no --enable-gpl, + openh264 (BSD) for H.264 encode |
LGPL-2.1-or-later |
| GPL (opt-in) | --enable-gpl + libx264 |
GPL-2.0-or-later |
openh264's BSD-2-Clause source is LGPL-compatible and needs no --enable-gpl, so it does not move
the LGPL floor, but it does carry an AVC patent caveat, covered below.
LGPL is the floor. We cannot relicense libav* below it; it's the FFmpeg project's
code, not ours. But LGPL is proprietary-compatible (you may use it in closed software,
subject to its relink provision), which is what matters for adoption.
3. Your code that consumes the artifact: unaffected¶
afmpeg, or whatever loads the module, just downloads
a .wasm. The LGPL/GPL obligation attaches to that artifact and whoever distributes it,
never to the consuming source. afmpeg stays permissive throughout.
H.264 encode and the AVC patent pool¶
Both variants can encode H.264: the LGPL variant via openh264 (BSD-2-Clause source), the GPL variant via libx264. Those are the copyright licences. The patent position is identical for both, and it is worth stating plainly.
Self-compiled openh264 is outside Cisco's patent grant
H.264/AVC is covered by a patent pool administered by Via LA
(formerly MPEG LA). Cisco's well-known royalty-free grant for openh264 covers only the binary
modules Cisco itself builds and distributes, and it does not travel with the source. ffmpeg-wasi
compiles openh264 from source, so our .wasm is not under Cisco's umbrella. The GPL variant's
libx264 is no different: GPL is a copyright licence and never conveys patent rights.
We ship H.264 encode regardless, on a deliberate and bounded basis:
- Volume. The AVC licence is royalty-free beneath the pool's annual unit threshold (the first 100,000 units/year). Our expected distribution sits well within it, and that headroom is the only reason shipping a self-compiled AVC encoder is tenable here.
- Comply on demand. If Via LA or any AVC rights-holder asks us to stop distributing the encoder, we will pull it, promptly and from both variants, rather than contest it.
- Sunset. The obligation is winding down. The last U.S. AVC essential patent in the pool (US 7,826,532) expires 2027-11-29; after that the standard is royalty-free in the U.S. and this caveat lapses. Other jurisdictions track a similar horizon.
This states the project's intent; it is not legal advice, and a formal review precedes any tagged release. For the authoritative, maintained patent roster see Via LA's AVC/H.264 patent list (the "Attachment 1" PDF, updated periodically) rather than any copy we could let go stale here.
HEVC and AV1 encode: the full native profile only¶
The heavy next-generation encoders ship only in the native driver's full profile (spec 0023);
they are absent from every .wasm and from the lean/intermediate profiles. Their licence posture
differs sharply from each other.
-
HEVC/H.265 via libx265: GPL-2.0-or-later, so it enters the gpl variant only (behind
--enable-gpl, exactly like libx264), never the LGPL default. And its patent exposure is harder than AVC's, not softer.HEVC patents are active and pooled, with no sunset
H.265/HEVC is covered by multiple, fragmented patent pools (Via LA, Access Advance, plus unaffiliated holders) with no expiry on the horizon, unlike the AVC pool that sunsets 2027-11-29. We compile libx265 from source, so (as with x264) GPL conveys no patent rights and our binary sits under no pool's grant. We mirror the AVC posture (self-compiled, low volume, comply-on-demand: we pull HEVC encode promptly from the gpl full driver if any HEVC rights-holder asks), but because the pools are active with no sunset, HEVC encode is the most patent-exposed thing we ship and is offered only on deliberate, bounded demand. Decode is unaffected (the native
hevcdecoder needs no pool licence to play HEVC). -
AV1 via SVT-AV1: BSD-3-Clause-Clear + the Alliance for Open Media patent grant. It is LGPL-clean, so it rides both variants of the full profile, and AV1 is royalty-free by design (AOMedia's patent commitment), so no patent caveat applies. This is the decisive advantage that makes AV1 the comfortable heavy codec to ship.
Why shipping both variants is clean¶
Every release publishes both ffmpeg-wasi-lgpl.wasm and ffmpeg-wasi-gpl.wasm, so you
pick the licence that fits and never have to build. Distributing two separate, independent
artifacts together is mere aggregation (GPLv3 §5): the GPL artifact does not "infect"
the LGPL artifact, the MIT tooling, or your code. They simply coexist.
Obligations we meet¶
- Per-asset labelling: each artifact states its licence; the provenance manifest records variant + licence.
- Corresponding source: for every released binary, the source is the pinned upstream FFmpeg/x264/openh264 plus this public repository (our scripts + engine). Anyone can rebuild.
- LGPL relink: because the build is public and the FFmpeg version pinned, a user can
relink the LGPL artifact against a modified
libav*.
In one sentence¶
MIT is what we own; LGPL is the floor for the artifact; GPL is opt-in for libx264; and your code stays yours.