Phase 6: license-compliance audit and enterprise/ relicensing to AGPLv3
Full dependency inventory across Rust/Go/npm plus Docker base images and vendored assets (776 rows, 502 unique deps), classified against AGPLv3 compatibility with real citations rather than assumptions. enterprise/ relicensed from its commercial-license stub to AGPLv3, matching core -- the one real flag (Redpanda's BSL 1.1) was evaluated against primary sources and accepted as-is rather than triggering a broker swap. CI enforcement wired up (.github/workflows/license- compliance.yml, this repo's first CI workflow), a root LICENSE file added, and every doc/comment referencing the old commercial-license boundary updated to describe it as architectural only. See /docs/compliance/ for the full report, inventory, and policy.
This commit is contained in:
@@ -167,9 +167,14 @@ always into the default index — genuinely verified in this environment,
|
||||
same as the read-side Tantivy claim above, since Tantivy is an embedded
|
||||
library with no Docker dependency. No "second binary" was needed here,
|
||||
unlike ClickHouse: Tantivy has no grant system to gate a
|
||||
commercially-licensed credential behind, so `IndexRegistry` already
|
||||
lived directly in this AGPL-core `search` binary, and read/write simply
|
||||
share it. This write path is now also active-tenant-gated:
|
||||
separately-credentialed binary behind, so `IndexRegistry` already lived
|
||||
directly in this AGPL-core `search` binary, and read/write simply share
|
||||
it. (This reasoning predates Phase 6's relicensing of `enterprise/` to
|
||||
AGPLv3 and originally referred to a commercially-licensed credential --
|
||||
restated here because the architectural point holds independent of
|
||||
licensing: Tantivy still has no grant system, so the split was never
|
||||
about which license `enterprise/` carried.)
|
||||
This write path is now also active-tenant-gated:
|
||||
`search/src/tenants.rs`'s `ActiveTenantTracker` polls a new
|
||||
`GET /internal/active-tenants` endpoint on `enterprise-auth` every 60
|
||||
seconds (RoleService-credentialed, the same auth shape `alerting` uses
|
||||
@@ -245,10 +250,15 @@ design doc doesn't yet cover, not just an implementation gap.
|
||||
|
||||
## Module boundary (trust boundary #1)
|
||||
|
||||
`enterprise/` (commercial license: SSO, RBAC storage, audit logging,
|
||||
session issuance) is never imported by AGPL core (`/api`, `/alerting`,
|
||||
`/web`, `/cli`) — enforced in CI by `hack/check-tenant-boundary.sh`,
|
||||
which greps for the import edge on every build. Core calls
|
||||
`enterprise/` (SSO, RBAC storage, audit logging, session issuance — AGPLv3,
|
||||
same as core as of Phase 6, see `/docs/compliance/license-audit-report.md`)
|
||||
is never imported by core (`/api`, `/alerting`, `/web`, `/cli`) —
|
||||
enforced in CI by `hack/check-tenant-boundary.sh`, which greps for the
|
||||
import edge on every build. This is an architectural trust boundary, not
|
||||
a licensing one: it keeps core buildable and deployable with zero
|
||||
multi-tenant mechanism present regardless of what license either side
|
||||
carries, and keeps tenant identity resolution server-side rather than
|
||||
trusting a request parameter. Core calls
|
||||
`enterprise-auth` over plain HTTP (`api/authz.HTTPAuthorizer`),
|
||||
forwarding only the `Cookie`/`Authorization` headers, never the full
|
||||
request (`api/authz/httpauthz_test.go` asserts this — an
|
||||
|
||||
Reference in New Issue
Block a user