Documentation
Licensing Strategy: FOSS (bloqr-core) vs. Commercial (bloqr-compiler)
Status: Active standard — relicensing of bloqr-core is in progress, see
docs/legal/LICENSE-DRAFT.md and its tracking
issue. This doc explains the relationship, not the mechanics of the swap
itself.
The model
Bloqr operates two related but license-distinct codebases:
bloqr-core(this repo) — source-available, free for non-commercial use. Anyone can read, audit, fork, and use it to produce their own output (a compiled filter list, a hostlist, a configuration) and give that output away for free, including as a business or professional entity. What's restricted is monetizing the Software or its output — selling it, paywalling it, or building a revenue-generating product/service around it — without a commercial license from Bloqr Systems.bloqr-compiler(BloqrAI/bloqr-compiler, private) — the commercial, hosted "Compiler-as-a-Service" product: AGTree-powered multi-syntax AST parsing/translation across AdGuard, uBlock Origin, and Adblock Plus formats, deployable on Cloudflare Workers/Deno Deploy/Vercel Edge/AWS Lambda@Edge, with metered API billing. Licensed under its own source-available commercial license and commercial license agreement template.
Different licenses, same underlying philosophy: free to use, audit, and
build on for non-commercial purposes; commercial use requires a license from
Bloqr Systems, who retains unlimited rights to its own software. bloqr-core's
license is adapted from bloqr-compiler's rather than copied verbatim,
because bloqr-core ships as source you run yourself — it has no hosted
component to meter usage through, so the SaaS-API-billing and proxy-metering
commercial paths that make sense for bloqr-compiler don't apply here.
Why they're kept separate, not one license for both
bloqr-compiler's commercial value (the AGTree AST engine, multi-syntax translation, hosted CaaS infrastructure, billing) is deliberately not present inbloqr-core.@bloqr/compiler-core's own source comments document this: it was extracted frombloqr-compiler's core specifically without@adguard/agtreeand without the Workers/CaaS-specific code (seesrc/compilers/typescript/src/transformations/ValidateTransformation.tsandsrc/compilers/typescript/src/utils/RuleUtils.ts, both of which reference the companion decoupling effort tracked asbloqr-compiler#2200).- Keeping the license text specific to what each repo actually contains
avoids promising enforcement mechanisms (like API metering) that
bloqr-corestructurally cannot provide, and avoids importingbloqr-compiler-specific commercial terms (SaaS pricing tiers, proxy billing) that have no equivalent here. - This split also matters for the "no infectious licenses" goal
(see
CLAUDE.md's Operational Notes):bloqr-coredeliberately avoids copyleft (GPL/AGPL/LGPL) third-party dependencies so that adopting a Bloqr-authored restrictive-but-open license isn't undermined by a dependency's own copyleft terms forcing broader disclosure than intended. See the dependency license compatibility audit (tracked separately, modeled onbloqr-compiler's ownDEPENDENCY_LICENSE_COMPATIBILITY.md). - MPL-2.0 specifically confirmed compatible (#434): evaluated whether an
MPL-2.0-licensed dependency (
BloqrAI/bloqr-enginelib, a fork of Brave'sadblock-rust) could be taken as a dependency of this repo's GPL-3.0 code. MPL-2.0 is file-level weak-copyleft; its §3.3 "Larger Works" provision explicitly permits distributing a combined work containing MPL-licensed files under a secondary license, including GPL, without the GPL license "infecting" the MPL files or vice versa. This finding was confirmed but the crate was not ultimately adopted — seedocs/adr/0005-browser-syntax-validation-engine.mdfor why (a toolchain incompatibility, not a license one). The finding itself remains valid and reusable for any future MPL-2.0 dependency decision.
Current state (as of this doc)
bloqr-core's rootLICENSEfile says MIT. ~25 other files across the repo (workspaceCargo.toml,pyproject.toml, most compilerREADME.mdfiles, severaldocs/*.md, the website'spackage.jsonand footer) say GPL-3.0. Neither is the intended final state — both predate this licensing-strategy decision. The intended replacement isdocs/legal/LICENSE-DRAFT.md, pending review.- Every published package (
@bloqr/compiler-coreon JSR;bloqr-validator-core,bloqr-validator-core-cli,bloqr-compileron crates.io;Bloqr.Compiler.Abstractions,Bloqr.Compiler.Coreon NuGet via GitHub Packages) currently carries GPL-3.0 in its own registry metadata. Already-published versions are immutable on their registries, so a repo-wide relicense doesn't retroactively change what's already out there — see the open questions inLICENSE-DRAFT.mdfor what that implies for the rollout.
Related documents
docs/legal/LICENSE-DRAFT.md— the candidate replacement license text and its open questions.bloqr-compiler'sLICENSEandCOMMERCIAL_LICENSE.md— the reference implementation this repo's license is modeled on.docs/architecture/versioning-strategy.md— per-package versioning, relevant to the "already-published packages are immutable" question above.