Gable is licensed per component. There is no single license that covers the repository; the directory a file lives in determines which OpenLBM Profile governs it. This page is the working guide: how to tell which license applies to a file in front of you, how the machinery enforces it, and what to do when you add a file.
The canonical Standard is not here. License texts, the normative Definitions & Eligibility core, the Gable Charter, and the design rationale live in https://github.com/FutureBuildAIinc/openlbm. That repository is authoritative; this page explains how it is applied in
gable. Where the two disagree, the published Standard governs.
Verified against
openlbmandgablemainon 2026-08-07.
Six named Profiles compose over a shared Definitions Core. Full texts:
openlbm/LICENSES/.
| Profile | SPDX identifier | Covers | Distinctive term |
|---|---|---|---|
| Commons 1.0 | LicenseRef-OpenLBM-Commons-1.0 |
Core suite, add-ons, open interfaces | Size-conditioned reciprocity — a Large Operator owes Corresponding Source even for purely internal production use |
| Surface 1.0 | LicenseRef-OpenLBM-Surface-1.0 |
Surfaces and native client apps | Reciprocity on distribution only — customize your own UI privately |
| Connector 1.0 | LicenseRef-OpenLBM-Connector-1.0 |
Module SDK, generated API clients — the plug-in seam | Maximally permissive, no copyleft |
| Community-Source 1.0 | LicenseRef-OpenLBM-Community-Source-1.0 |
Community satellites | Free for Community Members; fee for Large Operators; converts to AGPL-3.0-only after 5 years |
| Docs 1.0 | LicenseRef-OpenLBM-Docs-1.0 |
Documentation, specs, guides — including this repository | Attribution + share-alike |
| Trademark 1.0 | LicenseRef-OpenLBM-Trademark |
The Gable / GableLBM / AI_LM / OpenLBM marks | Not a code license — a brand-use policy |
This is fair source, not open source. The Commons Profile conditions an obligation on organization size and excludes one field of use, which puts the Standard outside the OSI Open Source Definition. The license text says so itself (Commons §9, "NO OSI CLAIM"). If you need an OSI-approved license, OpenLBM is not it. The reasoning is in the OpenLBM README.
Three artifacts encode the same mapping. Check them in this order.
Every source file in gable carries two lines at the top:
// SPDX-License-Identifier: LicenseRef-OpenLBM-Commons-1.0
// SPDX-FileCopyrightText: 2026 FutureBuild, Inc. and OpenLBM contributorsComment syntax varies — // for Go and TypeScript, # for YAML, Makefiles and
inside YAML frontmatter, an HTML comment for Markdown:
<!--
SPDX-License-Identifier: LicenseRef-OpenLBM-Docs-1.0
SPDX-FileCopyrightText: 2026 FutureBuild, Inc. and OpenLBM contributors
-->Binary files (images, fonts) cannot carry a header, so they get a
<filename>.license sidecar containing the same two lines — gable uses this
for .claude/settings.json, which is JSON and has no comment syntax.
This is the fastest answer and it is right in the overwhelming majority of cases. Where the header and the map disagree, that is a bug: file it.
At the root of gable. The authoritative directory → license mapping:
| Path prefix | SPDX license identifier |
|---|---|
backend/internal/ |
LicenseRef-OpenLBM-Commons-1.0 |
backend/pkg/ (except backend/pkg/apps/) |
LicenseRef-OpenLBM-Commons-1.0 |
backend/cmd/ |
LicenseRef-OpenLBM-Commons-1.0 |
backend/migrations/ |
LicenseRef-OpenLBM-Commons-1.0 |
backend/pkg/apps/ |
LicenseRef-OpenLBM-Connector-1.0 |
app/ |
LicenseRef-OpenLBM-Surface-1.0 |
docs/ |
LicenseRef-OpenLBM-Docs-1.0 |
The most specific path wins. A file under backend/pkg/apps/ is
Connector-licensed; anything else under backend/pkg/ is Commons-licensed.
LICENSE-MAP.md also records two Profiles that are not directory-scoped and
therefore do not appear in the table: Community-Source (applied per-work, by
version notice) and Trademark (a brand policy, not a code license).
Same mapping, in REUSE 3.x format, at the root of
gable. It is what tooling reads and what CI enforces.
Order matters. When a path matches more than one [[annotations]] block,
the last matching block wins. The backend/pkg/apps/** carve-out therefore
must appear after the broader backend/pkg/** entry. If you reorder that
file, you silently relicense the connector seam.
REUSE.toml also covers everything LICENSE-MAP.md does not — build manifests,
CI config, repo plumbing, brand assets — because reuse lint requires that
every file in the tree carries licensing information. The choices there follow
the map's spirit: build config next to Commons code is Commons; prose and repo
plumbing are Docs; brand assets are Trademark.
backend/pkg/apps/ is the installable-apps connector seam: the Manifest
and App types, the Router interface that gates routes on enablement, and the
registry that syncs manifests to the apps table. It is the surface a
third-party module plugs into.
It is deliberately carved out of the backend/pkg/ Commons default and licensed
under the more permissive Connector Profile, which has no copyleft. That is
the point:
Because the SDK seam is permissive, a proprietary product, a community-source satellite, and the copyleft commons can all interoperate across it without any license crossing the boundary.
If you are integrating with a Gable instance, you integrate over the Connector, and your own licensing is your own business. If you contribute to the commons itself, you are contributing under Commons or Surface.
Practical consequences when working in that directory:
- A file you add under
backend/pkg/apps/gets the Connector SPDX identifier, not Commons. Copy the header from a neighbouring file — don't copy one frombackend/pkg/database/. - Moving code into
backend/pkg/apps/relicenses it more permissively. That is a licensing decision, not a refactor. Flag it in the PR. - Moving code out of
backend/pkg/apps/intobackend/internal/makes it copyleft. Also a decision.
Status: the seam exists and works, but it is not yet a separately versioned,
independently consumable SDK. pkg/apps still couples to pkg/audit,
pkg/database and pkg/httputil, there is one go.mod for the whole backend,
and only a couple of modules are converted to manifests — the rest are declared
centrally in backend/cmd/server/catalog.go. Extraction into a semver-tagged module is
planned work — the seam is Connector-licensed but not yet independently
consumable, which is what would make it usable by a third party. Phases 1–2 of
the modularization blueprint
describe the shape of that work.
Your contribution is licensed under the same OpenLBM Profile that governs the
file(s) you change. A change under backend/internal/ is contributed under
Commons; under app/, Surface; under backend/pkg/apps/, Connector; under
docs/ or in this repository, Docs.
Because these are custom licenses rather than an off-the-shelf inbound=outbound
OSS license, contribution goes through a Contributor License Agreement. You
will be asked to agree to it before your first contribution is merged. The CLA
lives with the Standard in the
openlbm repository.
By opening a pull request you confirm the contribution is your original work (or you have the right to submit it), that you agree to license it under the component license(s) it touches, and that you are not knowingly including third-party code under incompatible terms.
- Work out the identifier — cheapest is
head -3on a neighbouring file in the same directory; confirm againstLICENSE-MAP.mdif the directory sits near a boundary. - Add the two SPDX lines in the comment syntax of the file's language. A
file that opens with
---frontmatter puts them as#comments inside the frontmatter block so it still parses. - Binary or comment-less? Add a
<filename>.licensesidecar instead. - New top-level directory, or a file
REUSE.tomldoesn't match? Add an[[annotations]]block — and mind the ordering rule. - Run the gate:
make license-checkingable,reuse linthere. It is a merge gate; a missing header fails the build.
Everything in gable-docs is LicenseRef-OpenLBM-Docs-1.0 — attribution and
share-alike. Reuse it, adapt it, even commercially: credit "the OpenLBM/Gable
project", link the source, indicate your changes, and distribute your
adaptations under the same terms. The root LICENSE is the
verbatim Docs Profile text; REUSE.toml covers the tree.
The Gable and OpenLBM marks are not covered by the Docs license. Trademark
use is governed separately by LicenseRef-OpenLBM-Trademark — the Docs Profile
grants you no right to use the names or logos to brand your fork.
The OpenLBM Standard is at version 1.0, effective, in the openlbm
repository. The OpenLBM Standard is published and effective at version 1.0.
The texts vendored under LICENSES/ in the gable repository are copies,
shipped so the repository is self-contained and REUSE-compliant offline. Where a
vendored copy and the published Standard ever disagree, the published Standard
governs.
Nothing on this page is legal advice. If your organization needs to know whether
it qualifies as a Community Member or a Large Operator, read
definitions.md
in the Standard — it is normative — and then talk to your counsel.
- OpenLBM Standard — canonical texts, definitions, charter
LICENSE-MAP.mdin the reference repo- Running the tests — the REUSE gate
- How to contribute — the CLA and the pre-flight