Lumbridge is Apache-2.0, and decision 0023 quietly made it link
GPL-3.0-or-later. `crates/gpui/Cargo.toml` at the pinned revision carries
`ztracing.workspace = true` -- unconditional, not optional, not behind a
feature -- and `ztracing` is GPL-3.0-or-later, as are the `zlog` and
`ztracing_macro` it pulls. `sum_tree` asks for it too. The path is the ordinary
Linux build, not an `--all-features` artefact and not a dev-dependency:
lumbridge -> gpui_platform -> gpui_linux -> gpui -> ztracing -> zlog
-> ztracing_macro
`cargo deny check licenses` failed on it, exit 4.
This is the second thing decision 0023 got wrong by reading the manifests of the
crates it added instead of resolving the graph; the first was believing there
were two Zed Git sources when there are five. Both were found by a gate that had
never been run.
There was no feature to turn off, so the choice was to relax the licence policy,
drop the framework, or stop compiling the crate. `ztracing` is now redirected by
a `[patch]` table at `crates/lumbridge-ztracing-shim`, a first-party
zero-dependency no-op under Apache-2.0. `zlog` and `ztracing_macro` were
reachable only through it and leave the lockfile with it.
The shim is small because the usage is: nine `#[instrument(skip_all)]` sites
across `gpui/src/svg_renderer.rs`, `sum_tree/src/sum_tree.rs` and
`sum_tree/src/cursor.rs`, and nothing else. Upstream's own crate compiles to
almost exactly this whenever the `ztracing` cfg is off, which is every build
that is not a Tracy profiling build, so no shipping behaviour is lost. It is a
proc-macro crate deliberately: such a crate can export nothing but proc macros,
so an upstream revision that starts using `ztracing::Span` or
`ztracing::info_span!` fails to compile and names the shim, rather than
resolving to something plausible.
`scripts/workspace-guard.sh` gained a third gate asserting, against Cargo.lock
rather than the manifest, that no `ztracing`, `zlog` or `ztracing_macro`
resolves to a Zed source and that the patch table is still present. `cargo deny`
already checks this, and the duplication is the point: `scripts/ci.sh`
downgrades a missing cargo-deny to a warning unless `LUMBRIDGE_CI_STRICT=1`, and
that is how the licence closure went ungated once already. A `[patch]` is an
unusually quiet thing to lose -- delete the table and everything still compiles,
still passes, and is GPL again.
Removing the three GPL rejections exposed a fourth that had been sitting beside
them and was never reported separately: `libbz2-rs-sys` under `bzip2-1.0.6`,
reached through async-compression <- http_client <- gpui. It is BSD-style and
permissive with no copyleft, and is allowed in `deny.toml` with that reasoning
written down. `cargo deny check licenses sources` is exit 0 for the first time.
The Git-source allowances in `deny.toml` are all still needed; the patched
crate's own source was `zed.git`, which `gpui` still requires.
Decision 0025 records the whole of it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SPYebLiN2w4TqnHUYGdECq
59 lines
2.1 KiB
TOML
59 lines
2.1 KiB
TOML
[workspace]
|
|
members = [
|
|
"apps/lumbridge",
|
|
"crates/lumbridge-buzz",
|
|
"crates/lumbridge-core",
|
|
"crates/lumbridge-devices",
|
|
"crates/lumbridge-harness",
|
|
"crates/lumbridge-pty",
|
|
"crates/lumbridge-runtime",
|
|
"crates/lumbridge-settings",
|
|
"crates/lumbridge-storage",
|
|
"crates/lumbridge-terminal",
|
|
"crates/lumbridge-theme",
|
|
"crates/lumbridge-ui-fixture",
|
|
"crates/lumbridge-ztracing-shim",
|
|
"tools/theme-gen",
|
|
]
|
|
exclude = ["spikes"]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
version = "0.0.1"
|
|
edition = "2024"
|
|
rust-version = "1.97"
|
|
license = "Apache-2.0"
|
|
repository = "https://git.karti.ai/lumbridge-public/lumbridge-code"
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "forbid"
|
|
|
|
[workspace.lints.clippy]
|
|
all = "warn"
|
|
pedantic = "warn"
|
|
|
|
# GPUI's transitive GPL dependency, replaced by a first-party no-op.
|
|
#
|
|
# `gpui` at the pinned revision carries `ztracing.workspace = true` --
|
|
# unconditional and not behind a feature -- and `ztracing` is GPL-3.0-or-later,
|
|
# as are the `zlog` and `ztracing_macro` it drags with it. All three land in the
|
|
# ordinary Linux build, not merely under `--all-features`, which makes them a
|
|
# licence problem for an Apache-2.0 product rather than a lint to silence.
|
|
# `cargo deny check licenses` failed on exactly this.
|
|
#
|
|
# The graph uses one symbol from the crate: an `#[instrument(skip_all)]`
|
|
# attribute, at nine sites across `gpui` and `sum_tree`. So `ztracing` is
|
|
# redirected at a workspace crate that provides that attribute and nothing else.
|
|
# `zlog` and `ztracing_macro` were reachable only through `ztracing` and leave
|
|
# the resolved graph with it.
|
|
#
|
|
# The URL is the one Cargo.lock records for the source being replaced --
|
|
# `git+https://github.com/zed-industries/zed.git?rev=...` -- and it must stay
|
|
# spelled that way, `.git` included, or the patch silently applies to nothing.
|
|
# `scripts/workspace-guard.sh` asserts the result rather than the intent: that
|
|
# no `ztracing`, `zlog` or `ztracing_macro` resolves to a Zed source.
|
|
#
|
|
# Read crates/lumbridge-ztracing-shim/src/lib.rs before bumping the revision.
|
|
[patch."https://github.com/zed-industries/zed.git"]
|
|
ztracing = { path = "crates/lumbridge-ztracing-shim" }
|