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:
@@ -0,0 +1,91 @@
|
|||||||
|
name: License compliance
|
||||||
|
|
||||||
|
# Enforces the AGPLv3-project-wide license policy from the Phase 6
|
||||||
|
# license audit (/docs/compliance/license-policy.md) on every PR --
|
||||||
|
# a new dependency with an incompatible license fails the build here,
|
||||||
|
# not months later when someone happens to re-run the one-time audit.
|
||||||
|
# See /docs/compliance/license-audit-report.md for the audit this
|
||||||
|
# policy was derived from.
|
||||||
|
#
|
||||||
|
# This is the first CI workflow in this repo. Several docs
|
||||||
|
# (architecture.md, phase-4-isolation-design.md, phase-4-rbac-design.md)
|
||||||
|
# already say "enforced in CI by hack/check-tenant-boundary.sh" -- that
|
||||||
|
# was true of the *script*, but nothing had actually wired it into a
|
||||||
|
# running CI system yet. Fixed here as part of standing up the first
|
||||||
|
# real workflow file, not left as a second gap next to this one.
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [master, main]
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
rust-licenses:
|
||||||
|
name: Rust license check (cargo-deny)
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
crate_dir: [agent, search]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: EmbarkStudios/cargo-deny-action@v2
|
||||||
|
with:
|
||||||
|
manifest-path: ${{ matrix.crate_dir }}/Cargo.toml
|
||||||
|
command: check licenses
|
||||||
|
|
||||||
|
go-licenses:
|
||||||
|
name: Go license check (go-licenses)
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
# Every Go module with real third-party dependencies -- cli,
|
||||||
|
# hack/webhook-sink, and hack/alert-load-test are stdlib-only
|
||||||
|
# (confirmed at audit time) and intentionally excluded, not
|
||||||
|
# forgotten; add them here if they ever gain a dependency.
|
||||||
|
module_dir:
|
||||||
|
- api
|
||||||
|
- ingest
|
||||||
|
- alerting
|
||||||
|
- enterprise
|
||||||
|
- deploy/operator
|
||||||
|
- terraform
|
||||||
|
- proto
|
||||||
|
- hack/benchmark-fixture
|
||||||
|
- hack/windows-fixture
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version-file: ${{ matrix.module_dir }}/go.mod
|
||||||
|
- run: go install github.com/google/go-licenses@latest
|
||||||
|
- name: Check licenses
|
||||||
|
working-directory: ${{ matrix.module_dir }}
|
||||||
|
run: |
|
||||||
|
go-licenses check ./... \
|
||||||
|
--allowed_licenses=MIT,Apache-2.0,BSD-2-Clause,BSD-3-Clause,ISC,MPL-2.0,0BSD,Unlicense \
|
||||||
|
--ignore github.com/sentry/sentry \
|
||||||
|
--ignore github.com/segmentio/asm
|
||||||
|
|
||||||
|
npm-licenses:
|
||||||
|
name: npm license check (license-checker)
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 22
|
||||||
|
- working-directory: web
|
||||||
|
run: npm ci
|
||||||
|
- name: Check licenses
|
||||||
|
working-directory: web
|
||||||
|
run: |
|
||||||
|
npx --yes license-checker \
|
||||||
|
--onlyAllow "MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;0BSD;MPL-2.0" \
|
||||||
|
--excludePackages "[email protected]"
|
||||||
|
|
||||||
|
tenant-boundary:
|
||||||
|
name: Architectural boundary check
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- run: bash hack/check-tenant-boundary.sh
|
||||||
@@ -11,9 +11,14 @@ described there without flagging it to me first.
|
|||||||
- Distro-agnostic Linux agent: must run identically on RHEL/Debian/Arch/SUSE
|
- Distro-agnostic Linux agent: must run identically on RHEL/Debian/Arch/SUSE
|
||||||
derivatives via a statically-linked musl binary. No glibc runtime deps.
|
derivatives via a statically-linked musl binary. No glibc runtime deps.
|
||||||
- Windows support via native ETW/Event Log API, not a WSL shim.
|
- Windows support via native ETW/Event Log API, not a WSL shim.
|
||||||
- AGPLv3 for core + agents. Enterprise module (SSO/multi-tenancy/compliance)
|
- **AGPLv3 for the entire project, no exceptions.** The `enterprise/`
|
||||||
lives in a separate `enterprise/` directory under a commercial license stub
|
module (SSO/multi-tenancy/compliance) was under a commercial-license
|
||||||
— keep the boundary clean from day one, don't let AGPL code import from it.
|
stub from Phase 4 through Phase 5; Phase 6 relicensed it to AGPLv3,
|
||||||
|
matching core — see `/docs/compliance/license-audit-report.md` for the
|
||||||
|
full record and its business-model consequences. `enterprise/` stays a
|
||||||
|
separate directory that core never imports from, but that boundary is
|
||||||
|
now architectural only (keeps core buildable/deployable standalone,
|
||||||
|
keeps tenant resolution server-side), not a licensing wall.
|
||||||
- Schema-on-write with OTel semantic conventions as the default schema, with
|
- Schema-on-write with OTel semantic conventions as the default schema, with
|
||||||
schema-on-read fallback for unstructured text.
|
schema-on-read fallback for unstructured text.
|
||||||
- Every UI action must correspond to a documented REST/gRPC call. No
|
- Every UI action must correspond to a documented REST/gRPC call. No
|
||||||
@@ -279,8 +284,10 @@ through the *same* `IndexRegistry` the read side already used, and
|
|||||||
routes the write there instead of always into the default index. Unlike
|
routes the write there instead of always into the default index. Unlike
|
||||||
the ClickHouse side, this needed no "second binary": `IndexRegistry`
|
the ClickHouse side, this needed no "second binary": `IndexRegistry`
|
||||||
already lives in this AGPL-core binary (Tantivy has no grant system to
|
already lives in this AGPL-core binary (Tantivy has no grant system to
|
||||||
gate a commercially-licensed credential behind, so there was never an
|
gate a separately-credentialed binary behind, so there was never an
|
||||||
import-boundary reason to split it out), so read and write share one
|
import-boundary reason to split it out -- true regardless of licensing,
|
||||||
|
though at the time of writing `enterprise/` was still commercially
|
||||||
|
licensed; both sides are AGPLv3 as of Phase 6), so read and write share one
|
||||||
registry directly. The periodic Tantivy commit now commits every tenant
|
registry directly. The periodic Tantivy commit now commits every tenant
|
||||||
index that's seen a write, not just the default one
|
index that's seen a write, not just the default one
|
||||||
(`IndexRegistry::commit_all`). **The active-tenant gap this same change
|
(`IndexRegistry::commit_all`). **The active-tenant gap this same change
|
||||||
@@ -353,10 +360,12 @@ integrity guarantees, written for a prospective enterprise customer's
|
|||||||
security team.
|
security team.
|
||||||
|
|
||||||
The tenant-isolation, provisioning, SSO, and RBAC-enforcement mechanisms
|
The tenant-isolation, provisioning, SSO, and RBAC-enforcement mechanisms
|
||||||
live entirely in `enterprise/` (commercial license), confirmed
|
live entirely in `enterprise/` (commercial license at the time this
|
||||||
explicitly rather than assumed: AGPL core (`/api`, `/alerting`, `/web`)
|
section was written; relicensed to AGPLv3 in Phase 6, see that phase's
|
||||||
stays genuinely single-tenant, with no multi-tenant mechanism present at
|
section below), confirmed explicitly rather than assumed: core
|
||||||
all — `enterprise/` supplies tenant-scoped implementations of core's
|
(`/api`, `/alerting`, `/web`) stays genuinely single-tenant, with no
|
||||||
|
multi-tenant mechanism present at all — `enterprise/` supplies
|
||||||
|
tenant-scoped implementations of core's
|
||||||
already-shipped `querylang/executor.SQLRunner`/`SearchClient` interfaces
|
already-shipped `querylang/executor.SQLRunner`/`SearchClient` interfaces
|
||||||
rather than core growing tenant awareness. Query-compiler-level "compile
|
rather than core growing tenant awareness. Query-compiler-level "compile
|
||||||
time" enforcement, as originally proposed, turned out not to be
|
time" enforcement, as originally proposed, turned out not to be
|
||||||
@@ -448,6 +457,56 @@ Non-goals for this phase (same discipline as every phase so far):
|
|||||||
(time-series, bar, single-stat, heatmap, top-N) — real, disclosed
|
(time-series, bar, single-stat, heatmap, top-N) — real, disclosed
|
||||||
future work, not oversights.
|
future work, not oversights.
|
||||||
|
|
||||||
|
## What "done" looks like for Phase 6
|
||||||
|
|
||||||
|
**Status: shipped.** A full license-compliance audit and remediation
|
||||||
|
pass across the entire monorepo. Full report:
|
||||||
|
`/docs/compliance/license-audit-report.md`;
|
||||||
|
machine-readable inventory: `/docs/compliance/license-inventory.{csv,json}`
|
||||||
|
(776 rows, 502 unique dependencies across Rust/Go/npm plus Docker base
|
||||||
|
images and vendored assets); ongoing policy:
|
||||||
|
`/docs/compliance/license-policy.md`, now enforced in CI
|
||||||
|
(`.github/workflows/license-compliance.yml` — this repo's first CI
|
||||||
|
workflow file).
|
||||||
|
|
||||||
|
Every dependency was inventoried and classified; 774 of 776 rows
|
||||||
|
resolved cleanly to AGPLv3-compatible with real citations, not guesses
|
||||||
|
(see the audit report for the reasoning on each non-obvious case —
|
||||||
|
dual-licensed crates, MPL-2.0, a license-detector false negative on
|
||||||
|
`segmentio/asm`); `enterprise/` relicensed to AGPLv3 throughout the
|
||||||
|
repo, with the deliberate business-model consequence recorded (anyone,
|
||||||
|
including competitors, can now legally self-host or fork those
|
||||||
|
features); confirmed no license-gating/entitlement logic ever existed to
|
||||||
|
remove; a root `LICENSE` file added (there wasn't one before this
|
||||||
|
phase); CI enforcement wired up and every command verified locally.
|
||||||
|
|
||||||
|
**The one real flag — Redpanda's BSL 1.1 license (confirmed against
|
||||||
|
primary sources for the pinned v24.2.7, not assumed to still be
|
||||||
|
Apache-2.0) — is resolved, not outstanding**: decision recorded
|
||||||
|
2026-08-16, accept as-is. Sentry's own use (internal Kafka-protocol
|
||||||
|
transport, no resale of broker access) sits within BSL's Additional Use
|
||||||
|
Grant; the harder question — whether a third party self-hosting Sentry
|
||||||
|
"as a service" using the bundled `docker-compose.yml` could trip BSL's
|
||||||
|
anti-resale restriction on Redpanda specifically — was judged unlikely
|
||||||
|
given Sentry's ingest pipeline creates fixed internal topics, not
|
||||||
|
per-end-user ones, and was accepted as a disclosed, known risk rather
|
||||||
|
than triggering a swap to Apache Kafka (real resource-footprint cost) or
|
||||||
|
dropping the bundled broker image (rougher local dev experience). See
|
||||||
|
the audit report's Redpanda section for the full reasoning, the other
|
||||||
|
two options that were considered and not chosen, and the condition under
|
||||||
|
which this should be revisited (an official hosted/managed Sentry
|
||||||
|
offering, which would make the third-party-SaaS scenario Sentry's own
|
||||||
|
rather than a hypothetical one).
|
||||||
|
|
||||||
|
Non-goals for this phase: replacing permissively-licensed dependencies
|
||||||
|
with copyleft ones (explicitly out of scope per the phase's own brief);
|
||||||
|
per-file SPDX license headers across the monorepo's several thousand
|
||||||
|
source files (a deliberate choice — see the audit report's "Own license
|
||||||
|
declarations" section for why root `LICENSE` + manifest fields was
|
||||||
|
judged sufficient); redesigning `favicon.svg` (flagged as a leftover
|
||||||
|
SvelteKit scaffold asset, not a license blocker — a design task, not a
|
||||||
|
compliance one).
|
||||||
|
|
||||||
## When in doubt
|
## When in doubt
|
||||||
Ask before: changing the pinned stack, adding a new external dependency
|
Ask before: changing the pinned stack, adding a new external dependency
|
||||||
that pulls in a large transitive tree, or making an architectural decision
|
that pulls in a large transitive tree, or making an architectural decision
|
||||||
|
|||||||
@@ -0,0 +1,661 @@
|
|||||||
|
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 19 November 2007
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The GNU Affero General Public License is a free, copyleft license for
|
||||||
|
software and other kinds of works, specifically designed to ensure
|
||||||
|
cooperation with the community in the case of network server software.
|
||||||
|
|
||||||
|
The licenses for most software and other practical works are designed
|
||||||
|
to take away your freedom to share and change the works. By contrast,
|
||||||
|
our General Public Licenses are intended to guarantee your freedom to
|
||||||
|
share and change all versions of a program--to make sure it remains free
|
||||||
|
software for all its users.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
them if you wish), that you receive source code or can get it if you
|
||||||
|
want it, that you can change the software or use pieces of it in new
|
||||||
|
free programs, and that you know you can do these things.
|
||||||
|
|
||||||
|
Developers that use our General Public Licenses protect your rights
|
||||||
|
with two steps: (1) assert copyright on the software, and (2) offer
|
||||||
|
you this License which gives you legal permission to copy, distribute
|
||||||
|
and/or modify the software.
|
||||||
|
|
||||||
|
A secondary benefit of defending all users' freedom is that
|
||||||
|
improvements made in alternate versions of the program, if they
|
||||||
|
receive widespread use, become available for other developers to
|
||||||
|
incorporate. Many developers of free software are heartened and
|
||||||
|
encouraged by the resulting cooperation. However, in the case of
|
||||||
|
software used on network servers, this result may fail to come about.
|
||||||
|
The GNU General Public License permits making a modified version and
|
||||||
|
letting the public access it on a server without ever releasing its
|
||||||
|
source code to the public.
|
||||||
|
|
||||||
|
The GNU Affero General Public License is designed specifically to
|
||||||
|
ensure that, in such cases, the modified source code becomes available
|
||||||
|
to the community. It requires the operator of a network server to
|
||||||
|
provide the source code of the modified version running there to the
|
||||||
|
users of that server. Therefore, public use of a modified version, on
|
||||||
|
a publicly accessible server, gives the public access to the source
|
||||||
|
code of the modified version.
|
||||||
|
|
||||||
|
An older license, called the Affero General Public License and
|
||||||
|
published by Affero, was designed to accomplish similar goals. This is
|
||||||
|
a different license, not a version of the Affero GPL, but Affero has
|
||||||
|
released a new version of the Affero GPL which permits relicensing under
|
||||||
|
this license.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
0. Definitions.
|
||||||
|
|
||||||
|
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||||
|
|
||||||
|
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||||
|
works, such as semiconductor masks.
|
||||||
|
|
||||||
|
"The Program" refers to any copyrightable work licensed under this
|
||||||
|
License. Each licensee is addressed as "you". "Licensees" and
|
||||||
|
"recipients" may be individuals or organizations.
|
||||||
|
|
||||||
|
To "modify" a work means to copy from or adapt all or part of the work
|
||||||
|
in a fashion requiring copyright permission, other than the making of an
|
||||||
|
exact copy. The resulting work is called a "modified version" of the
|
||||||
|
earlier work or a work "based on" the earlier work.
|
||||||
|
|
||||||
|
A "covered work" means either the unmodified Program or a work based
|
||||||
|
on the Program.
|
||||||
|
|
||||||
|
To "propagate" a work means to do anything with it that, without
|
||||||
|
permission, would make you directly or secondarily liable for
|
||||||
|
infringement under applicable copyright law, except executing it on a
|
||||||
|
computer or modifying a private copy. Propagation includes copying,
|
||||||
|
distribution (with or without modification), making available to the
|
||||||
|
public, and in some countries other activities as well.
|
||||||
|
|
||||||
|
To "convey" a work means any kind of propagation that enables other
|
||||||
|
parties to make or receive copies. Mere interaction with a user through
|
||||||
|
a computer network, with no transfer of a copy, is not conveying.
|
||||||
|
|
||||||
|
An interactive user interface displays "Appropriate Legal Notices"
|
||||||
|
to the extent that it includes a convenient and prominently visible
|
||||||
|
feature that (1) displays an appropriate copyright notice, and (2)
|
||||||
|
tells the user that there is no warranty for the work (except to the
|
||||||
|
extent that warranties are provided), that licensees may convey the
|
||||||
|
work under this License, and how to view a copy of this License. If
|
||||||
|
the interface presents a list of user commands or options, such as a
|
||||||
|
menu, a prominent item in the list meets this criterion.
|
||||||
|
|
||||||
|
1. Source Code.
|
||||||
|
|
||||||
|
The "source code" for a work means the preferred form of the work
|
||||||
|
for making modifications to it. "Object code" means any non-source
|
||||||
|
form of a work.
|
||||||
|
|
||||||
|
A "Standard Interface" means an interface that either is an official
|
||||||
|
standard defined by a recognized standards body, or, in the case of
|
||||||
|
interfaces specified for a particular programming language, one that
|
||||||
|
is widely used among developers working in that language.
|
||||||
|
|
||||||
|
The "System Libraries" of an executable work include anything, other
|
||||||
|
than the work as a whole, that (a) is included in the normal form of
|
||||||
|
packaging a Major Component, but which is not part of that Major
|
||||||
|
Component, and (b) serves only to enable use of the work with that
|
||||||
|
Major Component, or to implement a Standard Interface for which an
|
||||||
|
implementation is available to the public in source code form. A
|
||||||
|
"Major Component", in this context, means a major essential component
|
||||||
|
(kernel, window system, and so on) of the specific operating system
|
||||||
|
(if any) on which the executable work runs, or a compiler used to
|
||||||
|
produce the work, or an object code interpreter used to run it.
|
||||||
|
|
||||||
|
The "Corresponding Source" for a work in object code form means all
|
||||||
|
the source code needed to generate, install, and (for an executable
|
||||||
|
work) run the object code and to modify the work, including scripts to
|
||||||
|
control those activities. However, it does not include the work's
|
||||||
|
System Libraries, or general-purpose tools or generally available free
|
||||||
|
programs which are used unmodified in performing those activities but
|
||||||
|
which are not part of the work. For example, Corresponding Source
|
||||||
|
includes interface definition files associated with source files for
|
||||||
|
the work, and the source code for shared libraries and dynamically
|
||||||
|
linked subprograms that the work is specifically designed to require,
|
||||||
|
such as by intimate data communication or control flow between those
|
||||||
|
subprograms and other parts of the work.
|
||||||
|
|
||||||
|
The Corresponding Source need not include anything that users
|
||||||
|
can regenerate automatically from other parts of the Corresponding
|
||||||
|
Source.
|
||||||
|
|
||||||
|
The Corresponding Source for a work in source code form is that
|
||||||
|
same work.
|
||||||
|
|
||||||
|
2. Basic Permissions.
|
||||||
|
|
||||||
|
All rights granted under this License are granted for the term of
|
||||||
|
copyright on the Program, and are irrevocable provided the stated
|
||||||
|
conditions are met. This License explicitly affirms your unlimited
|
||||||
|
permission to run the unmodified Program. The output from running a
|
||||||
|
covered work is covered by this License only if the output, given its
|
||||||
|
content, constitutes a covered work. This License acknowledges your
|
||||||
|
rights of fair use or other equivalent, as provided by copyright law.
|
||||||
|
|
||||||
|
You may make, run and propagate covered works that you do not
|
||||||
|
convey, without conditions so long as your license otherwise remains
|
||||||
|
in force. You may convey covered works to others for the sole purpose
|
||||||
|
of having them make modifications exclusively for you, or provide you
|
||||||
|
with facilities for running those works, provided that you comply with
|
||||||
|
the terms of this License in conveying all material for which you do
|
||||||
|
not control copyright. Those thus making or running the covered works
|
||||||
|
for you must do so exclusively on your behalf, under your direction
|
||||||
|
and control, on terms that prohibit them from making any copies of
|
||||||
|
your copyrighted material outside their relationship with you.
|
||||||
|
|
||||||
|
Conveying under any other circumstances is permitted solely under
|
||||||
|
the conditions stated below. Sublicensing is not allowed; section 10
|
||||||
|
makes it unnecessary.
|
||||||
|
|
||||||
|
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||||
|
|
||||||
|
No covered work shall be deemed part of an effective technological
|
||||||
|
measure under any applicable law fulfilling obligations under article
|
||||||
|
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||||
|
similar laws prohibiting or restricting circumvention of such
|
||||||
|
measures.
|
||||||
|
|
||||||
|
When you convey a covered work, you waive any legal power to forbid
|
||||||
|
circumvention of technological measures to the extent such circumvention
|
||||||
|
is effected by exercising rights under this License with respect to
|
||||||
|
the covered work, and you disclaim any intention to limit operation or
|
||||||
|
modification of the work as a means of enforcing, against the work's
|
||||||
|
users, your or third parties' legal rights to forbid circumvention of
|
||||||
|
technological measures.
|
||||||
|
|
||||||
|
4. Conveying Verbatim Copies.
|
||||||
|
|
||||||
|
You may convey verbatim copies of the Program's source code as you
|
||||||
|
receive it, in any medium, provided that you conspicuously and
|
||||||
|
appropriately publish on each copy an appropriate copyright notice;
|
||||||
|
keep intact all notices stating that this License and any
|
||||||
|
non-permissive terms added in accord with section 7 apply to the code;
|
||||||
|
keep intact all notices of the absence of any warranty; and give all
|
||||||
|
recipients a copy of this License along with the Program.
|
||||||
|
|
||||||
|
You may charge any price or no price for each copy that you convey,
|
||||||
|
and you may offer support or warranty protection for a fee.
|
||||||
|
|
||||||
|
5. Conveying Modified Source Versions.
|
||||||
|
|
||||||
|
You may convey a work based on the Program, or the modifications to
|
||||||
|
produce it from the Program, in the form of source code under the
|
||||||
|
terms of section 4, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The work must carry prominent notices stating that you modified
|
||||||
|
it, and giving a relevant date.
|
||||||
|
|
||||||
|
b) The work must carry prominent notices stating that it is
|
||||||
|
released under this License and any conditions added under section
|
||||||
|
7. This requirement modifies the requirement in section 4 to
|
||||||
|
"keep intact all notices".
|
||||||
|
|
||||||
|
c) You must license the entire work, as a whole, under this
|
||||||
|
License to anyone who comes into possession of a copy. This
|
||||||
|
License will therefore apply, along with any applicable section 7
|
||||||
|
additional terms, to the whole of the work, and all its parts,
|
||||||
|
regardless of how they are packaged. This License gives no
|
||||||
|
permission to license the work in any other way, but it does not
|
||||||
|
invalidate such permission if you have separately received it.
|
||||||
|
|
||||||
|
d) If the work has interactive user interfaces, each must display
|
||||||
|
Appropriate Legal Notices; however, if the Program has interactive
|
||||||
|
interfaces that do not display Appropriate Legal Notices, your
|
||||||
|
work need not make them do so.
|
||||||
|
|
||||||
|
A compilation of a covered work with other separate and independent
|
||||||
|
works, which are not by their nature extensions of the covered work,
|
||||||
|
and which are not combined with it such as to form a larger program,
|
||||||
|
in or on a volume of a storage or distribution medium, is called an
|
||||||
|
"aggregate" if the compilation and its resulting copyright are not
|
||||||
|
used to limit the access or legal rights of the compilation's users
|
||||||
|
beyond what the individual works permit. Inclusion of a covered work
|
||||||
|
in an aggregate does not cause this License to apply to the other
|
||||||
|
parts of the aggregate.
|
||||||
|
|
||||||
|
6. Conveying Non-Source Forms.
|
||||||
|
|
||||||
|
You may convey a covered work in object code form under the terms
|
||||||
|
of sections 4 and 5, provided that you also convey the
|
||||||
|
machine-readable Corresponding Source under the terms of this License,
|
||||||
|
in one of these ways:
|
||||||
|
|
||||||
|
a) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by the
|
||||||
|
Corresponding Source fixed on a durable physical medium
|
||||||
|
customarily used for software interchange.
|
||||||
|
|
||||||
|
b) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by a
|
||||||
|
written offer, valid for at least three years and valid for as
|
||||||
|
long as you offer spare parts or customer support for that product
|
||||||
|
model, to give anyone who possesses the object code either (1) a
|
||||||
|
copy of the Corresponding Source for all the software in the
|
||||||
|
product that is covered by this License, on a durable physical
|
||||||
|
medium customarily used for software interchange, for a price no
|
||||||
|
more than your reasonable cost of physically performing this
|
||||||
|
conveying of source, or (2) access to copy the
|
||||||
|
Corresponding Source from a network server at no charge.
|
||||||
|
|
||||||
|
c) Convey individual copies of the object code with a copy of the
|
||||||
|
written offer to provide the Corresponding Source. This
|
||||||
|
alternative is allowed only occasionally and noncommercially, and
|
||||||
|
only if you received the object code with such an offer, in accord
|
||||||
|
with subsection 6b.
|
||||||
|
|
||||||
|
d) Convey the object code by offering access from a designated
|
||||||
|
place (gratis or for a charge), and offer equivalent access to the
|
||||||
|
Corresponding Source in the same way through the same place at no
|
||||||
|
further charge. You need not require recipients to copy the
|
||||||
|
Corresponding Source along with the object code. If the place to
|
||||||
|
copy the object code is a network server, the Corresponding Source
|
||||||
|
may be on a different server (operated by you or a third party)
|
||||||
|
that supports equivalent copying facilities, provided you maintain
|
||||||
|
clear directions next to the object code saying where to find the
|
||||||
|
Corresponding Source. Regardless of what server hosts the
|
||||||
|
Corresponding Source, you remain obligated to ensure that it is
|
||||||
|
available for as long as needed to satisfy these requirements.
|
||||||
|
|
||||||
|
e) Convey the object code using peer-to-peer transmission, provided
|
||||||
|
you inform other peers where the object code and Corresponding
|
||||||
|
Source of the work are being offered to the general public at no
|
||||||
|
charge under subsection 6d.
|
||||||
|
|
||||||
|
A separable portion of the object code, whose source code is excluded
|
||||||
|
from the Corresponding Source as a System Library, need not be
|
||||||
|
included in conveying the object code work.
|
||||||
|
|
||||||
|
A "User Product" is either (1) a "consumer product", which means any
|
||||||
|
tangible personal property which is normally used for personal, family,
|
||||||
|
or household purposes, or (2) anything designed or sold for incorporation
|
||||||
|
into a dwelling. In determining whether a product is a consumer product,
|
||||||
|
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||||
|
product received by a particular user, "normally used" refers to a
|
||||||
|
typical or common use of that class of product, regardless of the status
|
||||||
|
of the particular user or of the way in which the particular user
|
||||||
|
actually uses, or expects or is expected to use, the product. A product
|
||||||
|
is a consumer product regardless of whether the product has substantial
|
||||||
|
commercial, industrial or non-consumer uses, unless such uses represent
|
||||||
|
the only significant mode of use of the product.
|
||||||
|
|
||||||
|
"Installation Information" for a User Product means any methods,
|
||||||
|
procedures, authorization keys, or other information required to install
|
||||||
|
and execute modified versions of a covered work in that User Product from
|
||||||
|
a modified version of its Corresponding Source. The information must
|
||||||
|
suffice to ensure that the continued functioning of the modified object
|
||||||
|
code is in no case prevented or interfered with solely because
|
||||||
|
modification has been made.
|
||||||
|
|
||||||
|
If you convey an object code work under this section in, or with, or
|
||||||
|
specifically for use in, a User Product, and the conveying occurs as
|
||||||
|
part of a transaction in which the right of possession and use of the
|
||||||
|
User Product is transferred to the recipient in perpetuity or for a
|
||||||
|
fixed term (regardless of how the transaction is characterized), the
|
||||||
|
Corresponding Source conveyed under this section must be accompanied
|
||||||
|
by the Installation Information. But this requirement does not apply
|
||||||
|
if neither you nor any third party retains the ability to install
|
||||||
|
modified object code on the User Product (for example, the work has
|
||||||
|
been installed in ROM).
|
||||||
|
|
||||||
|
The requirement to provide Installation Information does not include a
|
||||||
|
requirement to continue to provide support service, warranty, or updates
|
||||||
|
for a work that has been modified or installed by the recipient, or for
|
||||||
|
the User Product in which it has been modified or installed. Access to a
|
||||||
|
network may be denied when the modification itself materially and
|
||||||
|
adversely affects the operation of the network or violates the rules and
|
||||||
|
protocols for communication across the network.
|
||||||
|
|
||||||
|
Corresponding Source conveyed, and Installation Information provided,
|
||||||
|
in accord with this section must be in a format that is publicly
|
||||||
|
documented (and with an implementation available to the public in
|
||||||
|
source code form), and must require no special password or key for
|
||||||
|
unpacking, reading or copying.
|
||||||
|
|
||||||
|
7. Additional Terms.
|
||||||
|
|
||||||
|
"Additional permissions" are terms that supplement the terms of this
|
||||||
|
License by making exceptions from one or more of its conditions.
|
||||||
|
Additional permissions that are applicable to the entire Program shall
|
||||||
|
be treated as though they were included in this License, to the extent
|
||||||
|
that they are valid under applicable law. If additional permissions
|
||||||
|
apply only to part of the Program, that part may be used separately
|
||||||
|
under those permissions, but the entire Program remains governed by
|
||||||
|
this License without regard to the additional permissions.
|
||||||
|
|
||||||
|
When you convey a copy of a covered work, you may at your option
|
||||||
|
remove any additional permissions from that copy, or from any part of
|
||||||
|
it. (Additional permissions may be written to require their own
|
||||||
|
removal in certain cases when you modify the work.) You may place
|
||||||
|
additional permissions on material, added by you to a covered work,
|
||||||
|
for which you have or can give appropriate copyright permission.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, for material you
|
||||||
|
add to a covered work, you may (if authorized by the copyright holders of
|
||||||
|
that material) supplement the terms of this License with terms:
|
||||||
|
|
||||||
|
a) Disclaiming warranty or limiting liability differently from the
|
||||||
|
terms of sections 15 and 16 of this License; or
|
||||||
|
|
||||||
|
b) Requiring preservation of specified reasonable legal notices or
|
||||||
|
author attributions in that material or in the Appropriate Legal
|
||||||
|
Notices displayed by works containing it; or
|
||||||
|
|
||||||
|
c) Prohibiting misrepresentation of the origin of that material, or
|
||||||
|
requiring that modified versions of such material be marked in
|
||||||
|
reasonable ways as different from the original version; or
|
||||||
|
|
||||||
|
d) Limiting the use for publicity purposes of names of licensors or
|
||||||
|
authors of the material; or
|
||||||
|
|
||||||
|
e) Declining to grant rights under trademark law for use of some
|
||||||
|
trade names, trademarks, or service marks; or
|
||||||
|
|
||||||
|
f) Requiring indemnification of licensors and authors of that
|
||||||
|
material by anyone who conveys the material (or modified versions of
|
||||||
|
it) with contractual assumptions of liability to the recipient, for
|
||||||
|
any liability that these contractual assumptions directly impose on
|
||||||
|
those licensors and authors.
|
||||||
|
|
||||||
|
All other non-permissive additional terms are considered "further
|
||||||
|
restrictions" within the meaning of section 10. If the Program as you
|
||||||
|
received it, or any part of it, contains a notice stating that it is
|
||||||
|
governed by this License along with a term that is a further
|
||||||
|
restriction, you may remove that term. If a license document contains
|
||||||
|
a further restriction but permits relicensing or conveying under this
|
||||||
|
License, you may add to a covered work material governed by the terms
|
||||||
|
of that license document, provided that the further restriction does
|
||||||
|
not survive such relicensing or conveying.
|
||||||
|
|
||||||
|
If you add terms to a covered work in accord with this section, you
|
||||||
|
must place, in the relevant source files, a statement of the
|
||||||
|
additional terms that apply to those files, or a notice indicating
|
||||||
|
where to find the applicable terms.
|
||||||
|
|
||||||
|
Additional terms, permissive or non-permissive, may be stated in the
|
||||||
|
form of a separately written license, or stated as exceptions;
|
||||||
|
the above requirements apply either way.
|
||||||
|
|
||||||
|
8. Termination.
|
||||||
|
|
||||||
|
You may not propagate or modify a covered work except as expressly
|
||||||
|
provided under this License. Any attempt otherwise to propagate or
|
||||||
|
modify it is void, and will automatically terminate your rights under
|
||||||
|
this License (including any patent licenses granted under the third
|
||||||
|
paragraph of section 11).
|
||||||
|
|
||||||
|
However, if you cease all violation of this License, then your
|
||||||
|
license from a particular copyright holder is reinstated (a)
|
||||||
|
provisionally, unless and until the copyright holder explicitly and
|
||||||
|
finally terminates your license, and (b) permanently, if the copyright
|
||||||
|
holder fails to notify you of the violation by some reasonable means
|
||||||
|
prior to 60 days after the cessation.
|
||||||
|
|
||||||
|
Moreover, your license from a particular copyright holder is
|
||||||
|
reinstated permanently if the copyright holder notifies you of the
|
||||||
|
violation by some reasonable means, this is the first time you have
|
||||||
|
received notice of violation of this License (for any work) from that
|
||||||
|
copyright holder, and you cure the violation prior to 30 days after
|
||||||
|
your receipt of the notice.
|
||||||
|
|
||||||
|
Termination of your rights under this section does not terminate the
|
||||||
|
licenses of parties who have received copies or rights from you under
|
||||||
|
this License. If your rights have been terminated and not permanently
|
||||||
|
reinstated, you do not qualify to receive new licenses for the same
|
||||||
|
material under section 10.
|
||||||
|
|
||||||
|
9. Acceptance Not Required for Having Copies.
|
||||||
|
|
||||||
|
You are not required to accept this License in order to receive or
|
||||||
|
run a copy of the Program. Ancillary propagation of a covered work
|
||||||
|
occurring solely as a consequence of using peer-to-peer transmission
|
||||||
|
to receive a copy likewise does not require acceptance. However,
|
||||||
|
nothing other than this License grants you permission to propagate or
|
||||||
|
modify any covered work. These actions infringe copyright if you do
|
||||||
|
not accept this License. Therefore, by modifying or propagating a
|
||||||
|
covered work, you indicate your acceptance of this License to do so.
|
||||||
|
|
||||||
|
10. Automatic Licensing of Downstream Recipients.
|
||||||
|
|
||||||
|
Each time you convey a covered work, the recipient automatically
|
||||||
|
receives a license from the original licensors, to run, modify and
|
||||||
|
propagate that work, subject to this License. You are not responsible
|
||||||
|
for enforcing compliance by third parties with this License.
|
||||||
|
|
||||||
|
An "entity transaction" is a transaction transferring control of an
|
||||||
|
organization, or substantially all assets of one, or subdividing an
|
||||||
|
organization, or merging organizations. If propagation of a covered
|
||||||
|
work results from an entity transaction, each party to that
|
||||||
|
transaction who receives a copy of the work also receives whatever
|
||||||
|
licenses to the work the party's predecessor in interest had or could
|
||||||
|
give under the previous paragraph, plus a right to possession of the
|
||||||
|
Corresponding Source of the work from the predecessor in interest, if
|
||||||
|
the predecessor has it or can get it with reasonable efforts.
|
||||||
|
|
||||||
|
You may not impose any further restrictions on the exercise of the
|
||||||
|
rights granted or affirmed under this License. For example, you may
|
||||||
|
not impose a license fee, royalty, or other charge for exercise of
|
||||||
|
rights granted under this License, and you may not initiate litigation
|
||||||
|
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||||
|
any patent claim is infringed by making, using, selling, offering for
|
||||||
|
sale, or importing the Program or any portion of it.
|
||||||
|
|
||||||
|
11. Patents.
|
||||||
|
|
||||||
|
A "contributor" is a copyright holder who authorizes use under this
|
||||||
|
License of the Program or a work on which the Program is based. The
|
||||||
|
work thus licensed is called the contributor's "contributor version".
|
||||||
|
|
||||||
|
A contributor's "essential patent claims" are all patent claims
|
||||||
|
owned or controlled by the contributor, whether already acquired or
|
||||||
|
hereafter acquired, that would be infringed by some manner, permitted
|
||||||
|
by this License, of making, using, or selling its contributor version,
|
||||||
|
but do not include claims that would be infringed only as a
|
||||||
|
consequence of further modification of the contributor version. For
|
||||||
|
purposes of this definition, "control" includes the right to grant
|
||||||
|
patent sublicenses in a manner consistent with the requirements of
|
||||||
|
this License.
|
||||||
|
|
||||||
|
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||||
|
patent license under the contributor's essential patent claims, to
|
||||||
|
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||||
|
propagate the contents of its contributor version.
|
||||||
|
|
||||||
|
In the following three paragraphs, a "patent license" is any express
|
||||||
|
agreement or commitment, however denominated, not to enforce a patent
|
||||||
|
(such as an express permission to practice a patent or covenant not to
|
||||||
|
sue for patent infringement). To "grant" such a patent license to a
|
||||||
|
party means to make such an agreement or commitment not to enforce a
|
||||||
|
patent against the party.
|
||||||
|
|
||||||
|
If you convey a covered work, knowingly relying on a patent license,
|
||||||
|
and the Corresponding Source of the work is not available for anyone
|
||||||
|
to copy, free of charge and under the terms of this License, through a
|
||||||
|
publicly available network server or other readily accessible means,
|
||||||
|
then you must either (1) cause the Corresponding Source to be so
|
||||||
|
available, or (2) arrange to deprive yourself of the benefit of the
|
||||||
|
patent license for this particular work, or (3) arrange, in a manner
|
||||||
|
consistent with the requirements of this License, to extend the patent
|
||||||
|
license to downstream recipients. "Knowingly relying" means you have
|
||||||
|
actual knowledge that, but for the patent license, your conveying the
|
||||||
|
covered work in a country, or your recipient's use of the covered work
|
||||||
|
in a country, would infringe one or more identifiable patents in that
|
||||||
|
country that you have reason to believe are valid.
|
||||||
|
|
||||||
|
If, pursuant to or in connection with a single transaction or
|
||||||
|
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||||
|
covered work, and grant a patent license to some of the parties
|
||||||
|
receiving the covered work authorizing them to use, propagate, modify
|
||||||
|
or convey a specific copy of the covered work, then the patent license
|
||||||
|
you grant is automatically extended to all recipients of the covered
|
||||||
|
work and works based on it.
|
||||||
|
|
||||||
|
A patent license is "discriminatory" if it does not include within
|
||||||
|
the scope of its coverage, prohibits the exercise of, or is
|
||||||
|
conditioned on the non-exercise of one or more of the rights that are
|
||||||
|
specifically granted under this License. You may not convey a covered
|
||||||
|
work if you are a party to an arrangement with a third party that is
|
||||||
|
in the business of distributing software, under which you make payment
|
||||||
|
to the third party based on the extent of your activity of conveying
|
||||||
|
the work, and under which the third party grants, to any of the
|
||||||
|
parties who would receive the covered work from you, a discriminatory
|
||||||
|
patent license (a) in connection with copies of the covered work
|
||||||
|
conveyed by you (or copies made from those copies), or (b) primarily
|
||||||
|
for and in connection with specific products or compilations that
|
||||||
|
contain the covered work, unless you entered into that arrangement,
|
||||||
|
or that patent license was granted, prior to 28 March 2007.
|
||||||
|
|
||||||
|
Nothing in this License shall be construed as excluding or limiting
|
||||||
|
any implied license or other defenses to infringement that may
|
||||||
|
otherwise be available to you under applicable patent law.
|
||||||
|
|
||||||
|
12. No Surrender of Others' Freedom.
|
||||||
|
|
||||||
|
If conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot convey a
|
||||||
|
covered work so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you may
|
||||||
|
not convey it at all. For example, if you agree to terms that obligate you
|
||||||
|
to collect a royalty for further conveying from those to whom you convey
|
||||||
|
the Program, the only way you could satisfy both those terms and this
|
||||||
|
License would be to refrain entirely from conveying the Program.
|
||||||
|
|
||||||
|
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, if you modify the
|
||||||
|
Program, your modified version must prominently offer all users
|
||||||
|
interacting with it remotely through a computer network (if your version
|
||||||
|
supports such interaction) an opportunity to receive the Corresponding
|
||||||
|
Source of your version by providing access to the Corresponding Source
|
||||||
|
from a network server at no charge, through some standard or customary
|
||||||
|
means of facilitating copying of software. This Corresponding Source
|
||||||
|
shall include the Corresponding Source for any work covered by version 3
|
||||||
|
of the GNU General Public License that is incorporated pursuant to the
|
||||||
|
following paragraph.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, you have
|
||||||
|
permission to link or combine any covered work with a work licensed
|
||||||
|
under version 3 of the GNU General Public License into a single
|
||||||
|
combined work, and to convey the resulting work. The terms of this
|
||||||
|
License will continue to apply to the part which is the covered work,
|
||||||
|
but the work with which it is combined will remain governed by version
|
||||||
|
3 of the GNU General Public License.
|
||||||
|
|
||||||
|
14. Revised Versions of this License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions of
|
||||||
|
the GNU Affero General Public License from time to time. Such new versions
|
||||||
|
will be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Program specifies that a certain numbered version of the GNU Affero General
|
||||||
|
Public License "or any later version" applies to it, you have the
|
||||||
|
option of following the terms and conditions either of that numbered
|
||||||
|
version or of any later version published by the Free Software
|
||||||
|
Foundation. If the Program does not specify a version number of the
|
||||||
|
GNU Affero General Public License, you may choose any version ever published
|
||||||
|
by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Program specifies that a proxy can decide which future
|
||||||
|
versions of the GNU Affero General Public License can be used, that proxy's
|
||||||
|
public statement of acceptance of a version permanently authorizes you
|
||||||
|
to choose that version for the Program.
|
||||||
|
|
||||||
|
Later license versions may give you additional or different
|
||||||
|
permissions. However, no additional obligations are imposed on any
|
||||||
|
author or copyright holder as a result of your choosing to follow a
|
||||||
|
later version.
|
||||||
|
|
||||||
|
15. Disclaimer of Warranty.
|
||||||
|
|
||||||
|
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||||
|
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||||
|
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||||
|
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||||
|
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||||
|
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. Limitation of Liability.
|
||||||
|
|
||||||
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||||
|
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||||
|
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||||
|
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||||
|
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||||
|
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||||
|
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGES.
|
||||||
|
|
||||||
|
17. Interpretation of Sections 15 and 16.
|
||||||
|
|
||||||
|
If the disclaimer of warranty and limitation of liability provided
|
||||||
|
above cannot be given local legal effect according to their terms,
|
||||||
|
reviewing courts shall apply local law that most closely approximates
|
||||||
|
an absolute waiver of all civil liability in connection with the
|
||||||
|
Program, unless a warranty or assumption of liability accompanies a
|
||||||
|
copy of the Program in return for a fee.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
state the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If your software can interact with users remotely through a computer
|
||||||
|
network, you should also make sure that it provides a way for users to
|
||||||
|
get its source. For example, if your program is a web application, its
|
||||||
|
interface could display a "Source" link that leads users to an archive
|
||||||
|
of the code. There are many ways you could offer source, and different
|
||||||
|
solutions will be better for different programs; see section 13 for the
|
||||||
|
specific requirements.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or school,
|
||||||
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||||
|
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||||
|
<https://www.gnu.org/licenses/>.
|
||||||
+264
@@ -0,0 +1,264 @@
|
|||||||
|
# This template contains all of the possible sections and their default values
|
||||||
|
|
||||||
|
# Note that all fields that take a lint level have these possible values:
|
||||||
|
# * deny - An error will be produced and the check will fail
|
||||||
|
# * warn - A warning will be produced, but the check will not fail
|
||||||
|
# * allow - No warning or error will be produced, though in some cases a note
|
||||||
|
# will be
|
||||||
|
|
||||||
|
# The values provided in this template are the default values that will be used
|
||||||
|
# when any section or field is not specified in your own configuration
|
||||||
|
|
||||||
|
# Root options
|
||||||
|
|
||||||
|
# The graph table configures how the dependency graph is constructed and thus
|
||||||
|
# which crates the checks are performed against
|
||||||
|
[graph]
|
||||||
|
# If 1 or more target triples (and optionally, target_features) are specified,
|
||||||
|
# only the specified targets will be checked when running `cargo deny check`.
|
||||||
|
# This means, if a particular package is only ever used as a target specific
|
||||||
|
# dependency, such as, for example, the `nix` crate only being used via the
|
||||||
|
# `target_family = "unix"` configuration, that only having windows targets in
|
||||||
|
# this list would mean the nix crate, as well as any of its exclusive
|
||||||
|
# dependencies not shared by any other crates, would be ignored, as the target
|
||||||
|
# list here is effectively saying which targets you are building for.
|
||||||
|
targets = [
|
||||||
|
# The triple can be any string, but only the target triples built in to
|
||||||
|
# rustc (as of 1.40) can be checked against actual config expressions
|
||||||
|
#"x86_64-unknown-linux-musl",
|
||||||
|
# You can also specify which target_features you promise are enabled for a
|
||||||
|
# particular target. target_features are currently not validated against
|
||||||
|
# the actual valid features supported by the target architecture.
|
||||||
|
#{ triple = "wasm32-unknown-unknown", features = ["atomics"] },
|
||||||
|
]
|
||||||
|
# When creating the dependency graph used as the source of truth when checks are
|
||||||
|
# executed, this field can be used to prune crates from the graph, removing them
|
||||||
|
# from the view of cargo-deny. This is an extremely heavy hammer, as if a crate
|
||||||
|
# is pruned from the graph, all of its dependencies will also be pruned unless
|
||||||
|
# they are connected to another crate in the graph that hasn't been pruned,
|
||||||
|
# so it should be used with care. The identifiers are [Package ID Specifications]
|
||||||
|
# (https://doc.rust-lang.org/cargo/reference/pkgid-spec.html)
|
||||||
|
#exclude = []
|
||||||
|
# If true, metadata will be collected with `--all-features`. Note that this can't
|
||||||
|
# be toggled off if true, if you want to conditionally enable `--all-features` it
|
||||||
|
# is recommended to pass `--all-features` on the cmd line instead
|
||||||
|
all-features = false
|
||||||
|
# If true, metadata will be collected with `--no-default-features`. The same
|
||||||
|
# caveat with `all-features` applies
|
||||||
|
no-default-features = false
|
||||||
|
# If set, these feature will be enabled when collecting metadata. If `--features`
|
||||||
|
# is specified on the cmd line they will take precedence over this option.
|
||||||
|
#features = []
|
||||||
|
|
||||||
|
# The output table provides options for how/if diagnostics are outputted
|
||||||
|
[output]
|
||||||
|
# When outputting inclusion graphs in diagnostics that include features, this
|
||||||
|
# option can be used to specify the depth at which feature edges will be added.
|
||||||
|
# This option is included since the graphs can be quite large and the addition
|
||||||
|
# of features from the crate(s) to all of the graph roots can be far too verbose.
|
||||||
|
# This option can be overridden via `--feature-depth` on the cmd line
|
||||||
|
feature-depth = 1
|
||||||
|
|
||||||
|
# This section is considered when running `cargo deny check advisories`
|
||||||
|
# More documentation for the advisories section can be found here:
|
||||||
|
# https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html
|
||||||
|
[advisories]
|
||||||
|
# The path where the advisory databases are cloned/fetched into
|
||||||
|
#db-path = "$CARGO_HOME/advisory-dbs"
|
||||||
|
# The url(s) of the advisory databases to use
|
||||||
|
#db-urls = ["https://github.com/rustsec/advisory-db"]
|
||||||
|
# A list of advisory IDs to ignore. Note that ignored advisories will still
|
||||||
|
# output a note when they are encountered.
|
||||||
|
ignore = [
|
||||||
|
#"RUSTSEC-0000-0000",
|
||||||
|
#{ id = "RUSTSEC-0000-0000", reason = "you can specify a reason the advisory is ignored" },
|
||||||
|
#"[email protected]", # you can also ignore yanked crate versions if you wish
|
||||||
|
#{ crate = "[email protected]", reason = "you can specify why you are ignoring the yanked crate" },
|
||||||
|
]
|
||||||
|
# If this is true, then cargo deny will use the git executable to fetch advisory database.
|
||||||
|
# If this is false, then it uses a built-in git library.
|
||||||
|
# Setting this to true can be helpful if you have special authentication requirements that cargo-deny does not support.
|
||||||
|
# See Git Authentication for more information about setting up git authentication.
|
||||||
|
#git-fetch-with-cli = true
|
||||||
|
|
||||||
|
# This section is considered when running `cargo deny check licenses`
|
||||||
|
# More documentation for the licenses section can be found here:
|
||||||
|
# https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html
|
||||||
|
[licenses]
|
||||||
|
# List of explicitly allowed licenses
|
||||||
|
# See https://spdx.org/licenses/ for list of possible licenses
|
||||||
|
# [possible values: any SPDX 3.11 short identifier (+ optional exception)].
|
||||||
|
# Sentry's own AGPLv3-project license policy (Phase 6 license audit --
|
||||||
|
# see /docs/compliance/license-policy.md for the full rationale per
|
||||||
|
# category). Every license actually found in this crate's dependency
|
||||||
|
# tree at audit time is listed explicitly here, not just the common
|
||||||
|
# ones, so a genuinely new license shows up as a real CI failure, not
|
||||||
|
# something silently covered by a broad wildcard.
|
||||||
|
allow = [
|
||||||
|
"MIT",
|
||||||
|
"Apache-2.0",
|
||||||
|
"Apache-2.0 WITH LLVM-exception",
|
||||||
|
"BSD-2-Clause",
|
||||||
|
"BSD-3-Clause",
|
||||||
|
"ISC",
|
||||||
|
"0BSD",
|
||||||
|
"BSL-1.0",
|
||||||
|
"MPL-2.0",
|
||||||
|
"Unicode-3.0",
|
||||||
|
"Unlicense",
|
||||||
|
"Zlib",
|
||||||
|
"AGPL-3.0-only", # this project's own crates
|
||||||
|
]
|
||||||
|
# Deliberately NOT in the blanket allow list: LGPL-2.1-or-later,
|
||||||
|
# zlib-acknowledgement. Both currently appear only on crates that also
|
||||||
|
# offer a permissive alternative in an SPDX OR expression (r-efi:
|
||||||
|
# "MIT OR Apache-2.0 OR LGPL-2.1-or-later"; fastdivide:
|
||||||
|
# "MIT OR zlib-acknowledgement") -- cargo-deny accepts a crate if ANY
|
||||||
|
# license in its OR expression is allowed, so these pass via MIT/Apache-2.0
|
||||||
|
# without either weaker-copyleft license needing a blanket allow. A future
|
||||||
|
# crate offering ONLY one of these, with no permissive alternative, should
|
||||||
|
# fail this check and get manual (b)-category review, not sail through.
|
||||||
|
# The confidence threshold for detecting a license from license text.
|
||||||
|
# The higher the value, the more closely the license text must be to the
|
||||||
|
# canonical license text of a valid SPDX license file.
|
||||||
|
# [possible values: any between 0.0 and 1.0].
|
||||||
|
confidence-threshold = 0.8
|
||||||
|
# Allow 1 or more licenses on a per-crate basis, so that particular licenses
|
||||||
|
# aren't accepted for every possible crate as with the normal allow list
|
||||||
|
exceptions = [
|
||||||
|
# Each entry is the crate and version constraint, and its specific allow
|
||||||
|
# list
|
||||||
|
#{ allow = ["Zlib"], crate = "adler32" },
|
||||||
|
]
|
||||||
|
|
||||||
|
# Some crates don't have (easily) machine readable licensing information,
|
||||||
|
# adding a clarification entry for it allows you to manually specify the
|
||||||
|
# licensing information
|
||||||
|
#[[licenses.clarify]]
|
||||||
|
# The package spec the clarification applies to
|
||||||
|
#crate = "ring"
|
||||||
|
# The SPDX expression for the license requirements of the crate
|
||||||
|
#expression = "MIT AND ISC AND OpenSSL"
|
||||||
|
# One or more files in the crate's source used as the "source of truth" for
|
||||||
|
# the license expression. If the contents match, the clarification will be used
|
||||||
|
# when running the license check, otherwise the clarification will be ignored
|
||||||
|
# and the crate will be checked normally, which may produce warnings or errors
|
||||||
|
# depending on the rest of your configuration
|
||||||
|
#license-files = [
|
||||||
|
# Each entry is a crate relative path, and the (opaque) hash of its contents
|
||||||
|
#{ path = "LICENSE", hash = 0xbd0eed23 }
|
||||||
|
#]
|
||||||
|
|
||||||
|
[licenses.private]
|
||||||
|
# If true, ignores workspace crates that aren't published, or are only
|
||||||
|
# published to private registries.
|
||||||
|
# To see how to mark a crate as unpublished (to the official registry),
|
||||||
|
# visit https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field.
|
||||||
|
ignore = false
|
||||||
|
# One or more private registries that you might publish crates to, if a crate
|
||||||
|
# is only published to private registries, and ignore is true, the crate will
|
||||||
|
# not have its license(s) checked
|
||||||
|
registries = [
|
||||||
|
#"https://sekretz.com/registry
|
||||||
|
]
|
||||||
|
|
||||||
|
# This section is considered when running `cargo deny check bans`.
|
||||||
|
# More documentation about the 'bans' section can be found here:
|
||||||
|
# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html
|
||||||
|
[bans]
|
||||||
|
# Lint level for when multiple versions of the same crate are detected
|
||||||
|
multiple-versions = "warn"
|
||||||
|
# Lint level for when a crate version requirement is `*`
|
||||||
|
wildcards = "allow"
|
||||||
|
# The graph highlighting used when creating dotgraphs for crates
|
||||||
|
# with multiple versions
|
||||||
|
# * lowest-version - The path to the lowest versioned duplicate is highlighted
|
||||||
|
# * simplest-path - The path to the version with the fewest edges is highlighted
|
||||||
|
# * all - Both lowest-version and simplest-path are used
|
||||||
|
highlight = "all"
|
||||||
|
# The default lint level for `default` features for crates that are members of
|
||||||
|
# the workspace that is being checked. This can be overridden by allowing/denying
|
||||||
|
# `default` on a crate-by-crate basis if desired.
|
||||||
|
workspace-default-features = "allow"
|
||||||
|
# The default lint level for `default` features for external crates that are not
|
||||||
|
# members of the workspace. This can be overridden by allowing/denying `default`
|
||||||
|
# on a crate-by-crate basis if desired.
|
||||||
|
external-default-features = "allow"
|
||||||
|
# List of crates that are allowed. Use with care!
|
||||||
|
allow = [
|
||||||
|
#"[email protected]",
|
||||||
|
#{ crate = "[email protected]", reason = "you can specify a reason it is allowed" },
|
||||||
|
]
|
||||||
|
# If true, workspace members are automatically allowed even when using deny-by-default
|
||||||
|
# This is useful for organizations that want to deny all external dependencies by default
|
||||||
|
# but allow their own workspace crates without having to explicitly list them
|
||||||
|
allow-workspace = false
|
||||||
|
# List of crates to deny
|
||||||
|
deny = [
|
||||||
|
#"[email protected]",
|
||||||
|
#{ crate = "[email protected]", reason = "you can specify a reason it is banned" },
|
||||||
|
# Wrapper crates can optionally be specified to allow the crate when it
|
||||||
|
# is a direct dependency of the otherwise banned crate
|
||||||
|
#{ crate = "[email protected]", wrappers = ["this-crate-directly-depends-on-ansi_term"] },
|
||||||
|
]
|
||||||
|
|
||||||
|
# List of features to allow/deny
|
||||||
|
# Each entry the name of a crate and a version range. If version is
|
||||||
|
# not specified, all versions will be matched.
|
||||||
|
#[[bans.features]]
|
||||||
|
#crate = "reqwest"
|
||||||
|
# Features to not allow
|
||||||
|
#deny = ["json"]
|
||||||
|
# Features to allow
|
||||||
|
#allow = [
|
||||||
|
# "rustls",
|
||||||
|
# "__rustls",
|
||||||
|
# "__tls",
|
||||||
|
# "hyper-rustls",
|
||||||
|
# "rustls",
|
||||||
|
# "rustls-pemfile",
|
||||||
|
# "rustls-tls-webpki-roots",
|
||||||
|
# "tokio-rustls",
|
||||||
|
# "webpki-roots",
|
||||||
|
#]
|
||||||
|
# If true, the allowed features must exactly match the enabled feature set. If
|
||||||
|
# this is set there is no point setting `deny`
|
||||||
|
#exact = true
|
||||||
|
|
||||||
|
# Certain crates/versions that will be skipped when doing duplicate detection.
|
||||||
|
skip = [
|
||||||
|
#"[email protected]",
|
||||||
|
#{ crate = "[email protected]", reason = "you can specify a reason why it can't be updated/removed" },
|
||||||
|
]
|
||||||
|
# Similarly to `skip` allows you to skip certain crates during duplicate
|
||||||
|
# detection. Unlike skip, it also includes the entire tree of transitive
|
||||||
|
# dependencies starting at the specified crate, up to a certain depth, which is
|
||||||
|
# by default infinite.
|
||||||
|
skip-tree = [
|
||||||
|
#"[email protected]", # will be skipped along with _all_ of its direct and transitive dependencies
|
||||||
|
#{ crate = "[email protected]", depth = 20 },
|
||||||
|
]
|
||||||
|
|
||||||
|
# This section is considered when running `cargo deny check sources`.
|
||||||
|
# More documentation about the 'sources' section can be found here:
|
||||||
|
# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html
|
||||||
|
[sources]
|
||||||
|
# Lint level for what to happen when a crate from a crate registry that is not
|
||||||
|
# in the allow list is encountered
|
||||||
|
unknown-registry = "warn"
|
||||||
|
# Lint level for what to happen when a crate from a git repository that is not
|
||||||
|
# in the allow list is encountered
|
||||||
|
unknown-git = "warn"
|
||||||
|
# List of URLs for allowed crate registries. Defaults to the crates.io index
|
||||||
|
# if not specified. If it is specified but empty, no registries are allowed.
|
||||||
|
allow-registry = ["https://github.com/rust-lang/crates.io-index"]
|
||||||
|
# List of URLs for allowed Git repositories
|
||||||
|
allow-git = []
|
||||||
|
|
||||||
|
[sources.allow-org]
|
||||||
|
# github.com organizations to allow git sources for
|
||||||
|
github = []
|
||||||
|
# gitlab.com organizations to allow git sources for
|
||||||
|
gitlab = []
|
||||||
|
# bitbucket.org organizations to allow git sources for
|
||||||
|
bitbucket = []
|
||||||
+29
-15
@@ -79,8 +79,8 @@ This split is not to be changed without discussion — see CLAUDE.md.
|
|||||||
| `search` (Rust, Phase 1) | Consumes the same Redpanda topic `ingest` does (own offset tracking), builds a Tantivy full-text index over `message`, serves matches over gRPC. Writes always go to one shared (default) index (`ingest` isn't tenant-aware); reads can be scoped per-tenant via `SearchRequest.tenant_id` and `src/registry.rs`'s `IndexRegistry` (Phase 4) — see "Tenant isolation" below. |
|
| `search` (Rust, Phase 1) | Consumes the same Redpanda topic `ingest` does (own offset tracking), builds a Tantivy full-text index over `message`, serves matches over gRPC. Writes always go to one shared (default) index (`ingest` isn't tenant-aware); reads can be scoped per-tenant via `SearchRequest.tenant_id` and `src/registry.rs`'s `IndexRegistry` (Phase 4) — see "Tenant isolation" below. |
|
||||||
| `api` (Go) | gRPC + REST gateway. `POST /query` compiles pipe-syntax or raw SQL to one IR, executed across ClickHouse/Tantivy (`/docs/query-language-design.md`). `internal/dashboards` is CRUD only — panel query execution happens client-side, reusing `/query`. `internal/authz` (Phase 4) enforces RBAC via a network call to `enterprise-auth`, never an import. |
|
| `api` (Go) | gRPC + REST gateway. `POST /query` compiles pipe-syntax or raw SQL to one IR, executed across ClickHouse/Tantivy (`/docs/query-language-design.md`). `internal/dashboards` is CRUD only — panel query execution happens client-side, reusing `/query`. `internal/authz` (Phase 4) enforces RBAC via a network call to `enterprise-auth`, never an import. |
|
||||||
| `alerting` (Go, Phase 3) | Evaluates alert rules on an interval, calls `api`'s `POST /query` (via a `RoleService` credential once Phase 4 auth is configured — see `/docs/phase-4-isolation-design.md`'s alerting↔api gap), delivers firing/resolved notifications (webhook/Slack/PagerDuty). |
|
| `alerting` (Go, Phase 3) | Evaluates alert rules on an interval, calls `api`'s `POST /query` (via a `RoleService` credential once Phase 4 auth is configured — see `/docs/phase-4-isolation-design.md`'s alerting↔api gap), delivers firing/resolved notifications (webhook/Slack/PagerDuty). |
|
||||||
| `enterprise` (Go, commercial license, Phase 4) | OIDC login (`internal/loginhandler`'s `/auth/oidc/login`+`/auth/oidc/callback`) and SAML login (`/auth/saml/login`+`/auth/saml/acs`, via `internal/saml`'s `crewjam/saml` wiring) — both a real IdP round trip, each verified with a real fake IdP (`coreos/go-oidc`'s `oidctest`, `crewjam/saml`'s `samlidp`) but not a real external one, RBAC storage (`internal/rbacstore`), session/service-token issuance (`internal/session`), the append-only audit log (`internal/audit`), `enterprise-auth`'s HTTP surface (`/internal/authorize`, `/auth/features`), per-tenant ClickHouse provisioning (`internal/tenantprovision`) and query routing (`internal/chrunner`), and `cmd/enterprise-api` — a second binary combining core's `api/queryapi`/`api/dashboards` handlers with these tenant-aware implementations. Never imported by core — see "Licensing boundary" below. Also `internal/searchclient` (per-tenant Tantivy routing, wired the same way into `search`). |
|
| `enterprise` (Go, AGPLv3 — see "Licensing boundary" below, Phase 4) | OIDC login (`internal/loginhandler`'s `/auth/oidc/login`+`/auth/oidc/callback`) and SAML login (`/auth/saml/login`+`/auth/saml/acs`, via `internal/saml`'s `crewjam/saml` wiring) — both a real IdP round trip, each verified with a real fake IdP (`coreos/go-oidc`'s `oidctest`, `crewjam/saml`'s `samlidp`) but not a real external one, RBAC storage (`internal/rbacstore`), session/service-token issuance (`internal/session`), the append-only audit log (`internal/audit`), `enterprise-auth`'s HTTP surface (`/internal/authorize`, `/auth/features`), per-tenant ClickHouse provisioning (`internal/tenantprovision`) and query routing (`internal/chrunner`), and `cmd/enterprise-api` — a second binary combining core's `api/queryapi`/`api/dashboards` handlers with these tenant-aware implementations. Never imported by core — see "Licensing boundary" below. Also `internal/searchclient` (per-tenant Tantivy routing, wired the same way into `search`). |
|
||||||
| `web` (SvelteKit, static build) | Query bar, dashboards, alerts, and (Phase 4) a settings page that renders SSO status via a runtime capability check (`GET /auth/features`) rather than bundling enterprise-licensed components. |
|
| `web` (SvelteKit, static build) | Query bar, dashboards, alerts, and (Phase 4) a settings page that renders SSO status via a runtime capability check (`GET /auth/features`) rather than bundling `enterprise/`'s components directly — an architectural choice (core builds and runs standalone) that predates and doesn't depend on Phase 6's relicensing. |
|
||||||
| `cli` (`sentryctl`) | `ping`, `query`, `dashboards` (list/get/apply), `alerts` (list/get/apply). `$SENTRYCTL_TOKEN`, if set, is forwarded as a Bearer credential (Phase 4). |
|
| `cli` (`sentryctl`) | `ping`, `query`, `dashboards` (list/get/apply), `alerts` (list/get/apply). `$SENTRYCTL_TOKEN`, if set, is forwarded as a Bearer credential (Phase 4). |
|
||||||
| `deploy` | A Helm chart covering every `docker-compose.yml` service, plus (Phase 4) a small Go Operator managing one CRD (`Tenant`) that provisions a per-tenant ClickHouse credential Secret. Never applied to a live cluster in the environment this was built in — see `/deploy/README.md`'s verification section before trusting it. |
|
| `deploy` | A Helm chart covering every `docker-compose.yml` service, plus (Phase 4) a small Go Operator managing one CRD (`Tenant`) that provisions a per-tenant ClickHouse credential Secret. Never applied to a live cluster in the environment this was built in — see `/deploy/README.md`'s verification section before trusting it. |
|
||||||
|
|
||||||
@@ -169,9 +169,12 @@ escape hatch is opaque to any compiler-injected filter.
|
|||||||
(`search/src/registry.rs` + `enterprise/internal/searchclient`)
|
(`search/src/registry.rs` + `enterprise/internal/searchclient`)
|
||||||
already used, and writes there instead of always into the default
|
already used, and writes there instead of always into the default
|
||||||
index. No "second binary" needed here, unlike ClickHouse — Tantivy has
|
index. No "second binary" needed here, unlike ClickHouse — Tantivy has
|
||||||
no grant system to gate a commercially-licensed credential behind, so
|
no grant system to gate a separately-credentialed binary behind
|
||||||
`IndexRegistry` already lived directly in this AGPL-core binary, and
|
(originally written when that credential was commercially licensed;
|
||||||
read/write just share it. The active-tenant gap this design left open
|
the split was never actually about which license `enterprise/`
|
||||||
|
carried, only about ClickHouse's grant system being the thing worth
|
||||||
|
isolating), so `IndexRegistry` already lived directly in this AGPL-core
|
||||||
|
binary, and read/write just share it. The active-tenant gap this design left open
|
||||||
is now closed too: `search/src/tenants.rs`'s `ActiveTenantTracker`
|
is now closed too: `search/src/tenants.rs`'s `ActiveTenantTracker`
|
||||||
polls a new `GET /internal/active-tenants` endpoint on
|
polls a new `GET /internal/active-tenants` endpoint on
|
||||||
`enterprise-auth` — `search` has no Postgres access, so unlike
|
`enterprise-auth` — `search` has no Postgres access, so unlike
|
||||||
@@ -219,16 +222,27 @@ IdP or a real running multi-container deployment.
|
|||||||
|
|
||||||
## Licensing boundary
|
## Licensing boundary
|
||||||
|
|
||||||
AGPLv3 for core + agents. Enterprise features (SSO, RBAC storage, audit
|
**AGPLv3 for the entire project**, including `enterprise/` — as of
|
||||||
logging) live under `enterprise/` (commercial license stub, added
|
Phase 6, there is no separate commercial-license carve-out anywhere in
|
||||||
Phase 4). AGPL code must never import from `enterprise/` — enforced in
|
this repo. `enterprise/` (added Phase 4 under a commercial-license stub,
|
||||||
CI by `hack/check-tenant-boundary.sh`, which greps every build for the
|
covering SSO, RBAC storage, audit logging) was relicensed to AGPLv3 in
|
||||||
import edge. Where core needs a decision only `enterprise/` can make
|
Phase 6; see `/docs/compliance/license-audit-report.md` for the full
|
||||||
(is this request authorized, what SSO is configured), it calls
|
record of that decision, including the deliberate business-model
|
||||||
`enterprise-auth` over plain HTTP instead
|
consequence: anyone, including competitors, can now legally self-host or
|
||||||
(`api/authz.HTTPAuthorizer`, `web`'s `GET /auth/features`) —
|
fork those features under AGPLv3's terms.
|
||||||
the same "network boundary, not import boundary" shape `/alerting`↔`api`
|
|
||||||
already used before `enterprise/` existed.
|
Core still never imports from `enterprise/` — enforced in CI by
|
||||||
|
`hack/check-tenant-boundary.sh`, which greps every build for the import
|
||||||
|
edge — but this is now purely an **architectural** boundary, not a
|
||||||
|
licensing one. It exists so core stays buildable and deployable with
|
||||||
|
zero multi-tenant mechanism present regardless of what license either
|
||||||
|
side carries, and so tenant identity resolution stays server-side rather
|
||||||
|
than trusting a request parameter — see `/docs/phase-4-isolation-design.md`.
|
||||||
|
Where core needs a decision only `enterprise/` can make (is this request
|
||||||
|
authorized, what SSO is configured), it calls `enterprise-auth` over
|
||||||
|
plain HTTP instead (`api/authz.HTTPAuthorizer`, `web`'s
|
||||||
|
`GET /auth/features`) — the same "network boundary, not import boundary"
|
||||||
|
shape `/alerting`↔`api` already used before `enterprise/` existed.
|
||||||
|
|
||||||
## Non-negotiables carried from CLAUDE.md
|
## Non-negotiables carried from CLAUDE.md
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,412 @@
|
|||||||
|
# License compliance audit report — Phase 6
|
||||||
|
|
||||||
|
**This report is a strong first pass, not a legal opinion.** It should
|
||||||
|
be reviewed by actual legal counsel before the project is publicly
|
||||||
|
released, pitched to customers, or used as the basis for any compliance
|
||||||
|
claim. Nothing in this document should be represented to a third party
|
||||||
|
as legal advice or a certified compliance determination.
|
||||||
|
|
||||||
|
## Scope and goal
|
||||||
|
|
||||||
|
Every component in the monorepo — `/agent`, `/transport`, `/ingest`,
|
||||||
|
`/storage`, `/api`, `/web`, `/cli`, `/deploy`, and `enterprise/` — is
|
||||||
|
licensed AGPLv3, with no separate commercial-license carve-out anywhere
|
||||||
|
in the project. This audit inventories every third-party dependency
|
||||||
|
across every language ecosystem, classifies each for AGPLv3
|
||||||
|
compatibility, resolves or explicitly flags anything that doesn't
|
||||||
|
resolve cleanly, and stands up CI enforcement so this doesn't need to be
|
||||||
|
manually re-audited from scratch every time a dependency changes.
|
||||||
|
|
||||||
|
This is a compatibility audit, not a "replace every permissively
|
||||||
|
licensed library" exercise. MIT, Apache-2.0, BSD, and ISC dependencies
|
||||||
|
are all fine to depend on from AGPLv3 code. The concern is dependencies
|
||||||
|
with licenses that are genuinely incompatible, impose unaccounted-for
|
||||||
|
obligations, or aren't open source at all (source-available licenses
|
||||||
|
like BSL/SSPL, anything with a field-of-use or non-compete restriction).
|
||||||
|
|
||||||
|
## Methodology
|
||||||
|
|
||||||
|
1. **Inventory** every dependency, direct and transitive, in every
|
||||||
|
language ecosystem present in the repo:
|
||||||
|
- **Rust** (`agent` workspace: `sentry-agent`, `sentry-parser`;
|
||||||
|
`search`): `cargo-deny` (`cargo deny list --format tsv`), installed
|
||||||
|
fresh for this audit (`cargo install cargo-deny --locked`).
|
||||||
|
- **Go** (`api`, `ingest`, `alerting`, `enterprise`,
|
||||||
|
`deploy/operator`, `terraform`, `proto`,
|
||||||
|
`hack/benchmark-fixture`, `hack/windows-fixture` — every module with
|
||||||
|
real third-party dependencies; `cli`, `hack/webhook-sink`, and
|
||||||
|
`hack/alert-load-test` are stdlib-only, confirmed by inspecting
|
||||||
|
their `go.mod` files, not scanned): `go-licenses`
|
||||||
|
(`google/go-licenses`, installed via `go install ...@latest`),
|
||||||
|
`go-licenses csv ./...` per module.
|
||||||
|
- **npm** (`web`): `license-checker` (`npx license-checker --json`).
|
||||||
|
- **Vendored/non-manifest content**: a repo-wide grep for
|
||||||
|
copy/attribution markers ("adapted from", "copied from",
|
||||||
|
"stackoverflow", stray copyright headers, "vendored") — zero hits.
|
||||||
|
A separate pass for binary/asset files (fonts, icons, images)
|
||||||
|
outside `node_modules`/build output — two font files and one SVG
|
||||||
|
found, see below. Docker base images referenced in
|
||||||
|
`docker-compose.yml` were pulled out and reviewed manually, since
|
||||||
|
they're not a language-ecosystem dependency any of the three
|
||||||
|
scanners above would see.
|
||||||
|
2. **Classify** every distinct license found into: (a) clearly
|
||||||
|
compatible as a dependency, (b) requires a closer look, (c) actually
|
||||||
|
incompatible or non-open-source. Every (b)/(c) result is cited with
|
||||||
|
real reasoning below, not asserted.
|
||||||
|
3. **Named risk areas** (Redpanda's licensing history, ClickHouse client
|
||||||
|
libraries, Phase 5 font/asset files, Kubernetes Operator tooling)
|
||||||
|
checked explicitly, against primary sources (actual license files at
|
||||||
|
the actual pinned versions/tags), not general recollection.
|
||||||
|
4. **Remediation** options recorded for every (c)/unresolved-(b) item —
|
||||||
|
fix, isolate, or flag for a business decision. Nothing was silently
|
||||||
|
swapped.
|
||||||
|
5. **Own license declarations audited**: root `LICENSE` file, per-ecosystem
|
||||||
|
manifest `license` fields, and a repo-wide check for any file still
|
||||||
|
claiming a license other than AGPLv3.
|
||||||
|
6. **`enterprise/` relicensed** to AGPLv3, closing the former
|
||||||
|
commercial-license carve-out project-wide.
|
||||||
|
7. **CI enforcement** stood up so this audit's findings don't silently
|
||||||
|
go stale.
|
||||||
|
|
||||||
|
## Inventory summary
|
||||||
|
|
||||||
|
Full machine-readable inventory: `/docs/compliance/license-inventory.csv`
|
||||||
|
and `.json` (columns: `component`, `dependency`, `version`, `license`,
|
||||||
|
`direct_or_transitive`, `ecosystem`, `flagged`, `flag_reason`,
|
||||||
|
`classification`).
|
||||||
|
|
||||||
|
| Ecosystem | Component-scoped rows | Unique dependencies | Flagged (unique) |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Rust (cargo) | 440 | — | 4 |
|
||||||
|
| Go | 255 | — | 9 (`segmentio/asm` + 8 HashiCorp MPL-2.0 packages) |
|
||||||
|
| npm | 75 | — | 3 |
|
||||||
|
| Docker base images | 3 | 3 | 1 (Redpanda) |
|
||||||
|
| Font/vendored assets | 3 | 3 | 1 (favicon) |
|
||||||
|
| **Total** | **776** | **502** | **23** (~4.6%) |
|
||||||
|
|
||||||
|
Rows double-count dependencies shared across multiple components by
|
||||||
|
design (e.g. `pgx` appears once per Go module that imports it) — that's
|
||||||
|
what makes the `component` column meaningful. All 502 unique
|
||||||
|
dependencies resolved to classification (a) except one: Redpanda,
|
||||||
|
classification (c), recorded below with remediation options rather than
|
||||||
|
resolved unilaterally.
|
||||||
|
|
||||||
|
## Classification results
|
||||||
|
|
||||||
|
**774 of 776 rows (all but Redpanda and the favicon asset) classify as
|
||||||
|
(a): clearly compatible.** No dependency in this project's tree required
|
||||||
|
a genuine (b)-category deep-dive that didn't resolve cleanly — every
|
||||||
|
item that looked ambiguous at first pass (dual-licensed with a copyleft
|
||||||
|
option, a non-standard license file, an unfamiliar SPDX identifier)
|
||||||
|
turned out, on actual inspection, to resolve to (a) once read carefully.
|
||||||
|
That's a real result of doing the reading, not an assumption going in —
|
||||||
|
recorded below per item so the reasoning is checkable.
|
||||||
|
|
||||||
|
### Dual/multi-licensed crates electing a permissive branch (Rust)
|
||||||
|
|
||||||
|
Four Rust crates carry an SPDX OR expression that includes a
|
||||||
|
copyleft/less-common option alongside a permissive one. Standard
|
||||||
|
practice for a disjunctive license grant is that the downstream user
|
||||||
|
elects whichever listed option they prefer — we elect the permissive
|
||||||
|
branch in every case, incurring zero copyleft obligation:
|
||||||
|
|
||||||
|
| Crate | License expression | Elected | Note |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `r-efi` | `MIT OR Apache-2.0 OR LGPL-2.1-or-later` | MIT/Apache-2.0 | Build-dependency only (via `tonic-build`→`prost-build`→`tempfile`→`getrandom`), for a UEFI target this project doesn't build for — doesn't even ship in a release artifact. |
|
||||||
|
| `fastdivide` | `MIT OR zlib-acknowledgement` | MIT | |
|
||||||
|
| `htmlescape` | `Apache-2.0 / MIT / MPL-2.0` | Apache-2.0/MIT | MPL-2.0 would also have been fine on its own merits (see below). |
|
||||||
|
| `ryu` | `Apache-2.0 OR BSL-1.0` | Apache-2.0 | `BSL-1.0` here is the Boost Software License — permissive, unrelated to Redpanda's Business Source License below despite the shared abbreviation. |
|
||||||
|
|
||||||
|
### MPL-2.0 (Go, npm, and one Rust option above)
|
||||||
|
|
||||||
|
MPL-2.0 is file-level (weak) copyleft: modifications to MPL-covered
|
||||||
|
*files* must stay available under MPL if distributed, but combining
|
||||||
|
MPL-covered code into a larger differently-licensed work — including an
|
||||||
|
AGPLv3 work — does not require the larger work to relicense (MPL 2.0
|
||||||
|
§3.3, "Distribution of a Larger Work"). Pre-cleared as category (a) per
|
||||||
|
this audit's own scope definition. Found in:
|
||||||
|
|
||||||
|
- **Go** (`/terraform` only, HashiCorp's Terraform provider SDK and its
|
||||||
|
own dependencies): `go-plugin`, `go-uuid`, `terraform-plugin-framework`,
|
||||||
|
`terraform-plugin-go`, `terraform-plugin-log`, `terraform-registry-address`,
|
||||||
|
`terraform-svchost`, `yamux`. Lower risk still than the general case:
|
||||||
|
`/terraform` is its own standalone Go module producing a Terraform
|
||||||
|
provider plugin binary, not linked into any core service.
|
||||||
|
- **npm**: `axe-core` (dev-only, used for the Phase 5 accessibility
|
||||||
|
sweep, never shipped), `lightningcss` + its platform-specific native
|
||||||
|
binary (a transitive dependency of Vite's CSS pipeline — build-time
|
||||||
|
only, never bundled into `web`'s shipped static output).
|
||||||
|
|
||||||
|
### `segmentio/asm` — tool detection gap, not a real license question (Go)
|
||||||
|
|
||||||
|
`go-licenses` reported `Unknown` for every sub-package of
|
||||||
|
`github.com/segmentio/asm` (a transitive dependency via the ClickHouse
|
||||||
|
Go driver). Its actual `LICENSE` file (read directly from the module
|
||||||
|
cache) is headed "MIT No Attribution" — SPDX `MIT-0`, a permissive MIT
|
||||||
|
variant that drops the attribution requirement. The auto-detector's
|
||||||
|
regex didn't recognize that non-standard heading text. Confirmed by
|
||||||
|
reading the file, not assumed; carried as an explicit CI ignore with
|
||||||
|
this citation (see the policy doc) rather than silently added to the
|
||||||
|
general allow-list.
|
||||||
|
|
||||||
|
### Named risk areas (task 3)
|
||||||
|
|
||||||
|
- **ClickHouse client libraries** (`github.com/ClickHouse/clickhouse-go/v2`,
|
||||||
|
`github.com/ClickHouse/ch-go`): Apache-2.0, matching the server itself.
|
||||||
|
No divergence.
|
||||||
|
- **Kubernetes Operator tooling** (`sigs.k8s.io/controller-runtime`,
|
||||||
|
`k8s.io/client-go`, `k8s.io/apimachinery`): Apache-2.0 (one forked
|
||||||
|
sub-package, `apimachinery/third_party/forked/golang`, is BSD-3-Clause
|
||||||
|
— also fine). The concern about "generated boilerplate's license
|
||||||
|
headers" turned out not to apply: `deploy/operator/api/v1alpha1/
|
||||||
|
zz_generated.deepcopy.go` is, despite its name, **hand-written**, not
|
||||||
|
actually produced by `controller-gen` (no kubebuilder/controller-gen
|
||||||
|
binary was available when it was built — disclosed in the file's own
|
||||||
|
doc comment and in `/deploy/README.md`). There's no real
|
||||||
|
upstream-generated boilerplate to check for header drift against.
|
||||||
|
- **Phase 5 font/asset files**: see below.
|
||||||
|
|
||||||
|
## Redpanda — classification (c), recorded for a business decision
|
||||||
|
|
||||||
|
**The pinned Redpanda image (`docker.redpanda.com/redpandadata/redpanda:v24.2.7`,
|
||||||
|
`docker-compose.yml` and `transport/`) ships under BSL 1.1 (Business
|
||||||
|
Source License), confirmed against the actual `licenses/bsl.md` file at
|
||||||
|
that tag** (`github.com/redpanda-data/redpanda`, tag `v24.2.7`) — not
|
||||||
|
assumed from general familiarity with Redpanda's licensing history,
|
||||||
|
which the audit brief specifically warned has shifted over time.
|
||||||
|
|
||||||
|
Key facts, verified against primary sources:
|
||||||
|
- **Not OSI-approved open source.** BSL is explicitly source-available,
|
||||||
|
matching this audit's own category-(c) definition.
|
||||||
|
- **Change Date**: 4 years from each version's release date, after which
|
||||||
|
that version's `Licensed Work` converts to Apache-2.0. v24.2.7 was
|
||||||
|
released 2024-10-11 (confirmed via the GitHub Releases API) — its
|
||||||
|
Change Date is ~2028-10-11. As of this audit, it has **not** yet
|
||||||
|
converted.
|
||||||
|
- **The restriction is narrow**: BSL's Additional Use Grant permits any
|
||||||
|
use except offering the Licensed Work as a "Streaming or Queuing
|
||||||
|
Service" to third parties (defined as a commercial offering letting
|
||||||
|
third parties create topics in the Licensed Work, e.g. a hosted Kafka
|
||||||
|
broker product). This project's `docker-compose.yml` uses only
|
||||||
|
plaintext core Kafka-protocol functionality — no RCL-gated enterprise
|
||||||
|
features, no tiered storage, no SASL/RBAC — squarely within the
|
||||||
|
permitted grant as an internal transport layer.
|
||||||
|
- **No AGPL linking/compatibility issue.** Sentry never links against
|
||||||
|
Redpanda's code; it's consumed purely over the Kafka wire protocol, the
|
||||||
|
same relationship as ClickHouse and Postgres. AGPLv3's copyleft
|
||||||
|
doesn't reach across a network-protocol boundary to unrelated,
|
||||||
|
separately-licensed software you merely talk to.
|
||||||
|
- **The genuinely open question**: Phase 6 relicenses `enterprise/` to
|
||||||
|
AGPLv3 specifically so that anyone, including competitors, can legally
|
||||||
|
self-host or fork Sentry — including offering it as a network service,
|
||||||
|
per AGPLv3's own terms. If a third party does that using the bundled
|
||||||
|
`docker-compose.yml` (which pulls this BSL-licensed Redpanda image),
|
||||||
|
does *their* deployment trip BSL's Streaming-or-Queuing-Service
|
||||||
|
restriction? Sentry's ingest pipeline creates fixed internal topics,
|
||||||
|
not per-end-user topics exposed for direct third-party production or
|
||||||
|
consumption — so this is very likely **not** a Streaming-or-Queuing-Service
|
||||||
|
under BSL's own definition. But this is a business/redistribution
|
||||||
|
judgment call about a hypothetical third party's use, not a pure
|
||||||
|
technical compatibility question this audit can close unilaterally.
|
||||||
|
|
||||||
|
### Remediation options (recorded per task 4's requirement)
|
||||||
|
|
||||||
|
1. **Accept as-is.** Document the reasoning above; Sentry's own use is
|
||||||
|
clearly within BSL's permitted grant, and the third-party-SaaS
|
||||||
|
scenario is a reasonable-but-unverified reading, not a known
|
||||||
|
violation. Lowest effort, zero functional change.
|
||||||
|
2. **Swap to Apache Kafka** (Apache-2.0, genuinely OSI open source).
|
||||||
|
`apache/kafka` (KRaft mode, no ZooKeeper needed as of Kafka 3.x) is
|
||||||
|
wire-protocol-compatible with everything `transport`/`ingest`/`search`
|
||||||
|
already speak. Real tradeoff: Redpanda was originally chosen partly
|
||||||
|
for its lightweight single-binary footprint (`docker-compose.yml`
|
||||||
|
runs it with `--smp=1 --memory=1G --overprovisioned`, tuned for a
|
||||||
|
resource-constrained local/homelab deployment per `CLAUDE.md`'s
|
||||||
|
stated deployment targets); Kafka's JVM-based broker has a materially
|
||||||
|
larger minimum memory/startup footprint. This is a real regression
|
||||||
|
for the project's stated "docker-compose for local/homelab" use case,
|
||||||
|
not a drop-in swap with no cost.
|
||||||
|
3. **Stop bundling a pinned broker image at all.** `transport/` already
|
||||||
|
has no application code of its own — it's a thin `docker-compose`
|
||||||
|
wrapper and topic-provisioning script. Document Kafka-API
|
||||||
|
compatibility as the requirement and let the operator supply their
|
||||||
|
own broker (self-installed Apache Kafka, their own separately-licensed
|
||||||
|
Redpanda, or anything else wire-compatible). This moves the
|
||||||
|
redistribution question out of this project's own `docker-compose.yml`
|
||||||
|
entirely, at the cost of a rougher out-of-the-box local dev experience
|
||||||
|
(an extra manual setup step instead of `docker compose up`).
|
||||||
|
|
||||||
|
**Decision recorded 2026-08-16: option 1, accept as-is.** No code or
|
||||||
|
deployment change was made as a result — Redpanda stays pinned at
|
||||||
|
v24.2.7 in `docker-compose.yml`/`transport/`, under BSL 1.1, as a
|
||||||
|
disclosed and accepted risk rather than an unresolved one. This
|
||||||
|
decision should be revisited if the project's redistribution posture
|
||||||
|
changes materially (e.g. an official hosted/managed offering of Sentry
|
||||||
|
itself, which would make the third-party-SaaS reading in this section
|
||||||
|
Sentry's *own* situation rather than a hypothetical third party's).
|
||||||
|
|
||||||
|
## Non-license finding: `favicon.svg`
|
||||||
|
|
||||||
|
`web/src/lib/assets/favicon.svg` is SvelteKit's own default project
|
||||||
|
scaffold logo (`<title>svelte-logo</title>` — the `sv create`/`create-svelte`
|
||||||
|
starter icon), never replaced with an original mark during Phase 5's
|
||||||
|
redesign. Not a license-compatibility blocker — Svelte's own project
|
||||||
|
assets are MIT-licensed — but it's unauthored, third-party-branded
|
||||||
|
content shipping as this product's own favicon, caught by the same
|
||||||
|
"grep for anything that looks copied" pass this audit's task 1 asked
|
||||||
|
for. Recorded as an action item (replace with an original Sentry mark),
|
||||||
|
not a compliance blocker; not fixed here since it's a design task outside
|
||||||
|
this phase's scope, not a licensing one.
|
||||||
|
|
||||||
|
## Own license declarations (task 5)
|
||||||
|
|
||||||
|
**Before this audit**: no root `LICENSE` file existed anywhere in the
|
||||||
|
repo — not at the root, not in `enterprise/`. The only license
|
||||||
|
declarations were prose statements in `CLAUDE.md`/`docs/architecture.md`
|
||||||
|
and correct `license = "AGPL-3.0-only"` fields in the two Rust
|
||||||
|
workspaces' `Cargo.toml`s. `web/package.json` had no `license` field at
|
||||||
|
all (npm's tooling reported the package itself as `UNLICENSED` as a
|
||||||
|
result). `web/static/fonts/LICENSE.txt` was a paraphrase describing the
|
||||||
|
Overpass font's license, not the actual OFL-1.1 license text.
|
||||||
|
|
||||||
|
**Fixed**:
|
||||||
|
- Added `/LICENSE` — the verbatim, unmodified AGPLv3 text from
|
||||||
|
`gnu.org/licenses/agpl-3.0.txt`, byte-for-byte, not paraphrased.
|
||||||
|
- **Chosen convention, applied consistently**: one root `LICENSE` file
|
||||||
|
governs the whole monorepo, plus a `license` field in every ecosystem
|
||||||
|
manifest that supports one (`Cargo.toml`'s `license`/`license.workspace`,
|
||||||
|
now confirmed correct; `package.json`'s `license`, added:
|
||||||
|
`"AGPL-3.0-only"`). Go has no manifest-level license field — the
|
||||||
|
standard convention (and what `go-licenses` itself looks for) is the
|
||||||
|
root `LICENSE` file, which now exists. **Deliberately not** adopting
|
||||||
|
per-file SPDX header comments across the monorepo's several thousand
|
||||||
|
source files: headers are an FSF best-practice recommendation, not a
|
||||||
|
legal requirement once a correct root `LICENSE` plus copyright
|
||||||
|
ownership is established, and retrofitting them here would be a huge
|
||||||
|
mechanical change for very little incremental legal value over what's
|
||||||
|
now in place. Recorded as a deliberate choice, not left half-done.
|
||||||
|
- Corrected `web/static/fonts/LICENSE.txt` from a paraphrase to the
|
||||||
|
actual, complete, unmodified OFL-1.1 text (fetched from
|
||||||
|
`github.com/googlefonts/overpass`, the actual repository these font
|
||||||
|
files were fetched from per the file's own prior note) plus the
|
||||||
|
correct copyright statement, with the original context note (self-hosted
|
||||||
|
vs. CDN) preserved as a clearly separated project note, not mixed into
|
||||||
|
the license text itself.
|
||||||
|
- No accidental license mismatch from copied code was found — the
|
||||||
|
repo-wide attribution-marker grep in the methodology section came back
|
||||||
|
empty, and no vendored directories exist.
|
||||||
|
|
||||||
|
## `enterprise/` relicensing to AGPLv3 (task 6)
|
||||||
|
|
||||||
|
**This is a deliberate business-model choice, recorded plainly so it
|
||||||
|
isn't rediscovered as a surprise later**: the project is no longer
|
||||||
|
pursuing commercial-license revenue from the former `enterprise/`
|
||||||
|
features (SSO, multi-tenancy/RBAC, audit logging). As of Phase 6,
|
||||||
|
**anyone, including competitors, can legally self-host or fork those
|
||||||
|
features under AGPLv3's terms.** AGPLv3's source-sharing obligation
|
||||||
|
applies to network use (anyone interacting with a modified version over
|
||||||
|
a network is entitled to its source) — it does not impose any payment
|
||||||
|
obligation, and nothing in this project gates functionality behind a
|
||||||
|
license key or entitlement check.
|
||||||
|
|
||||||
|
**Confirmed no license-gating logic exists**: a repo-wide grep for
|
||||||
|
license-key/entitlement-check patterns (`license.?key`, `entitlement`,
|
||||||
|
`commercial.?key`, `paywall`, `IsLicensed`, and similar) across
|
||||||
|
`enterprise/`'s Go source returned zero hits. There was never a
|
||||||
|
functional paywall to remove — Phase 4's `enterprise/` split was always
|
||||||
|
an architectural/import-boundary separation, not a runtime license
|
||||||
|
check, so this task's "if any such gating exists, flag it explicitly, it
|
||||||
|
needs to come out" condition doesn't apply here — confirmed, not
|
||||||
|
assumed.
|
||||||
|
|
||||||
|
**Changes applied**:
|
||||||
|
- Every prose reference to `enterprise/` as "commercial license" or
|
||||||
|
"commercial-licensed" across the repo was updated. Present-tense
|
||||||
|
claims (code comments, `README.md` files describing current state,
|
||||||
|
`CLAUDE.md`'s non-negotiable constraints) were corrected outright.
|
||||||
|
Historical, phase-specific documents (`docs/phase-4-isolation-design.md`,
|
||||||
|
`docs/phase-4-rbac-design.md`, `docs/phase-4-runbook.md`, and the
|
||||||
|
relevant parts of `CLAUDE.md`'s and `docs/architecture.md`'s Phase 4
|
||||||
|
sections) were given forward-pointing corrections — "commercial
|
||||||
|
license at the time this was written; AGPLv3 as of Phase 6" — rather
|
||||||
|
than rewritten as if the commercial-license period never happened,
|
||||||
|
matching this project's existing convention for superseded claims
|
||||||
|
(e.g. Phase 3's `tenant_id` gap, corrected inline by Phase 4's section
|
||||||
|
rather than edited out of Phase 3's).
|
||||||
|
- `enterprise/README.md`, `enterprise/Dockerfile`,
|
||||||
|
`enterprise/cmd/enterprise-auth/main.go`: relicensing statement
|
||||||
|
corrected.
|
||||||
|
- `hack/check-tenant-boundary.sh` and every doc describing it
|
||||||
|
(`docs/architecture.md`, `docs/security/threat-model.md`, the two
|
||||||
|
`phase-4-*-design.md` docs): the import-boundary check **itself is
|
||||||
|
kept** — it still enforces a real, valuable architectural property
|
||||||
|
(core builds and deploys standalone with zero multi-tenant mechanism
|
||||||
|
present, tenant identity resolution stays server-side) — but every
|
||||||
|
description of *why* it exists was reframed from a licensing reason to
|
||||||
|
an architectural one, since both sides now carry the same license.
|
||||||
|
- Final repo-wide grep for `commercial` confirms every remaining
|
||||||
|
occurrence is one of the above corrections (explicitly framed as
|
||||||
|
historical/superseded), not a live claim. **No file in the repo claims
|
||||||
|
a license other than AGPLv3** for Sentry's own code, as of this audit.
|
||||||
|
|
||||||
|
## Ongoing enforcement (task 7)
|
||||||
|
|
||||||
|
`.github/workflows/license-compliance.yml` — this repo's **first** CI
|
||||||
|
workflow file (several docs already said "enforced in CI" about
|
||||||
|
`hack/check-tenant-boundary.sh`, but no CI system had actually been wired
|
||||||
|
up yet; fixed as part of this task rather than left as a second gap next
|
||||||
|
to the one this task asked about). Four jobs, one per ecosystem plus the
|
||||||
|
architectural boundary check, all real commands verified locally against
|
||||||
|
this repo before being written into the workflow (not guessed):
|
||||||
|
|
||||||
|
- **Rust**: `cargo-deny-action` running `cargo deny check licenses`
|
||||||
|
against `agent/deny.toml` and `search/deny.toml` — both verified
|
||||||
|
passing locally with the policy's real allow-list.
|
||||||
|
- **Go**: `go-licenses check ./... --allowed_licenses=...` per module
|
||||||
|
with real dependencies — verified passing locally for every listed
|
||||||
|
module, including the `segmentio/asm` and HashiCorp-MPL-2.0 cases.
|
||||||
|
- **npm**: `license-checker --onlyAllow "..."` — verified passing
|
||||||
|
locally.
|
||||||
|
- **Architectural boundary**: `hack/check-tenant-boundary.sh`, now
|
||||||
|
actually wired into CI instead of only documented as if it were.
|
||||||
|
|
||||||
|
Full policy, including exactly what's auto-allowed, what needs manual
|
||||||
|
review, and what's rejected outright: `/docs/compliance/license-policy.md`.
|
||||||
|
|
||||||
|
**Not verified**: the workflow YAML itself has not been run through a
|
||||||
|
real GitHub Actions execution in this environment (no way to trigger
|
||||||
|
that here) — every individual command it invokes was verified locally
|
||||||
|
with real exit codes, but the workflow file's syntax and job wiring
|
||||||
|
should be confirmed on the first real PR that triggers it, the same
|
||||||
|
"written but not run against the live thing" caveat this project applies
|
||||||
|
to its other CI-adjacent and Docker-gated claims.
|
||||||
|
|
||||||
|
## What's resolved vs. what's still open
|
||||||
|
|
||||||
|
Per the audit brief's explicit gate: this phase is not "done" while a
|
||||||
|
(c) or unresolved-(b) item has no recorded resolution. As of the
|
||||||
|
Redpanda decision below, every item has one.
|
||||||
|
|
||||||
|
| Item | Status |
|
||||||
|
|---|---|
|
||||||
|
| All 774 permissive/MPL-2.0/OR-resolved dependencies | **Resolved** — classification (a), no action needed. |
|
||||||
|
| `segmentio/asm` (Go) | **Resolved** — confirmed MIT-0, carried as a cited CI ignore. |
|
||||||
|
| `favicon.svg` | **Flagged, not a compliance blocker** — action item recorded (replace with an original mark), not license-gating. |
|
||||||
|
| Redpanda (BSL 1.1) | **Resolved** — decision recorded 2026-08-16: accept as-is (option 1). No code change; the BSL exposure is a disclosed, accepted risk, not an unresolved one. |
|
||||||
|
| `enterprise/` relicensing | **Resolved** — applied throughout the repo, confirmed via repo-wide grep. |
|
||||||
|
| Root `LICENSE` / manifest declarations | **Resolved** — added and corrected. |
|
||||||
|
| CI enforcement | **Resolved** — workflow written and every command verified locally; the workflow file itself untested end-to-end (disclosed above). |
|
||||||
|
|
||||||
|
**Every task-2 (c)/unresolved-(b) item now has an explicit resolution**
|
||||||
|
— fixed, isolated, or, for Redpanda, flagged and decided. Phase 6's exit
|
||||||
|
criteria in `CLAUDE.md` are updated accordingly.
|
||||||
|
|
||||||
|
## Legal disclaimer (repeated, deliberately)
|
||||||
|
|
||||||
|
This audit and the policy derived from it are a strong first pass — real
|
||||||
|
primary sources were checked for every named risk area and every
|
||||||
|
flagged item, not guessed from memory. They are not a substitute for
|
||||||
|
review by actual legal counsel, which is recommended before the project
|
||||||
|
is publicly released, pitched to customers, or used as the basis for any
|
||||||
|
compliance claim — particularly the open Redpanda question above, which
|
||||||
|
is exactly the kind of judgment call outside counsel exists to make.
|
||||||
@@ -0,0 +1,777 @@
|
|||||||
|
component,dependency,version,license,direct_or_transitive,ecosystem,flagged,flag_reason,classification
|
||||||
|
api,github.com/ClickHouse/ch-go,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
api,github.com/ClickHouse/clickhouse-go/v2,(see go.sum),Apache-2.0,direct,go,False,,a
|
||||||
|
api,github.com/andybalholm/brotli,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
api,github.com/andybalholm/brotli/flate,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
api,github.com/cespare/xxhash/v2,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
api,github.com/go-faster/city,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
api,github.com/go-faster/errors,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
api,github.com/google/uuid,(see go.sum),BSD-3-Clause,direct,go,False,,a
|
||||||
|
api,github.com/jackc/pgpassfile,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
api,github.com/jackc/pgservicefile,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
api,github.com/jackc/pgx/v5,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
api,github.com/jackc/puddle/v2,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
api,github.com/klauspost/compress,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
api,github.com/klauspost/compress/internal/snapref,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
api,github.com/klauspost/compress/zstd/internal/xxhash,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
api,github.com/paulmach/orb,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
api,github.com/pierrec/lz4/v4,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
api,github.com/segmentio/asm/bswap,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
api,github.com/segmentio/asm/cpu,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
api,github.com/segmentio/asm/cpu/arm,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
api,github.com/segmentio/asm/cpu/arm64,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
api,github.com/segmentio/asm/cpu/cpuid,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
api,github.com/segmentio/asm/cpu/x86,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
api,github.com/shopspring/decimal,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
api,go.opentelemetry.io/otel,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
api,go.opentelemetry.io/otel/trace,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
api,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
api,golang.org/x/sync/semaphore,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
api,golang.org/x/sys,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
api,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
api,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
api,google.golang.org/grpc,(see go.sum),Apache-2.0,direct,go,False,,a
|
||||||
|
api,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
ingest,github.com/ClickHouse/ch-go,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
ingest,github.com/ClickHouse/clickhouse-go/v2,(see go.sum),Apache-2.0,direct,go,False,,a
|
||||||
|
ingest,github.com/andybalholm/brotli,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
ingest,github.com/andybalholm/brotli/flate,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
ingest,github.com/cespare/xxhash/v2,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
ingest,github.com/go-faster/city,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
ingest,github.com/go-faster/errors,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
ingest,github.com/google/uuid,(see go.sum),BSD-3-Clause,direct,go,False,,a
|
||||||
|
ingest,github.com/klauspost/compress,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
ingest,github.com/klauspost/compress/internal/snapref,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
ingest,github.com/klauspost/compress/s2,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
ingest,github.com/klauspost/compress/snappy,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
ingest,github.com/klauspost/compress/zstd/internal/xxhash,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
ingest,github.com/paulmach/orb,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
ingest,github.com/pierrec/lz4/v4,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
ingest,github.com/segmentio/asm/bswap,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
ingest,github.com/segmentio/asm/cpu,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
ingest,github.com/segmentio/asm/cpu/arm,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
ingest,github.com/segmentio/asm/cpu/arm64,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
ingest,github.com/segmentio/asm/cpu/cpuid,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
ingest,github.com/segmentio/asm/cpu/x86,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
ingest,github.com/segmentio/kafka-go,(see go.sum),MIT,direct,go,False,,a
|
||||||
|
ingest,github.com/shopspring/decimal,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
ingest,go.opentelemetry.io/otel,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
ingest,go.opentelemetry.io/otel/trace,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
ingest,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
ingest,golang.org/x/sync/errgroup,(see go.sum),BSD-3-Clause,direct,go,False,,a
|
||||||
|
ingest,golang.org/x/sys,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
ingest,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
ingest,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
ingest,google.golang.org/grpc,(see go.sum),Apache-2.0,direct,go,False,,a
|
||||||
|
ingest,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,direct,go,False,,a
|
||||||
|
enterprise,github.com/ClickHouse/ch-go,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/ClickHouse/clickhouse-go/v2,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/andybalholm/brotli,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/andybalholm/brotli/flate,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/beevik/etree,(see go.sum),BSD-2-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/cespare/xxhash/v2,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/coreos/go-oidc/v3/oidc,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/crewjam/saml,(see go.sum),BSD-2-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/davecgh/go-spew/spew,(see go.sum),ISC,transitive,go,False,,a
|
||||||
|
enterprise,github.com/emicklei/go-restful/v3,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/fxamacker/cbor/v2,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/go-faster/city,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/go-faster/errors,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/go-jose/go-jose/v4,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/go-jose/go-jose/v4/json,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/go-logr/logr,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/go-openapi/jsonpointer,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/go-openapi/jsonreference,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/go-openapi/swag,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/gogo/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/golang-jwt/jwt/v4,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/golang/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/google/gnostic-models,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/google/go-cmp/cmp,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/google/gofuzz,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/google/uuid,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/imdario/mergo,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/jackc/pgpassfile,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/jackc/pgservicefile,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/jackc/pgx/v5,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/jackc/puddle/v2,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/jonboulle/clockwork,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/josharian/intern,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/json-iterator/go,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/klauspost/compress,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/klauspost/compress/internal/snapref,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/klauspost/compress/s2,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/klauspost/compress/snappy,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/klauspost/compress/zstd/internal/xxhash,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/mailru/easyjson,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/mattermost/xml-roundtrip-validator,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/modern-go/concurrent,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/modern-go/reflect2,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/munnerz/goautoneg,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/paulmach/orb,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/pierrec/lz4/v4,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/russellhaering/goxmldsig,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,github.com/segmentio/asm/bswap,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
enterprise,github.com/segmentio/asm/cpu,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
enterprise,github.com/segmentio/asm/cpu/arm,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
enterprise,github.com/segmentio/asm/cpu/arm64,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
enterprise,github.com/segmentio/asm/cpu/cpuid,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
enterprise,github.com/segmentio/asm/cpu/x86,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
|
||||||
|
enterprise,github.com/segmentio/kafka-go,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/shopspring/decimal,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,github.com/spf13/pflag,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,github.com/x448/float16,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,go.opentelemetry.io/otel,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,go.opentelemetry.io/otel/trace,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,golang.org/x/crypto/ripemd160,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,golang.org/x/oauth2,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,golang.org/x/sync,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,golang.org/x/sys,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,golang.org/x/term,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,golang.org/x/time/rate,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,google.golang.org/grpc,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,gopkg.in/inf.v0,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,gopkg.in/yaml.v2,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,gopkg.in/yaml.v3,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
enterprise,k8s.io/api,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,k8s.io/apimachinery/pkg,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,k8s.io/apimachinery/third_party/forked/golang/reflect,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,k8s.io/client-go,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,k8s.io/klog/v2,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,k8s.io/kube-openapi/pkg,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,k8s.io/kube-openapi/pkg/validation/spec,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,k8s.io/utils,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,k8s.io/utils/internal/third_party/forked/golang/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
enterprise,sigs.k8s.io/json,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,sigs.k8s.io/structured-merge-diff/v4,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,sigs.k8s.io/yaml,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
enterprise,sigs.k8s.io/yaml/goyaml.v2,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/beorn7/perks/quantile,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/cespare/xxhash/v2,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/davecgh/go-spew/spew,(see go.sum),ISC,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/emicklei/go-restful/v3,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/evanphx/json-patch/v5,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/fxamacker/cbor/v2,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/go-logr/logr,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/go-logr/zapr,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/go-openapi/jsonpointer,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/go-openapi/jsonreference,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/go-openapi/swag,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/gogo/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/golang/groupcache/lru,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/golang/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/google/gnostic-models,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/google/go-cmp/cmp,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/google/gofuzz,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/google/uuid,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/imdario/mergo,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/josharian/intern,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/json-iterator/go,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/mailru/easyjson,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/modern-go/concurrent,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/modern-go/reflect2,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/munnerz/goautoneg,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/pkg/errors,(see go.sum),BSD-2-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/prometheus/client_golang/prometheus,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/prometheus/client_model/go,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/prometheus/common,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/prometheus/procfs,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/spf13/pflag,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,github.com/x448/float16,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
deploy/operator,go.uber.org/multierr,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
deploy/operator,go.uber.org/zap,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
deploy/operator,golang.org/x/exp/maps,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,golang.org/x/oauth2,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,golang.org/x/sys/unix,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,golang.org/x/term,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,golang.org/x/time/rate,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,gomodules.xyz/jsonpatch/v2,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,gopkg.in/inf.v0,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,gopkg.in/yaml.v2,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,gopkg.in/yaml.v3,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
deploy/operator,k8s.io/api,(see go.sum),Apache-2.0,direct,go,False,,a
|
||||||
|
deploy/operator,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,k8s.io/apimachinery/pkg,(see go.sum),Apache-2.0,direct,go,False,,a
|
||||||
|
deploy/operator,k8s.io/apimachinery/third_party/forked/golang,(see go.sum),BSD-3-Clause,direct,go,False,,a
|
||||||
|
deploy/operator,k8s.io/client-go,(see go.sum),Apache-2.0,direct,go,False,,a
|
||||||
|
deploy/operator,k8s.io/klog/v2,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,k8s.io/kube-openapi/pkg,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,k8s.io/kube-openapi/pkg/validation/spec,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,k8s.io/utils,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,k8s.io/utils/internal/third_party/forked/golang/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
deploy/operator,sigs.k8s.io/controller-runtime,(see go.sum),Apache-2.0,direct,go,False,,a
|
||||||
|
deploy/operator,sigs.k8s.io/json,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,sigs.k8s.io/structured-merge-diff/v4,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,sigs.k8s.io/yaml,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
deploy/operator,sigs.k8s.io/yaml/goyaml.v2,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
terraform,github.com/fatih/color,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
terraform,github.com/golang/protobuf/ptypes/empty,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
terraform,github.com/hashicorp/go-hclog,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
terraform,github.com/hashicorp/go-plugin,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
|
||||||
|
terraform,github.com/hashicorp/go-uuid,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
|
||||||
|
terraform,github.com/hashicorp/terraform-plugin-framework,(see go.sum),MPL-2.0,direct,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
|
||||||
|
terraform,github.com/hashicorp/terraform-plugin-go,(see go.sum),MPL-2.0,direct,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
|
||||||
|
terraform,github.com/hashicorp/terraform-plugin-log,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
|
||||||
|
terraform,github.com/hashicorp/terraform-registry-address,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
|
||||||
|
terraform,github.com/hashicorp/terraform-svchost,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
|
||||||
|
terraform,github.com/hashicorp/yamux,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
|
||||||
|
terraform,github.com/mattn/go-colorable,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
terraform,github.com/mattn/go-isatty,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
terraform,github.com/mitchellh/go-testing-interface,(see go.sum),MIT,transitive,go,False,,a
|
||||||
|
terraform,github.com/oklog/run,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
terraform,github.com/vmihailenco/msgpack/v5,(see go.sum),BSD-2-Clause,transitive,go,False,,a
|
||||||
|
terraform,github.com/vmihailenco/tagparser/v2,(see go.sum),BSD-2-Clause,transitive,go,False,,a
|
||||||
|
terraform,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
terraform,golang.org/x/sys/unix,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
terraform,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
terraform,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
terraform,google.golang.org/grpc,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
terraform,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
proto,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
proto,golang.org/x/sys/unix,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
proto,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
proto,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
proto,google.golang.org/grpc,(see go.sum),Apache-2.0,direct,go,False,,a
|
||||||
|
proto,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,direct,go,False,,a
|
||||||
|
hack/benchmark-fixture,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
hack/benchmark-fixture,golang.org/x/sys/unix,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
hack/benchmark-fixture,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
hack/benchmark-fixture,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
hack/benchmark-fixture,google.golang.org/grpc,(see go.sum),Apache-2.0,direct,go,False,,a
|
||||||
|
hack/benchmark-fixture,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
hack/windows-fixture,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
hack/windows-fixture,golang.org/x/sys/unix,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
hack/windows-fixture,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
hack/windows-fixture,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
|
||||||
|
hack/windows-fixture,google.golang.org/grpc,(see go.sum),Apache-2.0,direct,go,False,,a
|
||||||
|
hack/windows-fixture,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
|
||||||
|
web,@codemirror/autocomplete,6.20.3,MIT,direct,npm,False,,a
|
||||||
|
web,@codemirror/commands,6.10.4,MIT,direct,npm,False,,a
|
||||||
|
web,@codemirror/language,6.12.4,MIT,direct,npm,False,,a
|
||||||
|
web,@codemirror/state,6.7.1,MIT,direct,npm,False,,a
|
||||||
|
web,@codemirror/view,6.43.8,MIT,direct,npm,False,,a
|
||||||
|
web,@jridgewell/gen-mapping,0.3.13,MIT,transitive,npm,False,,a
|
||||||
|
web,@jridgewell/remapping,2.3.5,MIT,transitive,npm,False,,a
|
||||||
|
web,@jridgewell/resolve-uri,3.1.2,MIT,transitive,npm,False,,a
|
||||||
|
web,@jridgewell/sourcemap-codec,1.5.5,MIT,transitive,npm,False,,a
|
||||||
|
web,@jridgewell/trace-mapping,0.3.31,MIT,transitive,npm,False,,a
|
||||||
|
web,@lezer/common,1.5.2,MIT,transitive,npm,False,,a
|
||||||
|
web,@lezer/highlight,1.2.3,MIT,transitive,npm,False,,a
|
||||||
|
web,@lezer/lr,1.4.10,MIT,transitive,npm,False,,a
|
||||||
|
web,@marijn/find-cluster-break,1.0.3,MIT,transitive,npm,False,,a
|
||||||
|
web,@oxc-project/types,0.144.0,MIT,transitive,npm,False,,a
|
||||||
|
web,@polka/url,1.0.0-next.29,MIT,transitive,npm,False,,a
|
||||||
|
web,@rolldown/binding-linux-x64-gnu,1.2.4,MIT,transitive,npm,False,,a
|
||||||
|
web,@rolldown/pluginutils,1.0.1,MIT,transitive,npm,False,,a
|
||||||
|
web,@standard-schema/spec,1.1.0,MIT,transitive,npm,False,,a
|
||||||
|
web,@sveltejs/acorn-typescript,1.0.13,MIT,transitive,npm,False,,a
|
||||||
|
web,@sveltejs/adapter-static,3.0.10,MIT,direct,npm,False,,a
|
||||||
|
web,@sveltejs/kit,2.70.2,MIT,direct,npm,False,,a
|
||||||
|
web,@sveltejs/load-config,0.2.3,MIT,transitive,npm,False,,a
|
||||||
|
web,@sveltejs/vite-plugin-svelte,7.3.0,MIT,direct,npm,False,,a
|
||||||
|
web,@types/cookie,0.6.0,MIT,transitive,npm,False,,a
|
||||||
|
web,@types/estree,1.0.9,MIT,transitive,npm,False,,a
|
||||||
|
web,@types/trusted-types,2.0.7,MIT,transitive,npm,False,,a
|
||||||
|
web,acorn,8.18.0,MIT,transitive,npm,False,,a
|
||||||
|
web,aria-query,5.3.1,Apache-2.0,transitive,npm,False,,a
|
||||||
|
web,axe-core,4.13.0,MPL-2.0,direct,npm,True,"MPL-2.0: file-level copyleft, generally fine as a dependency per policy -- flagged for explicit citation, not because it's expected to block",a
|
||||||
|
web,axobject-query,4.1.0,Apache-2.0,transitive,npm,False,,a
|
||||||
|
web,chokidar,4.0.3,MIT,transitive,npm,False,,a
|
||||||
|
web,clsx,2.1.1,MIT,transitive,npm,False,,a
|
||||||
|
web,cookie,0.6.0,MIT,transitive,npm,False,,a
|
||||||
|
web,crelt,1.0.7,MIT,transitive,npm,False,,a
|
||||||
|
web,deepmerge,4.3.1,MIT,transitive,npm,False,,a
|
||||||
|
web,detect-libc,2.1.2,Apache-2.0,transitive,npm,False,,a
|
||||||
|
web,devalue,5.9.0,MIT,transitive,npm,False,,a
|
||||||
|
web,echarts,6.1.0,Apache-2.0,direct,npm,False,,a
|
||||||
|
web,esm-env,1.2.2,MIT,transitive,npm,False,,a
|
||||||
|
web,esrap,2.3.2,MIT,transitive,npm,False,,a
|
||||||
|
web,fdir,6.5.0,MIT,transitive,npm,False,,a
|
||||||
|
web,gridstack,11.5.1,MIT,direct,npm,False,,a
|
||||||
|
web,is-reference,3.0.3,MIT,transitive,npm,False,,a
|
||||||
|
web,kleur,4.1.5,MIT,transitive,npm,False,,a
|
||||||
|
web,lightningcss-linux-x64-gnu,1.33.0,MPL-2.0,transitive,npm,True,"MPL-2.0: file-level copyleft, generally fine as a dependency per policy -- flagged for explicit citation, not because it's expected to block",a
|
||||||
|
web,lightningcss,1.33.0,MPL-2.0,transitive,npm,True,"MPL-2.0: file-level copyleft, generally fine as a dependency per policy -- flagged for explicit citation, not because it's expected to block",a
|
||||||
|
web,locate-character,3.0.0,MIT,transitive,npm,False,,a
|
||||||
|
web,magic-string,0.30.21,MIT,transitive,npm,False,,a
|
||||||
|
web,magic-string,1.2.0,MIT,transitive,npm,False,,a
|
||||||
|
web,mri,1.2.0,MIT,transitive,npm,False,,a
|
||||||
|
web,mrmime,2.0.1,MIT,transitive,npm,False,,a
|
||||||
|
web,nanoid,3.3.18,MIT,transitive,npm,False,,a
|
||||||
|
web,obug,2.1.4,MIT,transitive,npm,False,,a
|
||||||
|
web,picocolors,1.1.1,ISC,transitive,npm,False,,a
|
||||||
|
web,picomatch,4.0.5,MIT,transitive,npm,False,,a
|
||||||
|
web,postcss,8.5.26,MIT,transitive,npm,False,,a
|
||||||
|
web,readdirp,4.1.2,MIT,transitive,npm,False,,a
|
||||||
|
web,rolldown,1.2.4,MIT,transitive,npm,False,,a
|
||||||
|
web,sade,1.8.1,MIT,transitive,npm,False,,a
|
||||||
|
web,set-cookie-parser,3.1.2,MIT,transitive,npm,False,,a
|
||||||
|
web,sirv,3.0.2,MIT,transitive,npm,False,,a
|
||||||
|
web,source-map-js,1.2.1,BSD-3-Clause,transitive,npm,False,,a
|
||||||
|
web,style-mod,4.1.3,MIT,transitive,npm,False,,a
|
||||||
|
web,svelte-check,4.7.6,MIT,direct,npm,False,,a
|
||||||
|
web,svelte,5.56.9,MIT,direct,npm,False,,a
|
||||||
|
web,tinyglobby,0.2.17,MIT,transitive,npm,False,,a
|
||||||
|
web,totalist,3.0.1,MIT,transitive,npm,False,,a
|
||||||
|
web,tslib,2.3.0,0BSD,transitive,npm,False,,a
|
||||||
|
web,typescript,6.0.3,Apache-2.0,direct,npm,False,,a
|
||||||
|
web,vite,8.2.1,MIT,direct,npm,False,,a
|
||||||
|
web,vitefu,1.1.3,MIT,transitive,npm,False,,a
|
||||||
|
web,w3c-keyname,2.2.8,MIT,transitive,npm,False,,a
|
||||||
|
web,zimmerframe,1.1.4,MIT,transitive,npm,False,,a
|
||||||
|
web,zrender,6.1.0,BSD-3-Clause,transitive,npm,False,,a
|
||||||
|
agent,anstream,1.0.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,anstyle,1.0.14,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,anstyle-parse,1.0.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,anstyle-query,1.1.5,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,anstyle-wincon,3.0.11,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,anyhow,1.0.104,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
agent,async-stream,0.3.6,MIT,transitive,rust,False,,a
|
||||||
|
agent,async-stream-impl,0.3.6,MIT,transitive,rust,False,,a
|
||||||
|
agent,async-trait,0.1.92,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,atomic-waker,1.1.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,autocfg,1.5.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,axum,0.7.9,MIT,transitive,rust,False,,a
|
||||||
|
agent,axum-core,0.4.5,MIT,transitive,rust,False,,a
|
||||||
|
agent,base64,0.22.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,bitflags,2.13.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,bytes,1.12.1,MIT,transitive,rust,False,,a
|
||||||
|
agent,cc,1.4.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,cfg-if,1.0.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,clap,4.6.6,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
agent,clap_builder,4.6.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,clap_derive,4.6.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,clap_lex,1.1.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,colorchoice,1.0.5,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,either,1.17.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,equivalent,1.0.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,errno,0.3.14,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,fastrand,2.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,find-msvc-tools,0.1.10,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,fixedbitset,0.5.7,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,fnv,1.0.7,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,futures-channel,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,futures-core,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,futures-sink,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,futures-task,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,futures-util,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,getrandom,0.2.17,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,getrandom,0.4.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,h2,0.4.15,MIT,transitive,rust,False,,a
|
||||||
|
agent,hashbrown,0.12.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,hashbrown,0.17.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,heck,0.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,http,1.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,http-body,1.1.0,MIT,transitive,rust,False,,a
|
||||||
|
agent,http-body-util,0.1.5,MIT,transitive,rust,False,,a
|
||||||
|
agent,httparse,1.10.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,httpdate,1.0.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,hyper,1.11.0,MIT,transitive,rust,False,,a
|
||||||
|
agent,hyper-timeout,0.5.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,hyper-util,0.1.20,MIT,transitive,rust,False,,a
|
||||||
|
agent,indexmap,1.9.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,indexmap,2.14.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,is_terminal_polyfill,1.70.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,itertools,0.14.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,itoa,1.0.18,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,lazy_static,1.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,libc,0.2.189,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,linux-raw-sys,0.12.1,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
|
||||||
|
agent,log,0.4.33,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,matchers,0.2.0,MIT,transitive,rust,False,,a
|
||||||
|
agent,matchit,0.7.3,BSD-3-Clause OR MIT,transitive,rust,False,,a
|
||||||
|
agent,memchr,2.8.3,MIT OR Unlicense,transitive,rust,False,,a
|
||||||
|
agent,mime,0.3.17,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,mio,1.2.2,MIT,transitive,rust,False,,a
|
||||||
|
agent,multimap,0.10.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,nu-ansi-term,0.50.3,MIT,transitive,rust,False,,a
|
||||||
|
agent,once_cell,1.21.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,once_cell_polyfill,1.70.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,percent-encoding,2.3.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,petgraph,0.7.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,pin-project,1.1.13,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,pin-project-internal,1.1.13,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,pin-project-lite,0.2.17,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,ppv-lite86,0.2.21,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,prettyplease,0.2.37,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,proc-macro2,1.0.107,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,prost,0.13.5,Apache-2.0,direct,rust,False,,a
|
||||||
|
agent,prost-build,0.13.5,Apache-2.0,transitive,rust,False,,a
|
||||||
|
agent,prost-derive,0.13.5,Apache-2.0,transitive,rust,False,,a
|
||||||
|
agent,prost-types,0.13.5,Apache-2.0,transitive,rust,False,,a
|
||||||
|
agent,quick-xml,0.36.2,MIT,direct,rust,False,,a
|
||||||
|
agent,quote,1.0.47,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,r-efi,6.0.0,Apache-2.0 OR LGPL-2.1-or-later OR MIT,transitive,rust,True,carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification,a
|
||||||
|
agent,rand,0.8.7,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,rand_chacha,0.3.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,rand_core,0.6.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,regex,1.13.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,regex-automata,0.4.18,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,regex-syntax,0.8.11,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,ring,0.17.14,Apache-2.0 OR ISC,transitive,rust,False,,a
|
||||||
|
agent,rustix,1.1.4,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
|
||||||
|
agent,rustls,0.23.43,Apache-2.0 OR ISC OR MIT,transitive,rust,False,,a
|
||||||
|
agent,rustls-pemfile,2.2.0,Apache-2.0 OR ISC OR MIT,transitive,rust,False,,a
|
||||||
|
agent,rustls-pki-types,1.15.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,rustls-webpki,0.103.14,ISC,transitive,rust,False,,a
|
||||||
|
agent,rustversion,1.0.23,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,serde,1.0.229,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
agent,serde_core,1.0.229,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,serde_derive,1.0.229,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,serde_json,1.0.151,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
agent,serde_spanned,0.6.9,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,sharded-slab,0.1.7,MIT,transitive,rust,False,,a
|
||||||
|
agent,shlex,2.0.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,signal-hook-registry,1.4.8,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,slab,0.4.12,MIT,transitive,rust,False,,a
|
||||||
|
agent,smallvec,1.15.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,socket2,0.5.10,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,socket2,0.6.5,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,strsim,0.11.1,MIT,transitive,rust,False,,a
|
||||||
|
agent,subtle,2.6.1,BSD-3-Clause,transitive,rust,False,,a
|
||||||
|
agent,syn,2.0.119,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,syn,3.0.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,sync_wrapper,1.0.2,Apache-2.0,transitive,rust,False,,a
|
||||||
|
agent,tempfile,3.27.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,thread_local,1.1.10,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,tokio,1.53.1,MIT,direct,rust,False,,a
|
||||||
|
agent,tokio-macros,2.7.2,MIT,transitive,rust,False,,a
|
||||||
|
agent,tokio-rustls,0.26.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,tokio-stream,0.1.19,MIT,transitive,rust,False,,a
|
||||||
|
agent,tokio-util,0.7.19,MIT,transitive,rust,False,,a
|
||||||
|
agent,toml,0.8.23,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
agent,toml_datetime,0.6.11,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,toml_edit,0.22.27,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,toml_write,0.1.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,tonic,0.12.3,MIT,direct,rust,False,,a
|
||||||
|
agent,tonic-build,0.12.3,MIT,direct,rust,False,,a
|
||||||
|
agent,tower,0.4.13,MIT,transitive,rust,False,,a
|
||||||
|
agent,tower,0.5.3,MIT,transitive,rust,False,,a
|
||||||
|
agent,tower-layer,0.3.3,MIT,transitive,rust,False,,a
|
||||||
|
agent,tower-service,0.3.3,MIT,transitive,rust,False,,a
|
||||||
|
agent,tracing,0.1.44,MIT,direct,rust,False,,a
|
||||||
|
agent,tracing-attributes,0.1.31,MIT,transitive,rust,False,,a
|
||||||
|
agent,tracing-core,0.1.36,MIT,transitive,rust,False,,a
|
||||||
|
agent,tracing-log,0.2.0,MIT,transitive,rust,False,,a
|
||||||
|
agent,tracing-subscriber,0.3.23,MIT,direct,rust,False,,a
|
||||||
|
agent,try-lock,0.2.5,MIT,transitive,rust,False,,a
|
||||||
|
agent,unicode-ident,1.0.24,Apache-2.0 OR MIT OR Unicode-3.0,transitive,rust,False,,a
|
||||||
|
agent,untrusted,0.9.0,ISC,transitive,rust,False,,a
|
||||||
|
agent,utf8parse,0.2.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,want,0.3.1,MIT,transitive,rust,False,,a
|
||||||
|
agent,wasi,0.11.1+wasi-snapshot-preview1,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
|
||||||
|
agent,widestring,1.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows,0.58.0,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
agent,windows-core,0.58.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows-implement,0.58.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows-interface,0.58.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows-link,0.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows-result,0.2.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows-service,0.7.0,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
agent,windows-strings,0.1.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows-sys,0.52.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows-sys,0.61.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows-targets,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows_aarch64_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows_aarch64_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows_i686_gnu,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows_i686_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows_i686_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows_x86_64_gnu,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows_x86_64_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,windows_x86_64_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,winnow,0.7.15,MIT,transitive,rust,False,,a
|
||||||
|
agent,zerocopy,0.8.56,Apache-2.0 OR BSD-2-Clause OR MIT,transitive,rust,False,,a
|
||||||
|
agent,zeroize,1.9.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
agent,zmij,1.0.23,MIT,transitive,rust,False,,a
|
||||||
|
search,adler2,2.0.1,0BSD OR Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,aho-corasick,1.1.5,MIT OR Unlicense,transitive,rust,False,,a
|
||||||
|
search,allocator-api2,0.2.21,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,anyhow,1.0.104,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
search,arc-swap,1.9.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,async-stream,0.3.6,MIT,transitive,rust,False,,a
|
||||||
|
search,async-stream-impl,0.3.6,MIT,transitive,rust,False,,a
|
||||||
|
search,async-trait,0.1.92,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,atomic-waker,1.1.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,autocfg,1.5.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,axum,0.7.9,MIT,transitive,rust,False,,a
|
||||||
|
search,axum-core,0.4.5,MIT,transitive,rust,False,,a
|
||||||
|
search,base64,0.22.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,bitflags,2.13.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,bitpacking,0.9.3,MIT,transitive,rust,False,,a
|
||||||
|
search,block-buffer,0.10.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,bumpalo,3.20.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,byteorder,1.5.0,MIT OR Unlicense,transitive,rust,False,,a
|
||||||
|
search,bytes,1.12.1,MIT,transitive,rust,False,,a
|
||||||
|
search,cc,1.4.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,census,0.4.2,MIT,transitive,rust,False,,a
|
||||||
|
search,cfg-if,1.0.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,chrono,0.4.45,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,cpufeatures,0.2.17,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,crc32c,0.6.8,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,crc32fast,1.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,crossbeam-channel,0.5.16,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,crossbeam-deque,0.8.7,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,crossbeam-epoch,0.9.20,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,crossbeam-utils,0.8.22,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,crunchy,0.2.4,MIT,transitive,rust,False,,a
|
||||||
|
search,crypto-common,0.1.7,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,deranged,0.5.8,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,digest,0.10.7,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,displaydoc,0.2.7,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,downcast-rs,1.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,either,1.17.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,equivalent,1.0.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,errno,0.3.14,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,fastdivide,0.4.2,MIT OR zlib-acknowledgement,transitive,rust,True,carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification,a
|
||||||
|
search,fastrand,2.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,find-msvc-tools,0.1.10,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,fixedbitset,0.5.7,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,flate2,1.1.9,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,fnv,1.0.7,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,foldhash,0.1.5,Zlib,transitive,rust,False,,a
|
||||||
|
search,form_urlencoded,1.2.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,fs4,0.8.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,futures,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,futures-channel,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,futures-core,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,futures-executor,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,futures-io,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,futures-macro,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,futures-sink,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,futures-task,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,futures-util,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,generic-array,0.14.7,MIT,transitive,rust,False,,a
|
||||||
|
search,getrandom,0.2.17,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,getrandom,0.4.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,h2,0.4.15,MIT,transitive,rust,False,,a
|
||||||
|
search,hashbrown,0.12.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,hashbrown,0.15.5,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,hashbrown,0.17.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,heck,0.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,hermit-abi,0.5.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,hmac,0.12.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,htmlescape,0.3.1,Apache-2.0 OR MIT OR MPL-2.0,transitive,rust,True,carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification,a
|
||||||
|
search,http,1.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,http-body,1.1.0,MIT,transitive,rust,False,,a
|
||||||
|
search,http-body-util,0.1.5,MIT,transitive,rust,False,,a
|
||||||
|
search,httparse,1.10.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,httpdate,1.0.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,hyper,1.11.0,MIT,transitive,rust,False,,a
|
||||||
|
search,hyper-timeout,0.5.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,hyper-util,0.1.20,MIT,transitive,rust,False,,a
|
||||||
|
search,icu_collections,2.3.0,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,icu_locale_core,2.3.0,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,icu_normalizer,2.3.0,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,icu_normalizer_data,2.3.0,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,icu_properties,2.3.0,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,icu_properties_data,2.3.0,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,icu_provider,2.3.0,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,idna,1.1.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,idna_adapter,1.2.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,indexmap,1.9.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,indexmap,2.14.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,instant,0.1.13,BSD-3-Clause,transitive,rust,False,,a
|
||||||
|
search,integer-encoding,4.1.0,MIT,transitive,rust,False,,a
|
||||||
|
search,ipnet,2.12.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,itertools,0.12.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,itertools,0.14.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,itoa,1.0.18,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,jobserver,0.1.35,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,js-sys,0.3.104,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,lazy_static,1.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,levenshtein_automata,0.2.1,MIT,transitive,rust,False,,a
|
||||||
|
search,libc,0.2.189,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,libm,0.2.16,MIT,transitive,rust,False,,a
|
||||||
|
search,linux-raw-sys,0.12.1,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
|
||||||
|
search,linux-raw-sys,0.4.15,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
|
||||||
|
search,litemap,0.8.3,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,lock_api,0.4.14,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,log,0.4.33,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,lru,0.12.5,MIT,transitive,rust,False,,a
|
||||||
|
search,lz4,1.28.1,MIT,transitive,rust,False,,a
|
||||||
|
search,lz4-sys,1.11.1+lz4-1.10.0,MIT,transitive,rust,False,,a
|
||||||
|
search,lz4_flex,0.11.6,MIT,transitive,rust,False,,a
|
||||||
|
search,matchers,0.2.0,MIT,transitive,rust,False,,a
|
||||||
|
search,matchit,0.7.3,BSD-3-Clause OR MIT,transitive,rust,False,,a
|
||||||
|
search,measure_time,0.8.3,MIT,transitive,rust,False,,a
|
||||||
|
search,memchr,2.8.3,MIT OR Unlicense,transitive,rust,False,,a
|
||||||
|
search,memmap2,0.9.11,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,mime,0.3.17,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,minimal-lexical,0.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,miniz_oxide,0.8.9,Apache-2.0 OR MIT OR Zlib,transitive,rust,False,,a
|
||||||
|
search,mio,1.2.2,MIT,transitive,rust,False,,a
|
||||||
|
search,multimap,0.10.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,murmurhash32,0.3.1,MIT,transitive,rust,False,,a
|
||||||
|
search,nom,7.1.3,MIT,transitive,rust,False,,a
|
||||||
|
search,nu-ansi-term,0.50.3,MIT,transitive,rust,False,,a
|
||||||
|
search,num-conv,0.2.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,num-traits,0.2.19,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,num_cpus,1.17.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,once_cell,1.21.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,oneshot,0.1.13,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,ownedbytes,0.7.0,MIT,transitive,rust,False,,a
|
||||||
|
search,parking_lot,0.12.5,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,parking_lot_core,0.9.12,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,pbkdf2,0.12.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,percent-encoding,2.3.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,petgraph,0.7.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,pin-project,1.1.13,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,pin-project-internal,1.1.13,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,pin-project-lite,0.2.17,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,pkg-config,0.3.33,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,potential_utf,0.1.6,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,powerfmt,0.2.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,ppv-lite86,0.2.21,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,prettyplease,0.2.37,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,proc-macro2,1.0.107,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,prost,0.13.5,Apache-2.0,direct,rust,False,,a
|
||||||
|
search,prost-build,0.13.5,Apache-2.0,transitive,rust,False,,a
|
||||||
|
search,prost-derive,0.13.5,Apache-2.0,transitive,rust,False,,a
|
||||||
|
search,prost-types,0.13.5,Apache-2.0,transitive,rust,False,,a
|
||||||
|
search,quote,1.0.47,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,r-efi,6.0.0,Apache-2.0 OR LGPL-2.1-or-later OR MIT,transitive,rust,True,carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification,a
|
||||||
|
search,rand,0.8.7,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,rand_chacha,0.3.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,rand_core,0.6.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,rand_distr,0.4.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,rayon,1.12.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,rayon-core,1.13.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,redox_syscall,0.5.18,MIT,transitive,rust,False,,a
|
||||||
|
search,regex,1.13.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,regex-automata,0.4.18,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,regex-syntax,0.8.11,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,reqwest,0.12.28,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
search,rsasl,2.3.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,rskafka,0.6.0,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
search,rust-stemmers,1.2.0,BSD-3-Clause OR MIT,transitive,rust,False,,a
|
||||||
|
search,rustc-hash,1.1.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,rustc_version,0.4.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,rustix,0.38.44,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
|
||||||
|
search,rustix,1.1.4,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
|
||||||
|
search,rustversion,1.0.23,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,ryu,1.0.23,Apache-2.0 OR BSL-1.0,transitive,rust,True,carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification,a
|
||||||
|
search,scopeguard,1.2.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,semver,1.0.28,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,serde,1.0.229,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
search,serde_core,1.0.229,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,serde_derive,1.0.229,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,serde_json,1.0.151,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
search,serde_urlencoded,0.7.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,sha2,0.10.9,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,sharded-slab,0.1.7,MIT,transitive,rust,False,,a
|
||||||
|
search,shlex,2.0.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,signal-hook-registry,1.4.8,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,simd-adler32,0.3.10,MIT,transitive,rust,False,,a
|
||||||
|
search,sketches-ddsketch,0.2.2,Apache-2.0,transitive,rust,False,,a
|
||||||
|
search,slab,0.4.12,MIT,transitive,rust,False,,a
|
||||||
|
search,smallvec,1.15.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,snap,1.1.2,BSD-3-Clause,transitive,rust,False,,a
|
||||||
|
search,socket2,0.5.10,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,socket2,0.6.5,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,stable_deref_trait,1.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,stringprep,0.1.5,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,subtle,2.6.1,BSD-3-Clause,transitive,rust,False,,a
|
||||||
|
search,syn,2.0.119,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,syn,3.0.3,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,sync_wrapper,1.0.2,Apache-2.0,transitive,rust,False,,a
|
||||||
|
search,synstructure,0.13.2,MIT,transitive,rust,False,,a
|
||||||
|
search,tantivy,0.22.1,MIT,direct,rust,False,,a
|
||||||
|
search,tantivy-bitpacker,0.6.0,MIT,transitive,rust,False,,a
|
||||||
|
search,tantivy-columnar,0.3.0,MIT,transitive,rust,False,,a
|
||||||
|
search,tantivy-common,0.7.0,MIT,transitive,rust,False,,a
|
||||||
|
search,tantivy-fst,0.5.0,MIT OR Unlicense,transitive,rust,False,,a
|
||||||
|
search,tantivy-query-grammar,0.22.0,MIT,transitive,rust,False,,a
|
||||||
|
search,tantivy-sstable,0.3.0,MIT,transitive,rust,False,,a
|
||||||
|
search,tantivy-stacker,0.3.0,MIT,transitive,rust,False,,a
|
||||||
|
search,tantivy-tokenizer-api,0.3.0,MIT,transitive,rust,False,,a
|
||||||
|
search,tempfile,3.27.0,Apache-2.0 OR MIT,direct,rust,False,,a
|
||||||
|
search,thiserror,1.0.69,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,thiserror,2.0.20,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,thiserror-impl,1.0.69,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,thiserror-impl,2.0.20,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,thread_local,1.1.10,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,time,0.3.55,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,time-core,0.1.9,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,tinystr,0.8.4,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,tinyvec,1.12.0,Apache-2.0 OR MIT OR Zlib,transitive,rust,False,,a
|
||||||
|
search,tinyvec_macros,0.1.1,Apache-2.0 OR MIT OR Zlib,transitive,rust,False,,a
|
||||||
|
search,tokio,1.53.1,MIT,direct,rust,False,,a
|
||||||
|
search,tokio-macros,2.7.2,MIT,transitive,rust,False,,a
|
||||||
|
search,tokio-stream,0.1.19,MIT,transitive,rust,False,,a
|
||||||
|
search,tokio-util,0.7.19,MIT,transitive,rust,False,,a
|
||||||
|
search,tonic,0.12.3,MIT,direct,rust,False,,a
|
||||||
|
search,tonic-build,0.12.3,MIT,direct,rust,False,,a
|
||||||
|
search,tower,0.4.13,MIT,transitive,rust,False,,a
|
||||||
|
search,tower,0.5.3,MIT,transitive,rust,False,,a
|
||||||
|
search,tower-http,0.6.11,MIT,transitive,rust,False,,a
|
||||||
|
search,tower-layer,0.3.3,MIT,transitive,rust,False,,a
|
||||||
|
search,tower-service,0.3.3,MIT,transitive,rust,False,,a
|
||||||
|
search,tracing,0.1.44,MIT,direct,rust,False,,a
|
||||||
|
search,tracing-attributes,0.1.31,MIT,transitive,rust,False,,a
|
||||||
|
search,tracing-core,0.1.36,MIT,transitive,rust,False,,a
|
||||||
|
search,tracing-log,0.2.0,MIT,transitive,rust,False,,a
|
||||||
|
search,tracing-subscriber,0.3.23,MIT,direct,rust,False,,a
|
||||||
|
search,try-lock,0.2.5,MIT,transitive,rust,False,,a
|
||||||
|
search,typenum,1.20.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,unicode-bidi,0.3.18,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,unicode-ident,1.0.24,Apache-2.0 OR MIT OR Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,unicode-normalization,0.1.25,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,unicode-properties,0.1.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,url,2.5.8,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,utf8-ranges,1.0.5,MIT OR Unlicense,transitive,rust,False,,a
|
||||||
|
search,utf8_iter,1.0.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,uuid,1.24.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,version_check,0.9.5,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,want,0.3.1,MIT,transitive,rust,False,,a
|
||||||
|
search,wasi,0.11.1+wasi-snapshot-preview1,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
|
||||||
|
search,wasm-bindgen,0.2.127,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,wasm-bindgen-futures,0.4.77,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,wasm-bindgen-macro,0.2.127,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,wasm-bindgen-macro-support,0.2.127,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,wasm-bindgen-shared,0.2.127,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,web-sys,0.3.104,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,winapi,0.3.9,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,winapi-i686-pc-windows-gnu,0.4.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,winapi-x86_64-pc-windows-gnu,0.4.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows-link,0.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows-sys,0.52.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows-sys,0.59.0,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows-sys,0.61.2,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows-targets,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows_aarch64_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows_aarch64_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows_i686_gnu,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows_i686_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows_i686_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows_x86_64_gnu,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows_x86_64_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,windows_x86_64_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,writeable,0.6.4,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,yoke,0.8.3,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,yoke-derive,0.8.2,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,zerocopy,0.8.56,Apache-2.0 OR BSD-2-Clause OR MIT,transitive,rust,False,,a
|
||||||
|
search,zerofrom,0.1.8,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,zerofrom-derive,0.1.7,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,zerotrie,0.2.5,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,zerovec,0.11.7,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,zerovec-derive,0.11.4,Unicode-3.0,transitive,rust,False,,a
|
||||||
|
search,zmij,1.0.23,MIT,transitive,rust,False,,a
|
||||||
|
search,zstd,0.13.3,MIT,transitive,rust,False,,a
|
||||||
|
search,zstd-safe,7.2.4,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
search,zstd-sys,2.0.16+zstd.1.5.7,Apache-2.0 OR MIT,transitive,rust,False,,a
|
||||||
|
web,Overpass (font),variable,OFL-1.1,direct,font-asset,False,,a
|
||||||
|
web,Overpass Mono (font),variable,OFL-1.1,direct,font-asset,False,,a
|
||||||
|
web,favicon.svg,n/a,MIT (Svelte project asset),direct,vendored-asset,True,"Copied from SvelteKit's default project scaffold (<title>svelte-logo</title>), never replaced with an original mark -- not a license-compatibility blocker (Svelte's own assets are MIT) but is unauthored, unattributed, third-party branded content shipping as this product's own favicon. Flagged for replacement, not a legal blocker.",n/a-branding
|
||||||
|
transport,redpanda (docker image),v24.2.7,"BSL 1.1 (Business Source License) for Redpanda Core, as pinned (v24.2.7, released 2024-10-11) -- NOT yet converted to Apache-2.0 (4-year Change Date is ~2028-10-11). Source-available, not OSI-approved open source. Additional Use Grant permits any use except offering it as a hosted 'Streaming or Queuing Service' to third parties.",direct,docker-image,True,"Category (c): BSL is explicitly source-available, not OSI-approved open source, per the audit's own classification framework. Verified against the actual licenses/bsl.md at the v24.2.7 tag, not assumed. No AGPL linking-compatibility issue (Redpanda is consumed only over the Kafka wire protocol, never linked into Sentry's own code -- same relationship as ClickHouse/Postgres). Real open question: whether a third party self-hosting Sentry (now fully AGPLv3 per task 6) 'as a service' would trip BSL's Streaming-or-Queuing-Service restriction on the bundled Redpanda image -- Sentry's ingest pipeline creates fixed internal topics, not per-end-user topics, so this is very likely NOT a Streaming-or-Queuing-Service under BSL's own definition, but this is a business/redistribution judgment call, not a pure technical one -- flagged for your decision, not resolved unilaterally. See license-audit-report.md's Redpanda section for the three remediation options (accept as-is / swap to Apache Kafka / flag only). RESOLVED 2026-08-16 (business decision): accept as-is. Sentry's own use (internal Kafka-protocol transport, no resale of broker access) is within BSL's Additional Use Grant; the third-party self-hosting-as-a-service question was judged unlikely to trip BSL's Streaming-or-Queuing-Service restriction, and was accepted as a known, disclosed risk rather than swapping to a heavier broker or dropping the bundled image. See license-audit-report.md's Redpanda section.",c
|
||||||
|
storage,clickhouse-server (docker image),24.8,"Apache-2.0, confirmed directly against ClickHouse's LICENSE file. No evidence of any historical license change (unlike Redpanda/Elastic/MongoDB) -- confirmed via web search plus direct file fetch, not assumed from general reputation.",direct,docker-image,False,,a
|
||||||
|
metadata,postgres (docker image),16-alpine,"PostgreSQL License (OSI-approved, MIT/BSD-equivalent permissive terms), confirmed directly against the official postgres/postgres COPYRIGHT file.",direct,docker-image,False,,a
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,125 @@
|
|||||||
|
# License policy
|
||||||
|
|
||||||
|
**This is a policy document derived from a first-pass compliance audit,
|
||||||
|
not a legal opinion.** See `/docs/compliance/license-audit-report.md`
|
||||||
|
for the audit itself and its findings; this document is the resulting
|
||||||
|
ongoing policy, enforced in CI (`.github/workflows/license-compliance.yml`)
|
||||||
|
on every PR across all three dependency ecosystems (Rust, Go, npm) plus
|
||||||
|
the deployment-image surface reviewed manually at audit time.
|
||||||
|
|
||||||
|
The entire project, including `enterprise/`, is licensed AGPLv3 as of
|
||||||
|
Phase 6 — there is no separate commercial-license carve-out anywhere in
|
||||||
|
this repo. Every third-party dependency must be compatible with AGPLv3
|
||||||
|
as the single project-wide license.
|
||||||
|
|
||||||
|
## Auto-allowed (CI passes without review)
|
||||||
|
|
||||||
|
These license families are pre-cleared as dependencies of AGPLv3/GPLv3
|
||||||
|
code — permissive licenses impose no copyleft obligation at all, and
|
||||||
|
MPL-2.0's file-level copyleft doesn't extend to a larger work that
|
||||||
|
merely links/imports MPL-covered code (MPL 2.0 §3.3, "Distribution of a
|
||||||
|
Larger Work"):
|
||||||
|
|
||||||
|
- MIT, MIT-0 ("MIT No Attribution")
|
||||||
|
- Apache-2.0 (including `Apache-2.0 WITH LLVM-exception`)
|
||||||
|
- BSD-2-Clause, BSD-3-Clause, 0BSD
|
||||||
|
- ISC
|
||||||
|
- MPL-2.0
|
||||||
|
- Unlicense, Zlib, Unicode-3.0, BSL-1.0 (Boost — not to be confused with
|
||||||
|
the *Business Source License*, also abbreviated BSL elsewhere in this
|
||||||
|
document; Boost's BSL-1.0 is a permissive OSI-approved license with no
|
||||||
|
relation to Redpanda's BSL 1.1)
|
||||||
|
|
||||||
|
CI enforcement:
|
||||||
|
- **Rust**: `cargo deny check licenses` against `agent/deny.toml` and
|
||||||
|
`search/deny.toml`'s `[licenses.allow]` list.
|
||||||
|
- **Go**: `go-licenses check ./... --allowed_licenses=...` per module
|
||||||
|
with real dependencies (see the workflow's matrix for the full list).
|
||||||
|
- **npm**: `license-checker --onlyAllow "..."` against `web`'s
|
||||||
|
dependency tree.
|
||||||
|
|
||||||
|
A dependency whose *only* license is outside this list fails CI. A
|
||||||
|
dependency offering one of these licenses as *one option* in an SPDX OR
|
||||||
|
expression (e.g. `MIT OR Apache-2.0 OR LGPL-2.1-or-later`) passes,
|
||||||
|
because we elect the permissive branch — this is a normal, standard
|
||||||
|
reading of a disjunctive license grant, not a loophole.
|
||||||
|
|
||||||
|
## Requires manual review (category b)
|
||||||
|
|
||||||
|
Anything not on the auto-allowed list and not obviously incompatible
|
||||||
|
needs a human to actually read the license and record reasoning here or
|
||||||
|
in the audit report before merging — not a guess, and not a silent
|
||||||
|
`--ignore`/allow-list addition. This includes:
|
||||||
|
|
||||||
|
- Other copyleft licenses not listed above: LGPL (any version), EPL,
|
||||||
|
CDDL, and similar. The specific question that matters is usually
|
||||||
|
*how* the code is consumed — a dynamically-linked/networked LGPL
|
||||||
|
dependency is generally fine; statically linking LGPL code into an
|
||||||
|
AGPL binary is murkier for some LGPL versions and needs a real
|
||||||
|
per-case read, not a blanket rule.
|
||||||
|
- Dual/multi-licensed packages where *none* of the offered licenses is
|
||||||
|
on the auto-allowed list.
|
||||||
|
- Anything with a custom license file rather than a standard SPDX
|
||||||
|
identifier, unless it's been manually confirmed (as
|
||||||
|
`github.com/segmentio/asm`'s "MIT No Attribution" text was at audit
|
||||||
|
time — SPDX `MIT-0`, added to the CI ignore list with that
|
||||||
|
citation, not silently allowed) — a new custom-licensed dependency
|
||||||
|
should not get the same free pass without its own confirmation.
|
||||||
|
- Docker/container base images pulled into `docker-compose.yml` or
|
||||||
|
`/deploy` — not covered by any of the three CI dependency scans above,
|
||||||
|
since they're not a language-ecosystem dependency. Reviewed manually
|
||||||
|
at audit time (Redpanda, ClickHouse, Postgres); a new base image needs
|
||||||
|
the same manual check, not an assumption that "it's just
|
||||||
|
infrastructure."
|
||||||
|
|
||||||
|
## Rejected (category c)
|
||||||
|
|
||||||
|
Not usable as a dependency of this project without an explicit,
|
||||||
|
recorded exception:
|
||||||
|
|
||||||
|
- Source-available licenses that aren't OSI-approved open source: BSL
|
||||||
|
(Business Source License), SSPL (Server Side Public License), Commons
|
||||||
|
Clause, and similar "free to use except..." terms.
|
||||||
|
- Any license with a field-of-use restriction or a "non-compete" clause
|
||||||
|
(e.g. "may not be used to offer a competing hosted service").
|
||||||
|
- "Free for non-commercial use" or similarly non-open terms.
|
||||||
|
|
||||||
|
**Known, accepted exception**: Redpanda (the
|
||||||
|
`docker.redpanda.com/redpandadata/redpanda` image pinned in
|
||||||
|
`docker-compose.yml`/`transport/`) ships under BSL 1.1 as of the pinned
|
||||||
|
version (v24.2.7), confirmed against the actual license file at that
|
||||||
|
tag, not assumed. This is consumed only as an external networked
|
||||||
|
Kafka-protocol broker — never linked into any AGPLv3 binary — so it
|
||||||
|
doesn't create an AGPL compatibility problem in the traditional linking
|
||||||
|
sense, and BSL's specific restriction (no reselling direct broker access
|
||||||
|
as a hosted streaming/queuing service) doesn't obviously apply to how
|
||||||
|
this project uses it. **Decision recorded 2026-08-16: accept as-is** —
|
||||||
|
see the audit report's Redpanda section for the full reasoning, the
|
||||||
|
other two remediation options that were considered and not chosen, and
|
||||||
|
the condition under which this decision should be revisited (an
|
||||||
|
official hosted/managed Sentry offering). A future change to Redpanda's
|
||||||
|
license, or to this project's own redistribution posture, should trigger
|
||||||
|
re-review, not silently ride on this entry.
|
||||||
|
|
||||||
|
## What CI does not cover
|
||||||
|
|
||||||
|
The automated checks above only see what a package manager sees. They
|
||||||
|
do not catch:
|
||||||
|
- Vendored/copied code not declared as a dependency (checked manually
|
||||||
|
at audit time via a repo-wide grep for copy/attribution markers — see
|
||||||
|
the audit report's methodology section; not re-run automatically).
|
||||||
|
- Font files, icon packs, or other design assets (also checked manually
|
||||||
|
at audit time).
|
||||||
|
- Docker base images (see above).
|
||||||
|
|
||||||
|
A new instance of any of these needs the same manual treatment the
|
||||||
|
original audit gave — this policy doesn't claim CI makes the project
|
||||||
|
audit-proof going forward, only that *dependency-manifest* drift is
|
||||||
|
caught automatically.
|
||||||
|
|
||||||
|
## Legal disclaimer
|
||||||
|
|
||||||
|
This policy, and the audit it's derived from, is a strong first pass —
|
||||||
|
not a legal opinion. It should be reviewed by actual legal counsel
|
||||||
|
before the project is publicly released, pitched to customers, or used
|
||||||
|
as the basis for any compliance claim.
|
||||||
@@ -42,8 +42,11 @@ boundary text names multi-tenancy as enterprise-gated, and a
|
|||||||
"mechanism in core, feature in enterprise" split would have let a
|
"mechanism in core, feature in enterprise" split would have let a
|
||||||
sufficiently motivated self-hosting AGPL user wire up real isolation
|
sufficiently motivated self-hosting AGPL user wire up real isolation
|
||||||
without ever touching `enterprise/` — undermining that boundary in
|
without ever touching `enterprise/` — undermining that boundary in
|
||||||
substance even while technically respecting the AGPL/commercial import
|
substance even while technically respecting the import graph (at the
|
||||||
graph. Confirmed: enterprise-only.
|
time, an AGPL/commercial split; as of Phase 6, `enterprise/` is AGPLv3
|
||||||
|
too, so the import graph is now the whole reason this boundary exists,
|
||||||
|
not a proxy for a licensing one — see
|
||||||
|
`/docs/compliance/license-audit-report.md`). Confirmed: enterprise-only.
|
||||||
|
|
||||||
Mechanically, this works because `api/internal/querylang/executor`
|
Mechanically, this works because `api/internal/querylang/executor`
|
||||||
already defines the seam Phase 2 needs regardless of tenancy:
|
already defines the seam Phase 2 needs regardless of tenancy:
|
||||||
|
|||||||
@@ -192,10 +192,13 @@ replacement for it. Full middleware/handler wiring is task 5's scope.
|
|||||||
|
|
||||||
## Web UI boundary: a runtime capability check, not a conditional import
|
## Web UI boundary: a runtime capability check, not a conditional import
|
||||||
|
|
||||||
Core `web` never bundles enterprise-licensed Svelte components into its
|
Core `web` never bundles `enterprise/`'s Svelte components into its
|
||||||
build — that would put commercial-licensed source inside an AGPL
|
build (at the time this was written, that would have put
|
||||||
artifact, the UI-layer equivalent of the Go import-boundary problem
|
commercial-licensed source inside an AGPL artifact; as of Phase 6 both
|
||||||
`hack/check-tenant-boundary.sh` already guards against. Instead: core
|
are AGPLv3, but the architectural separation stands on its own merits —
|
||||||
|
core builds and ships standalone, the UI-layer equivalent of the Go
|
||||||
|
import-boundary problem `hack/check-tenant-boundary.sh` already guards
|
||||||
|
against). Instead: core
|
||||||
`web` ships a generic settings/admin route
|
`web` ships a generic settings/admin route
|
||||||
(`web/src/routes/settings/+page.svelte`, added in task 5) that, on load,
|
(`web/src/routes/settings/+page.svelte`, added in task 5) that, on load,
|
||||||
calls `GET {enterprise-auth base URL}/auth/features` and renders
|
calls `GET {enterprise-auth base URL}/auth/features` and renders
|
||||||
|
|||||||
@@ -355,8 +355,9 @@ docker run --rm --network sentry_default -v $(pwd)/api:/src -w /src \
|
|||||||
earlier in Phase 4, once `enterprise/cmd/enterprise-api` needed to
|
earlier in Phase 4, once `enterprise/cmd/enterprise-api` needed to
|
||||||
import it: Go's compiler-enforced `internal/` visibility rule meant a
|
import it: Go's compiler-enforced `internal/` visibility rule meant a
|
||||||
separate module like `enterprise/` could never import anything under
|
separate module like `enterprise/` could never import anything under
|
||||||
`api/internal/...`, regardless of the AGPL/commercial licensing
|
`api/internal/...`, regardless of the licensing boundary (AGPL/commercial
|
||||||
boundary, which only forbids the reverse direction.)
|
at the time this was written; both AGPLv3 as of Phase 6), which only
|
||||||
|
forbids the reverse direction.)
|
||||||
|
|
||||||
Expect all `TestIntegration*` tests to pass, including
|
Expect all `TestIntegration*` tests to pass, including
|
||||||
`TestIntegrationDashboardTenantForeignKeyRejectsUnknownTenant` (the
|
`TestIntegrationDashboardTenantForeignKeyRejectsUnknownTenant` (the
|
||||||
@@ -921,8 +922,10 @@ same registry the read side (§9) already uses -- routing each record's
|
|||||||
write into its own tenant's Tantivy index instead of the single default
|
write into its own tenant's Tantivy index instead of the single default
|
||||||
one. No "second binary" was needed here the way ClickHouse needed
|
one. No "second binary" was needed here the way ClickHouse needed
|
||||||
`enterprise-ingest`: Tantivy has no grant system to gate a
|
`enterprise-ingest`: Tantivy has no grant system to gate a
|
||||||
commercially-licensed credential behind, so `IndexRegistry` already
|
separately-credentialed binary behind (commercially licensed at the
|
||||||
lives directly in AGPL-core `search`, and read/write just share it.
|
time this was written; AGPLv3 as of Phase 6, though the architectural
|
||||||
|
point never depended on that), so `IndexRegistry` already lives directly
|
||||||
|
in AGPL-core `search`, and read/write just share it.
|
||||||
Because Tantivy is an embedded library (no Docker/broker needed to
|
Because Tantivy is an embedded library (no Docker/broker needed to
|
||||||
exercise real logic), this actually ran in this environment:
|
exercise real logic), this actually ran in this environment:
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
same as the read-side Tantivy claim above, since Tantivy is an embedded
|
||||||
library with no Docker dependency. No "second binary" was needed here,
|
library with no Docker dependency. No "second binary" was needed here,
|
||||||
unlike ClickHouse: Tantivy has no grant system to gate a
|
unlike ClickHouse: Tantivy has no grant system to gate a
|
||||||
commercially-licensed credential behind, so `IndexRegistry` already
|
separately-credentialed binary behind, so `IndexRegistry` already lived
|
||||||
lived directly in this AGPL-core `search` binary, and read/write simply
|
directly in this AGPL-core `search` binary, and read/write simply share
|
||||||
share it. This write path is now also active-tenant-gated:
|
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
|
`search/src/tenants.rs`'s `ActiveTenantTracker` polls a new
|
||||||
`GET /internal/active-tenants` endpoint on `enterprise-auth` every 60
|
`GET /internal/active-tenants` endpoint on `enterprise-auth` every 60
|
||||||
seconds (RoleService-credentialed, the same auth shape `alerting` uses
|
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)
|
## Module boundary (trust boundary #1)
|
||||||
|
|
||||||
`enterprise/` (commercial license: SSO, RBAC storage, audit logging,
|
`enterprise/` (SSO, RBAC storage, audit logging, session issuance — AGPLv3,
|
||||||
session issuance) is never imported by AGPL core (`/api`, `/alerting`,
|
same as core as of Phase 6, see `/docs/compliance/license-audit-report.md`)
|
||||||
`/web`, `/cli`) — enforced in CI by `hack/check-tenant-boundary.sh`,
|
is never imported by core (`/api`, `/alerting`, `/web`, `/cli`) —
|
||||||
which greps for the import edge on every build. Core calls
|
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`),
|
`enterprise-auth` over plain HTTP (`api/authz.HTTPAuthorizer`),
|
||||||
forwarding only the `Cookie`/`Authorization` headers, never the full
|
forwarding only the `Cookie`/`Authorization` headers, never the full
|
||||||
request (`api/authz/httpauthz_test.go` asserts this — an
|
request (`api/authz/httpauthz_test.go` asserts this — an
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Commercial-license module, built like every other Go service here --
|
# AGPLv3 module (same as core as of Phase 6), built like every other Go service here --
|
||||||
# context must be the repo root, not enterprise/ alone. enterprise/go.mod
|
# context must be the repo root, not enterprise/ alone. enterprise/go.mod
|
||||||
# has replace directives for api/, ingest/, and proto/ (all resolved as
|
# has replace directives for api/, ingest/, and proto/ (all resolved as
|
||||||
# sibling directories, e.g. ../api), and enterprise-auth needs api/
|
# sibling directories, e.g. ../api), and enterprise-auth needs api/
|
||||||
|
|||||||
+16
-8
@@ -1,13 +1,21 @@
|
|||||||
# enterprise
|
# enterprise
|
||||||
|
|
||||||
**Commercial license, not AGPLv3** — see `/CLAUDE.md`'s licensing
|
**AGPLv3, same as core** (relicensed from a commercial-license stub as
|
||||||
boundary. SSO (OIDC/SAML), tenant provisioning, and RBAC. Nothing in
|
of Phase 6 — see `/docs/compliance/license-audit-report.md`'s
|
||||||
`/agent`, `/ingest`, `/storage`, `/api`, `/web` core, or `/cli` imports
|
"enterprise/ relicensing" section for the record of that decision and
|
||||||
from this module — confirmed by `hack/check-tenant-boundary.sh`, run in
|
what it means). SSO (OIDC/SAML), tenant provisioning, and RBAC. Nothing
|
||||||
CI. `enterprise/` supplies tenant-scoped implementations of core's
|
in `/agent`, `/ingest`, `/storage`, `/api`, `/web` core, or `/cli`
|
||||||
already-shipped `api/querylang/executor.SQLRunner`/
|
imports from this module — confirmed by `hack/check-tenant-boundary.sh`,
|
||||||
`SearchClient` interfaces rather than core growing tenant awareness —
|
run in CI. This is now an *architectural* boundary only, not a licensing
|
||||||
see `/docs/phase-4-isolation-design.md` for why.
|
one: keeps core buildable and deployable with zero multi-tenant
|
||||||
|
mechanism present even though both sides carry the same license, and
|
||||||
|
preserves the network-trust-boundary design
|
||||||
|
`/docs/phase-4-isolation-design.md` describes (tenant identity is
|
||||||
|
resolved server-side, never taken from a request parameter). `enterprise/`
|
||||||
|
supplies tenant-scoped implementations of core's already-shipped
|
||||||
|
`api/querylang/executor.SQLRunner`/`SearchClient` interfaces rather than
|
||||||
|
core growing tenant awareness — see `/docs/phase-4-isolation-design.md`
|
||||||
|
for why.
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,12 @@
|
|||||||
# every change; both checks exit non-zero (and print the offending lines)
|
# every change; both checks exit non-zero (and print the offending lines)
|
||||||
# on a violation.
|
# on a violation.
|
||||||
#
|
#
|
||||||
# 1. No AGPL-core Go code imports enterprise/ -- core must stay
|
# 1. No core Go code imports enterprise/ -- core must stay genuinely
|
||||||
# genuinely single-tenant with zero multi-tenant mechanism present,
|
# single-tenant with zero multi-tenant mechanism present. This was
|
||||||
# per the licensing-boundary decision confirmed for Phase 4.
|
# originally also a licensing boundary (enterprise/ was
|
||||||
|
# commercial-licensed through Phase 5); as of Phase 6 both sides are
|
||||||
|
# AGPLv3, so this is now purely architectural -- see
|
||||||
|
# /docs/compliance/license-audit-report.md.
|
||||||
# 2. tenant.TrustFromValidatedSession is called, in non-test production
|
# 2. tenant.TrustFromValidatedSession is called, in non-test production
|
||||||
# code, only from the auth-middleware allowlist below -- everywhere
|
# code, only from the auth-middleware allowlist below -- everywhere
|
||||||
# else is either a mistake or a new call site that needs the same
|
# else is either a mistake or a new call site that needs the same
|
||||||
@@ -22,7 +25,7 @@ fail=0
|
|||||||
echo "Checking: no core Go package imports enterprise/..."
|
echo "Checking: no core Go package imports enterprise/..."
|
||||||
# Core = every top-level Go module except enterprise/ and hack/ (hack/
|
# Core = every top-level Go module except enterprise/ and hack/ (hack/
|
||||||
# tooling isn't shipped, and load-test/fixture scripts have no reason to
|
# tooling isn't shipped, and load-test/fixture scripts have no reason to
|
||||||
# import enterprise/ either, but they're not part of the licensing
|
# import enterprise/ either, but they're not part of the architectural
|
||||||
# boundary claim, so they're excluded rather than asserted about).
|
# boundary claim, so they're excluded rather than asserted about).
|
||||||
core_hits="$(grep -rn '"github.com/sentry/sentry/enterprise' \
|
core_hits="$(grep -rn '"github.com/sentry/sentry/enterprise' \
|
||||||
--include='*.go' \
|
--include='*.go' \
|
||||||
|
|||||||
+2
-1
@@ -42,7 +42,8 @@ This package (AGPL core) only ever writes to one shared ClickHouse
|
|||||||
database, regardless of any `tenant_id` tag a message carries -- routing
|
database, regardless of any `tenant_id` tag a message carries -- routing
|
||||||
a tagged record into its own tenant's dedicated database is
|
a tagged record into its own tenant's dedicated database is
|
||||||
`enterprise/internal/chwriter` and `enterprise/cmd/enterprise-ingest`'s
|
`enterprise/internal/chwriter` and `enterprise/cmd/enterprise-ingest`'s
|
||||||
job (commercial-licensed, per `/CLAUDE.md`'s licensing boundary), not
|
job (a separate module by architectural convention, not a licensing
|
||||||
|
split -- both are AGPLv3, see `/CLAUDE.md`'s licensing boundary), not
|
||||||
this package's. `consumer` and `clickhousewriter` live outside
|
this package's. `consumer` and `clickhousewriter` live outside
|
||||||
`internal/` (moved there once `enterprise/internal/chwriter` needed to
|
`internal/` (moved there once `enterprise/internal/chwriter` needed to
|
||||||
import them directly -- Go's compiler-enforced `internal/` visibility
|
import them directly -- Go's compiler-enforced `internal/` visibility
|
||||||
|
|||||||
@@ -5,8 +5,9 @@
|
|||||||
// tenant -- same reasoning api/internal/dashboards and friends moved out
|
// tenant -- same reasoning api/internal/dashboards and friends moved out
|
||||||
// of internal/ earlier in Phase 4: Go's compiler-enforced internal/
|
// of internal/ earlier in Phase 4: Go's compiler-enforced internal/
|
||||||
// visibility blocks a separate module (enterprise/) from importing
|
// visibility blocks a separate module (enterprise/) from importing
|
||||||
// anything under ingest/internal/..., regardless of what the AGPL/
|
// anything under ingest/internal/..., independent of licensing --
|
||||||
// commercial licensing boundary itself would otherwise allow.
|
// both modules are AGPLv3 as of Phase 6, and this was always an
|
||||||
|
// import-graph constraint, not a license one.
|
||||||
package clickhousewriter
|
package clickhousewriter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
// Package tenantresolver is ingest's HTTP client for resolving an
|
// Package tenantresolver is ingest's HTTP client for resolving an
|
||||||
// agent-presented ingest credential to a tenant -- calls enterprise-
|
// agent-presented ingest credential to a tenant -- calls enterprise-
|
||||||
// auth's POST /internal/authorize-ingest over the network, never
|
// auth's POST /internal/authorize-ingest over the network, never
|
||||||
// importing enterprise/ (ingest is AGPL core; enterprise/ is
|
// importing enterprise/ (both ingest and enterprise/ are AGPLv3 as of
|
||||||
// commercial-licensed and must never be imported by core code -- same
|
// Phase 6; the import boundary is architectural, not a licensing wall --
|
||||||
// "network boundary, not import boundary" shape api/authz.HTTPAuthorizer
|
// same "network boundary, not import boundary" shape api/authz.HTTPAuthorizer
|
||||||
// already uses for the query path, and enterprise-auth's own doc
|
// already uses for the query path, and enterprise-auth's own doc
|
||||||
// comment on POST /internal/authorize-ingest). nil (no resolver
|
// comment on POST /internal/authorize-ingest). nil (no resolver
|
||||||
// configured) is grpcserver.Server's documented no-op default --
|
// configured) is grpcserver.Server's documented no-op default --
|
||||||
|
|||||||
@@ -0,0 +1,264 @@
|
|||||||
|
# This template contains all of the possible sections and their default values
|
||||||
|
|
||||||
|
# Note that all fields that take a lint level have these possible values:
|
||||||
|
# * deny - An error will be produced and the check will fail
|
||||||
|
# * warn - A warning will be produced, but the check will not fail
|
||||||
|
# * allow - No warning or error will be produced, though in some cases a note
|
||||||
|
# will be
|
||||||
|
|
||||||
|
# The values provided in this template are the default values that will be used
|
||||||
|
# when any section or field is not specified in your own configuration
|
||||||
|
|
||||||
|
# Root options
|
||||||
|
|
||||||
|
# The graph table configures how the dependency graph is constructed and thus
|
||||||
|
# which crates the checks are performed against
|
||||||
|
[graph]
|
||||||
|
# If 1 or more target triples (and optionally, target_features) are specified,
|
||||||
|
# only the specified targets will be checked when running `cargo deny check`.
|
||||||
|
# This means, if a particular package is only ever used as a target specific
|
||||||
|
# dependency, such as, for example, the `nix` crate only being used via the
|
||||||
|
# `target_family = "unix"` configuration, that only having windows targets in
|
||||||
|
# this list would mean the nix crate, as well as any of its exclusive
|
||||||
|
# dependencies not shared by any other crates, would be ignored, as the target
|
||||||
|
# list here is effectively saying which targets you are building for.
|
||||||
|
targets = [
|
||||||
|
# The triple can be any string, but only the target triples built in to
|
||||||
|
# rustc (as of 1.40) can be checked against actual config expressions
|
||||||
|
#"x86_64-unknown-linux-musl",
|
||||||
|
# You can also specify which target_features you promise are enabled for a
|
||||||
|
# particular target. target_features are currently not validated against
|
||||||
|
# the actual valid features supported by the target architecture.
|
||||||
|
#{ triple = "wasm32-unknown-unknown", features = ["atomics"] },
|
||||||
|
]
|
||||||
|
# When creating the dependency graph used as the source of truth when checks are
|
||||||
|
# executed, this field can be used to prune crates from the graph, removing them
|
||||||
|
# from the view of cargo-deny. This is an extremely heavy hammer, as if a crate
|
||||||
|
# is pruned from the graph, all of its dependencies will also be pruned unless
|
||||||
|
# they are connected to another crate in the graph that hasn't been pruned,
|
||||||
|
# so it should be used with care. The identifiers are [Package ID Specifications]
|
||||||
|
# (https://doc.rust-lang.org/cargo/reference/pkgid-spec.html)
|
||||||
|
#exclude = []
|
||||||
|
# If true, metadata will be collected with `--all-features`. Note that this can't
|
||||||
|
# be toggled off if true, if you want to conditionally enable `--all-features` it
|
||||||
|
# is recommended to pass `--all-features` on the cmd line instead
|
||||||
|
all-features = false
|
||||||
|
# If true, metadata will be collected with `--no-default-features`. The same
|
||||||
|
# caveat with `all-features` applies
|
||||||
|
no-default-features = false
|
||||||
|
# If set, these feature will be enabled when collecting metadata. If `--features`
|
||||||
|
# is specified on the cmd line they will take precedence over this option.
|
||||||
|
#features = []
|
||||||
|
|
||||||
|
# The output table provides options for how/if diagnostics are outputted
|
||||||
|
[output]
|
||||||
|
# When outputting inclusion graphs in diagnostics that include features, this
|
||||||
|
# option can be used to specify the depth at which feature edges will be added.
|
||||||
|
# This option is included since the graphs can be quite large and the addition
|
||||||
|
# of features from the crate(s) to all of the graph roots can be far too verbose.
|
||||||
|
# This option can be overridden via `--feature-depth` on the cmd line
|
||||||
|
feature-depth = 1
|
||||||
|
|
||||||
|
# This section is considered when running `cargo deny check advisories`
|
||||||
|
# More documentation for the advisories section can be found here:
|
||||||
|
# https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html
|
||||||
|
[advisories]
|
||||||
|
# The path where the advisory databases are cloned/fetched into
|
||||||
|
#db-path = "$CARGO_HOME/advisory-dbs"
|
||||||
|
# The url(s) of the advisory databases to use
|
||||||
|
#db-urls = ["https://github.com/rustsec/advisory-db"]
|
||||||
|
# A list of advisory IDs to ignore. Note that ignored advisories will still
|
||||||
|
# output a note when they are encountered.
|
||||||
|
ignore = [
|
||||||
|
#"RUSTSEC-0000-0000",
|
||||||
|
#{ id = "RUSTSEC-0000-0000", reason = "you can specify a reason the advisory is ignored" },
|
||||||
|
#"[email protected]", # you can also ignore yanked crate versions if you wish
|
||||||
|
#{ crate = "[email protected]", reason = "you can specify why you are ignoring the yanked crate" },
|
||||||
|
]
|
||||||
|
# If this is true, then cargo deny will use the git executable to fetch advisory database.
|
||||||
|
# If this is false, then it uses a built-in git library.
|
||||||
|
# Setting this to true can be helpful if you have special authentication requirements that cargo-deny does not support.
|
||||||
|
# See Git Authentication for more information about setting up git authentication.
|
||||||
|
#git-fetch-with-cli = true
|
||||||
|
|
||||||
|
# This section is considered when running `cargo deny check licenses`
|
||||||
|
# More documentation for the licenses section can be found here:
|
||||||
|
# https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html
|
||||||
|
[licenses]
|
||||||
|
# List of explicitly allowed licenses
|
||||||
|
# See https://spdx.org/licenses/ for list of possible licenses
|
||||||
|
# [possible values: any SPDX 3.11 short identifier (+ optional exception)].
|
||||||
|
# Sentry's own AGPLv3-project license policy (Phase 6 license audit --
|
||||||
|
# see /docs/compliance/license-policy.md for the full rationale per
|
||||||
|
# category). Every license actually found in this crate's dependency
|
||||||
|
# tree at audit time is listed explicitly here, not just the common
|
||||||
|
# ones, so a genuinely new license shows up as a real CI failure, not
|
||||||
|
# something silently covered by a broad wildcard.
|
||||||
|
allow = [
|
||||||
|
"MIT",
|
||||||
|
"Apache-2.0",
|
||||||
|
"Apache-2.0 WITH LLVM-exception",
|
||||||
|
"BSD-2-Clause",
|
||||||
|
"BSD-3-Clause",
|
||||||
|
"ISC",
|
||||||
|
"0BSD",
|
||||||
|
"BSL-1.0",
|
||||||
|
"MPL-2.0",
|
||||||
|
"Unicode-3.0",
|
||||||
|
"Unlicense",
|
||||||
|
"Zlib",
|
||||||
|
"AGPL-3.0-only", # this project's own crates
|
||||||
|
]
|
||||||
|
# Deliberately NOT in the blanket allow list: LGPL-2.1-or-later,
|
||||||
|
# zlib-acknowledgement. Both currently appear only on crates that also
|
||||||
|
# offer a permissive alternative in an SPDX OR expression (r-efi:
|
||||||
|
# "MIT OR Apache-2.0 OR LGPL-2.1-or-later"; fastdivide:
|
||||||
|
# "MIT OR zlib-acknowledgement") -- cargo-deny accepts a crate if ANY
|
||||||
|
# license in its OR expression is allowed, so these pass via MIT/Apache-2.0
|
||||||
|
# without either weaker-copyleft license needing a blanket allow. A future
|
||||||
|
# crate offering ONLY one of these, with no permissive alternative, should
|
||||||
|
# fail this check and get manual (b)-category review, not sail through.
|
||||||
|
# The confidence threshold for detecting a license from license text.
|
||||||
|
# The higher the value, the more closely the license text must be to the
|
||||||
|
# canonical license text of a valid SPDX license file.
|
||||||
|
# [possible values: any between 0.0 and 1.0].
|
||||||
|
confidence-threshold = 0.8
|
||||||
|
# Allow 1 or more licenses on a per-crate basis, so that particular licenses
|
||||||
|
# aren't accepted for every possible crate as with the normal allow list
|
||||||
|
exceptions = [
|
||||||
|
# Each entry is the crate and version constraint, and its specific allow
|
||||||
|
# list
|
||||||
|
#{ allow = ["Zlib"], crate = "adler32" },
|
||||||
|
]
|
||||||
|
|
||||||
|
# Some crates don't have (easily) machine readable licensing information,
|
||||||
|
# adding a clarification entry for it allows you to manually specify the
|
||||||
|
# licensing information
|
||||||
|
#[[licenses.clarify]]
|
||||||
|
# The package spec the clarification applies to
|
||||||
|
#crate = "ring"
|
||||||
|
# The SPDX expression for the license requirements of the crate
|
||||||
|
#expression = "MIT AND ISC AND OpenSSL"
|
||||||
|
# One or more files in the crate's source used as the "source of truth" for
|
||||||
|
# the license expression. If the contents match, the clarification will be used
|
||||||
|
# when running the license check, otherwise the clarification will be ignored
|
||||||
|
# and the crate will be checked normally, which may produce warnings or errors
|
||||||
|
# depending on the rest of your configuration
|
||||||
|
#license-files = [
|
||||||
|
# Each entry is a crate relative path, and the (opaque) hash of its contents
|
||||||
|
#{ path = "LICENSE", hash = 0xbd0eed23 }
|
||||||
|
#]
|
||||||
|
|
||||||
|
[licenses.private]
|
||||||
|
# If true, ignores workspace crates that aren't published, or are only
|
||||||
|
# published to private registries.
|
||||||
|
# To see how to mark a crate as unpublished (to the official registry),
|
||||||
|
# visit https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field.
|
||||||
|
ignore = false
|
||||||
|
# One or more private registries that you might publish crates to, if a crate
|
||||||
|
# is only published to private registries, and ignore is true, the crate will
|
||||||
|
# not have its license(s) checked
|
||||||
|
registries = [
|
||||||
|
#"https://sekretz.com/registry
|
||||||
|
]
|
||||||
|
|
||||||
|
# This section is considered when running `cargo deny check bans`.
|
||||||
|
# More documentation about the 'bans' section can be found here:
|
||||||
|
# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html
|
||||||
|
[bans]
|
||||||
|
# Lint level for when multiple versions of the same crate are detected
|
||||||
|
multiple-versions = "warn"
|
||||||
|
# Lint level for when a crate version requirement is `*`
|
||||||
|
wildcards = "allow"
|
||||||
|
# The graph highlighting used when creating dotgraphs for crates
|
||||||
|
# with multiple versions
|
||||||
|
# * lowest-version - The path to the lowest versioned duplicate is highlighted
|
||||||
|
# * simplest-path - The path to the version with the fewest edges is highlighted
|
||||||
|
# * all - Both lowest-version and simplest-path are used
|
||||||
|
highlight = "all"
|
||||||
|
# The default lint level for `default` features for crates that are members of
|
||||||
|
# the workspace that is being checked. This can be overridden by allowing/denying
|
||||||
|
# `default` on a crate-by-crate basis if desired.
|
||||||
|
workspace-default-features = "allow"
|
||||||
|
# The default lint level for `default` features for external crates that are not
|
||||||
|
# members of the workspace. This can be overridden by allowing/denying `default`
|
||||||
|
# on a crate-by-crate basis if desired.
|
||||||
|
external-default-features = "allow"
|
||||||
|
# List of crates that are allowed. Use with care!
|
||||||
|
allow = [
|
||||||
|
#"[email protected]",
|
||||||
|
#{ crate = "[email protected]", reason = "you can specify a reason it is allowed" },
|
||||||
|
]
|
||||||
|
# If true, workspace members are automatically allowed even when using deny-by-default
|
||||||
|
# This is useful for organizations that want to deny all external dependencies by default
|
||||||
|
# but allow their own workspace crates without having to explicitly list them
|
||||||
|
allow-workspace = false
|
||||||
|
# List of crates to deny
|
||||||
|
deny = [
|
||||||
|
#"[email protected]",
|
||||||
|
#{ crate = "[email protected]", reason = "you can specify a reason it is banned" },
|
||||||
|
# Wrapper crates can optionally be specified to allow the crate when it
|
||||||
|
# is a direct dependency of the otherwise banned crate
|
||||||
|
#{ crate = "[email protected]", wrappers = ["this-crate-directly-depends-on-ansi_term"] },
|
||||||
|
]
|
||||||
|
|
||||||
|
# List of features to allow/deny
|
||||||
|
# Each entry the name of a crate and a version range. If version is
|
||||||
|
# not specified, all versions will be matched.
|
||||||
|
#[[bans.features]]
|
||||||
|
#crate = "reqwest"
|
||||||
|
# Features to not allow
|
||||||
|
#deny = ["json"]
|
||||||
|
# Features to allow
|
||||||
|
#allow = [
|
||||||
|
# "rustls",
|
||||||
|
# "__rustls",
|
||||||
|
# "__tls",
|
||||||
|
# "hyper-rustls",
|
||||||
|
# "rustls",
|
||||||
|
# "rustls-pemfile",
|
||||||
|
# "rustls-tls-webpki-roots",
|
||||||
|
# "tokio-rustls",
|
||||||
|
# "webpki-roots",
|
||||||
|
#]
|
||||||
|
# If true, the allowed features must exactly match the enabled feature set. If
|
||||||
|
# this is set there is no point setting `deny`
|
||||||
|
#exact = true
|
||||||
|
|
||||||
|
# Certain crates/versions that will be skipped when doing duplicate detection.
|
||||||
|
skip = [
|
||||||
|
#"[email protected]",
|
||||||
|
#{ crate = "[email protected]", reason = "you can specify a reason why it can't be updated/removed" },
|
||||||
|
]
|
||||||
|
# Similarly to `skip` allows you to skip certain crates during duplicate
|
||||||
|
# detection. Unlike skip, it also includes the entire tree of transitive
|
||||||
|
# dependencies starting at the specified crate, up to a certain depth, which is
|
||||||
|
# by default infinite.
|
||||||
|
skip-tree = [
|
||||||
|
#"[email protected]", # will be skipped along with _all_ of its direct and transitive dependencies
|
||||||
|
#{ crate = "[email protected]", depth = 20 },
|
||||||
|
]
|
||||||
|
|
||||||
|
# This section is considered when running `cargo deny check sources`.
|
||||||
|
# More documentation about the 'sources' section can be found here:
|
||||||
|
# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html
|
||||||
|
[sources]
|
||||||
|
# Lint level for what to happen when a crate from a crate registry that is not
|
||||||
|
# in the allow list is encountered
|
||||||
|
unknown-registry = "warn"
|
||||||
|
# Lint level for what to happen when a crate from a git repository that is not
|
||||||
|
# in the allow list is encountered
|
||||||
|
unknown-git = "warn"
|
||||||
|
# List of URLs for allowed crate registries. Defaults to the crates.io index
|
||||||
|
# if not specified. If it is specified but empty, no registries are allowed.
|
||||||
|
allow-registry = ["https://github.com/rust-lang/crates.io-index"]
|
||||||
|
# List of URLs for allowed Git repositories
|
||||||
|
allow-git = []
|
||||||
|
|
||||||
|
[sources.allow-org]
|
||||||
|
# github.com organizations to allow git sources for
|
||||||
|
github = []
|
||||||
|
# gitlab.com organizations to allow git sources for
|
||||||
|
gitlab = []
|
||||||
|
# bitbucket.org organizations to allow git sources for
|
||||||
|
bitbucket = []
|
||||||
+4
-2
@@ -192,8 +192,10 @@ attribute" above.
|
|||||||
surface) -- meaningfully different auth model (offline operator flags
|
surface) -- meaningfully different auth model (offline operator flags
|
||||||
today, not a stable REST API a provider could safely drive
|
today, not a stable REST API a provider could safely drive
|
||||||
idempotently -- see `/enterprise/README.md`'s "Bootstrapping a tenant"
|
idempotently -- see `/enterprise/README.md`'s "Bootstrapping a tenant"
|
||||||
section) and Phase 4 commercial licensing, so this would need its own
|
section), so this would need its own design pass, not just "add
|
||||||
design pass, not just "add another resource file."
|
another resource file." (Not a licensing question as of Phase 6 --
|
||||||
|
`enterprise/` is AGPLv3 same as this provider module; the blocker is
|
||||||
|
purely that the underlying API isn't idempotent-safe yet.)
|
||||||
- Publishing to the real Terraform Registry -- `main.go`'s `Address`
|
- Publishing to the real Terraform Registry -- `main.go`'s `Address`
|
||||||
(`registry.terraform.io/sentry/sentry`) is the address a real
|
(`registry.terraform.io/sentry/sentry`) is the address a real
|
||||||
publication would use, but nothing has actually been published; local
|
publication would use, but nothing has actually been published; local
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "web",
|
"name": "web",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
"license": "AGPL-3.0-only",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
+7
-5
@@ -5,11 +5,13 @@
|
|||||||
|
|
||||||
export const apiBase = import.meta.env.VITE_API_BASE_URL ?? 'http://localhost:8080';
|
export const apiBase = import.meta.env.VITE_API_BASE_URL ?? 'http://localhost:8080';
|
||||||
export const alertingBase = import.meta.env.VITE_ALERTING_API_BASE_URL ?? 'http://localhost:8081';
|
export const alertingBase = import.meta.env.VITE_ALERTING_API_BASE_URL ?? 'http://localhost:8081';
|
||||||
// Optional third backend (Phase 4, commercial-license) -- undefined in a
|
// Optional third backend (Phase 4; enterprise/ is AGPLv3 same as core
|
||||||
// deployment that hasn't built/deployed enterprise-auth, same "runtime
|
// as of Phase 6, but stays a separate optional service architecturally)
|
||||||
// capability check" shape /docs/phase-4-rbac-design.md's Web UI boundary
|
// -- undefined in a deployment that hasn't built/deployed enterprise-auth,
|
||||||
// section describes. getAuthFeatures below treats a missing base URL the
|
// same "runtime capability check" shape /docs/phase-4-rbac-design.md's
|
||||||
// same as a failed fetch: everything reports disabled, no broken links.
|
// Web UI boundary section describes. getAuthFeatures below treats a
|
||||||
|
// missing base URL the same as a failed fetch: everything reports
|
||||||
|
// disabled, no broken links.
|
||||||
export const enterpriseAuthBase = import.meta.env.VITE_ENTERPRISE_AUTH_BASE_URL as string | undefined;
|
export const enterpriseAuthBase = import.meta.env.VITE_ENTERPRISE_AUTH_BASE_URL as string | undefined;
|
||||||
|
|
||||||
export type Language = '' | 'sql' | 'spl';
|
export type Language = '' | 'sql' | 'spl';
|
||||||
|
|||||||
@@ -1,7 +1,101 @@
|
|||||||
Overpass and Overpass Mono are licensed under the SIL Open Font License,
|
Copyright 2015 Red Hat, Inc.,
|
||||||
Version 1.1: https://openfontlicense.org/
|
|
||||||
|
|
||||||
Fetched from Google Fonts (fonts.google.com/specimen/Overpass,
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
fonts.google.com/specimen/Overpass+Mono) and self-hosted here rather than
|
This license is copied below, and is also available with a FAQ at:
|
||||||
loaded from a CDN, so the app has no runtime dependency on Google's font
|
http://scripts.sil.org/OFL
|
||||||
service.
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply to any
|
||||||
|
document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components
|
||||||
|
as distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to
|
||||||
|
a new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical writer
|
||||||
|
or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components, in
|
||||||
|
Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or in
|
||||||
|
the appropriate machine-readable metadata fields within text or binary
|
||||||
|
files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the
|
||||||
|
corresponding Copyright Holder. This restriction only applies to the
|
||||||
|
primary font name as presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any Modified
|
||||||
|
Version, except to acknowledge the contribution(s) of the Copyright
|
||||||
|
Holder(s) and the Author(s) or with their explicit written permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole, must
|
||||||
|
be distributed entirely under this license, and must not be distributed
|
||||||
|
under any other license. The requirement for fonts to remain under this
|
||||||
|
license does not apply to any document created using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||||
|
COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
|
||||||
|
DEALINGS IN THE FONT SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Project note (not part of the license): fetched from Google Fonts
|
||||||
|
(fonts.google.com/specimen/Overpass, fonts.google.com/specimen/Overpass+Mono)
|
||||||
|
and self-hosted here rather than loaded from a CDN, so the app has no
|
||||||
|
runtime dependency on Google's font service. Text above is the unmodified
|
||||||
|
OFL-1.1 license as published at github.com/googlefonts/overpass, the
|
||||||
|
source repository these files were fetched from.
|
||||||
|
|||||||
Reference in New Issue
Block a user