Skip to content

Commit 6750a9f

Browse files
jjohareruvnet
andcommitted
chore: inherit AGPL-3.0 from JSS ecosystem covenant (v0.3.0-alpha.3)
Migrate solid-pod-rs licence from dual MIT OR Apache-2.0 to AGPL-3.0-only, matching the JavaScriptSolidServer (JSS) ecosystem from which the crate derives its protocol coverage and parity test corpus. JSS is AGPL-3.0; this migration preserves the network-service copyleft protection rather than weakening it with a permissive relicence. Breaking change: per AGPL section 13, anyone operating solid-pod-rs as a network-accessible service must make their corresponding source code available to their users. Files: - LICENSE (661 lines of AGPL-3.0 text, fetched verbatim from gnu.org) - LICENSE-MIT, LICENSE-APACHE removed - Cargo.toml: license = "AGPL-3.0-only", version bumped to 0.3.0-alpha.3 - NOTICE: rewritten around AGPL + JSS provenance chain (JSS → community-forum-rs pod-worker → VisionClaw → dreamlab-ai/solid-pod-rs) - README.md: badge + Licence section + Provenance lineage text - CONTRIBUTING.md: Licence on contribution section - CHANGELOG.md: 0.3.0-alpha.3 entry documenting the migration - deny.toml: new — AGPL-3.0 on dep-graph allowlist, deny-by-default posture retained for everything else Co-Authored-By: claude-flow <ruv@ruv.net>
1 parent 89f4e02 commit 6750a9f

9 files changed

Lines changed: 870 additions & 174 deletions

File tree

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,24 @@ All notable changes to this crate are recorded here. Format follows
44
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the crate
55
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## 0.3.0-alpha.3 — 2026-04-20
8+
9+
### Licence migration (BREAKING)
10+
11+
- Licence changed from dual `MIT OR Apache-2.0` to `AGPL-3.0-only`.
12+
- Inherited from the JavaScriptSolidServer (JSS) ecosystem covenant; JSS
13+
is AGPL-3.0, and solid-pod-rs preserves the network-service copyleft
14+
protection rather than weakening it with a permissive relicence.
15+
- `LICENSE-MIT` and `LICENSE-APACHE` removed; `LICENSE` added with full
16+
AGPL-3.0 text.
17+
- `Cargo.toml` `license` field updated to `"AGPL-3.0-only"`.
18+
- `NOTICE` rewritten to document AGPL covenant + full provenance chain.
19+
- `deny.toml` added with AGPL-3.0 on the allowlist for the dependency
20+
graph; the denylist posture remains deny-by-default for anything not
21+
on the allowlist.
22+
- Consumers: if you're operating solid-pod-rs as a network service, AGPL
23+
§13 requires you to distribute corresponding source to your users.
24+
725
## [0.3.0-alpha.2] — 2026-04-20
826

927
### Fixed

CONTRIBUTING.md

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,24 @@ deferrals.
8888

8989
## Licence on contributions
9090

91-
By contributing, you agree that your code is licensed under the dual
92-
MIT OR Apache-2.0 licence that covers this crate. This mirrors the
93-
Rust ecosystem norm and is compatible with the Community Solid
94-
Server's MIT licence.
91+
solid-pod-rs is licensed **AGPL-3.0-only**, inherited from the
92+
JavaScriptSolidServer (JSS) ecosystem covenant. By submitting a
93+
contribution (patch, PR, documentation change) you agree that your
94+
contribution is licensed under the same AGPL-3.0-only terms, and that
95+
you have the right to release it under those terms. There is no
96+
separate CLA; the licence on the file you edit is the licence on your
97+
change.
98+
99+
Practical implications:
100+
101+
- Contributions under a permissive licence (MIT / Apache-2.0 / BSD)
102+
are accepted — permissive upstream code can be relicensed on inbound,
103+
and the crate remains AGPL on outbound.
104+
- Contributions under an incompatible copyleft licence (e.g. GPL-2.0-
105+
only, SSPL, BUSL) cannot be merged.
106+
- If your employer requires a DCO / CLA process, please sign your
107+
commits with `git commit -s` and flag the PR so we can record the
108+
trail.
95109

96110
## Security
97111

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
[package]
22
name = "solid-pod-rs"
3-
version = "0.3.0-alpha.2"
3+
version = "0.3.0-alpha.3"
44
edition = "2021"
55
rust-version = "1.75"
6-
license = "MIT OR Apache-2.0"
6+
license = "AGPL-3.0-only"
77
description = "Rust-native Solid Pod server — LDP-BASIC, WAC, NIP-98, Solid-OIDC, Solid Notifications. Framework-agnostic library crate."
88
authors = [
99
"DreamLab AI contributors",

LICENSE

Lines changed: 661 additions & 0 deletions
Large diffs are not rendered by default.

LICENSE-APACHE

Lines changed: 0 additions & 17 deletions
This file was deleted.

LICENSE-MIT

Lines changed: 0 additions & 22 deletions
This file was deleted.

NOTICE

Lines changed: 46 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,108 +1,51 @@
1-
solid-pod-rs
2-
============
1+
NOTICE — solid-pod-rs
2+
=====================
33

4-
This crate is a Rust-native implementation of a Solid Pod server
5-
providing LDP-BASIC (Linked Data Platform), WAC (Web Access Control),
6-
NIP-98 HTTP authentication, Solid-OIDC (0.1), WebID profile
7-
documents, and Solid Notifications (0.2).
4+
Copyright (c) 2026 DreamLab-AI and contributors.
85

9-
Provenance
10-
----------
11-
12-
solid-pod-rs was extracted from the VisionClaw repository:
13-
14-
Source: https://github.com/DreamLab-AI/VisionClaw
15-
Path: crates/solid-pod-rs/
16-
Extracted: 2026-04-20
17-
18-
The extraction is a verbatim snapshot of the crate source; no
19-
VisionClaw-specific code lives in this repository. Extraction history
20-
is preserved in the `solid-pod-rs-history.bundle` distributed with the
21-
initial commit.
22-
23-
Upstream lineage
24-
----------------
25-
26-
1. The WAC evaluator, LDP container semantics, NIP-98 structural
27-
checks, and pod provisioning flows originated in the `pod-worker`
28-
crate of the community-forum-rs project (AGPL-3.0 in its original
29-
context; re-licensed here under MIT OR Apache-2.0 by the copyright
30-
holders for clean-room re-use):
31-
32-
https://github.com/DreamLab-AI/dreamlab-ai-website
33-
Path: community-forum-rs/crates/pod-worker
34-
35-
2. community-forum-rs's pod-worker was authored by the DreamLab AI
36-
team as a Rust port of their earlier TypeScript `workers/pod-api/`.
37-
38-
3. The project architecture, LDP surface area, and WAC evaluation
39-
model draw heavily on JavaScriptSolidServer ("JSS"), maintained by
40-
the JavaScriptSolidServer contributors, licensed AGPL-3.0-only:
41-
42-
https://github.com/JavaScriptSolidServer/JavaScriptSolidServer
43-
44-
JSS served as the canonical parity reference during porting. We
45-
gratefully acknowledge the JavaScriptSolidServer contributors'
46-
work in making the Solid Protocol concretely buildable in
47-
JavaScript, which made this Rust port tractable.
48-
49-
4. The Solid Protocol specifications (LDP, WAC, Solid-OIDC, Solid
50-
Notifications, WebID) are authored by the W3C Solid Community Group
51-
and associated W3C working groups. solid-pod-rs tracks:
6+
This program is free software: you can redistribute it and/or modify it
7+
under the terms of the GNU Affero General Public License as published by
8+
the Free Software Foundation, version 3.
529

53-
- Solid Protocol 0.11: https://solidproject.org/TR/protocol
54-
- WAC: https://solidproject.org/TR/wac
55-
- Solid-OIDC 0.1: https://solidproject.org/TR/oidc
56-
- Solid Notifications 0.2: https://solidproject.org/TR/notifications-protocol
57-
- W3C LDP: https://www.w3.org/TR/ldp/
10+
See LICENSE for full AGPL-3.0 terms.
5811

59-
5. NIP-98 (Nostr HTTP authentication) is specified by the Nostr
60-
community:
61-
62-
https://github.com/nostr-protocol/nips/blob/master/98.md
63-
64-
Third-party crates
65-
------------------
66-
67-
solid-pod-rs depends on community Rust crates including tokio,
68-
serde, reqwest, spargebra, tokio-tungstenite, jsonwebtoken,
69-
openidconnect, aws-sdk-s3, and notify. Each retains its own licence;
70-
see `cargo-about` or `cargo-deny` output for full attribution.
71-
72-
Licensing
73-
---------
74-
75-
Dual-licensed under MIT OR Apache-2.0, at your option. This choice
76-
matches Rust ecosystem convention.
77-
78-
See `LICENSE-MIT` and `LICENSE-APACHE` for the full texts.
79-
80-
Contributions unless explicitly marked otherwise are accepted under
81-
the same dual licence per the Apache 2.0 contribution clause.
82-
83-
Licence relationship to JavaScriptSolidServer (JSS)
84-
---------------------------------------------------
85-
86-
JavaScriptSolidServer (https://github.com/JavaScriptSolidServer/JavaScriptSolidServer)
87-
is licensed AGPL-3.0-only. This Rust crate is NOT a derivative work of JSS's
88-
JavaScript source code. Specifically:
89-
90-
- The Rust implementation originates from community-forum-rs/crates/pod-worker
91-
(written in Rust from scratch, inspired by but not copied from any Solid
92-
server implementation).
93-
- We read JSS's source as a reference-only resource to understand Solid
94-
Protocol 0.11 + WAC + LDP + Solid-OIDC + Solid Notifications behaviour.
95-
- No JSS JavaScript was translated, transliterated, or machine-ported into
96-
this crate.
97-
- The WAC inheritance test corpus (`tests/wac_inheritance.rs`) was
98-
independently authored to exercise equivalent edge cases documented by
99-
the Solid Protocol. Where test SCENARIOS resemble JSS's own tests,
100-
that is because the Solid Protocol admits a finite number of edge cases,
101-
not because test code was copied.
102-
- The JSS-interop fixture tests (`tests/interop_jss.rs`) test against the
103-
Solid Protocol via independently-authored request/response fixtures;
104-
they do not embed JSS code.
12+
Provenance
13+
----------
10514

106-
On that basis this crate is licensed MIT OR Apache-2.0 dual. Consumers who
107-
wish to bundle JSS and this crate together should verify their own
108-
compliance with AGPL-3.0's network-service clause for JSS.
15+
solid-pod-rs inherits its licence from the JavaScriptSolidServer (JSS)
16+
ecosystem covenant. JSS is an AGPL-3.0-only project maintained by the
17+
JavaScriptSolidServer organisation at
18+
https://github.com/JavaScriptSolidServer/JavaScriptSolidServer.
19+
20+
The Rust implementation lineage:
21+
22+
1. JSS (JavaScript, AGPL-3.0-only) — reference implementation + ecosystem
23+
covenant origin.
24+
2. community-forum-rs pod-worker (Rust, AGPL-3.0) — Cloudflare-Worker-
25+
specific Rust implementation; original source of the LDP + WAC + NIP-98
26+
modules that seeded this crate.
27+
3. VisionClaw crates/solid-pod-rs (Rust, AGPL-3.0) — extracted + extended
28+
to a portable crate with FS/Memory/S3/R2 backends, Solid-OIDC, full
29+
Solid Notifications, and 67/67 JSS parity.
30+
4. dreamlab-ai/solid-pod-rs (Rust, AGPL-3.0) — this standalone repo.
31+
32+
We inherit AGPL-3.0 deliberately to preserve the network-service copyleft
33+
protection JSS established. Downstream consumers operating solid-pod-rs
34+
as a network-accessible service must make their corresponding source code
35+
available to their users per AGPL §13.
36+
37+
Solid Protocol
38+
--------------
39+
40+
Implementation follows the W3C Solid Protocol 0.11. Protocol specifications
41+
themselves are not under any licence claim from this project.
42+
43+
Attribution
44+
-----------
45+
46+
Our gratitude to:
47+
- the JavaScriptSolidServer contributors for the reference implementation
48+
and the AGPL-3.0 covenant we inherit
49+
- the community-forum-rs contributors for the Rust-native pod-worker lineage
50+
- the W3C Solid Protocol editors for the specifications
51+
- the Rust ecosystem crates this work depends on (see Cargo.toml)

README.md

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
> Framework-agnostic library crate. Deny-by-default WAC. First-class Nostr auth.
55
> Zero Node.js runtime dependency.
66
7-
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/License-MIT%20OR%20Apache--2.0-blue.svg)](#licence)
7+
[![License: AGPL-3.0-only](https://img.shields.io/badge/License-AGPL--3.0--only-blue.svg)](#licence)
88
[![crates.io](https://img.shields.io/crates/v/solid-pod-rs.svg)](https://crates.io/crates/solid-pod-rs)
99
[![docs.rs](https://img.shields.io/docsrs/solid-pod-rs)](https://docs.rs/solid-pod-rs)
1010
[![CI](https://github.com/dreamlab-ai/solid-pod-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/dreamlab-ai/solid-pod-rs/actions/workflows/ci.yml)
@@ -38,8 +38,8 @@ The Rust implementation originates from
3838
scratch); JSS is read as a reference-only resource for Solid
3939
Protocol behaviour. See [`NOTICE`](./NOTICE) §"Licence relationship
4040
to JavaScriptSolidServer (JSS)" for the full independence claims
41-
and the rationale for MIT/Apache-2.0 dual licensing despite JSS
42-
being AGPL.
41+
and the rationale for AGPL-3.0-only licensing inherited from the
42+
JSS ecosystem covenant.
4343

4444
Upgrade from `alpha.1``alpha.2` is safe with zero API or
4545
behavioural deltas.
@@ -90,8 +90,8 @@ all of them.
9090
(path: `community-forum-rs/crates/pod-worker`). Community-forum-
9191
specific code (forum thread integration, Cloudflare Workers
9292
bindings, R2 specifics, CF-KV) was factored out during the
93-
VisionClaw port. The licensed work is re-released under
94-
MIT OR Apache-2.0 by the copyright holders.
93+
VisionClaw port. The lineage is AGPL-3.0 throughout and the
94+
licence is preserved here unchanged.
9595

9696
3. **Design follows JavaScriptSolidServer (JSS)** — the
9797
reference JavaScript implementation at
@@ -115,10 +115,10 @@ all of them.
115115
overall stewardship of the Solid project. LDP is a W3C
116116
Recommendation. NIP-98 is a specification of the Nostr community.
117117

118-
5. **Licence**MIT OR Apache-2.0 dual-licence per Rust ecosystem
119-
convention. This is compatible with (and deliberately not more
120-
restrictive than) CSS's MIT licence; it is also compatible with
121-
downstream AGPL-3.0 consumers that re-license.
118+
5. **Licence**AGPL-3.0-only, inherited from the JavaScriptSolidServer
119+
ecosystem covenant. solid-pod-rs preserves the network-service
120+
copyleft protection JSS established; see §"Licence" below for the
121+
operational consequences.
122122

123123
See [`NOTICE`](./NOTICE) for the complete provenance record.
124124

@@ -747,29 +747,28 @@ General Solid project:
747747

748748
## Licence
749749

750-
Dual-licensed under either of:
750+
**AGPL-3.0-only** — inherited from the JavaScriptSolidServer ecosystem
751+
covenant.
751752

752-
- MIT licence ([`LICENSE-MIT`](./LICENSE-MIT) or
753-
<https://opensource.org/licenses/MIT>)
754-
- Apache Licence, Version 2.0 ([`LICENSE-APACHE`](./LICENSE-APACHE)
755-
or <https://www.apache.org/licenses/LICENSE-2.0>)
753+
This means: if you operate solid-pod-rs as a network-accessible service,
754+
AGPL §13 requires you to make the corresponding source code available to
755+
your users under AGPL-3.0 or later. See [`LICENSE`](./LICENSE) and
756+
[`NOTICE`](./NOTICE) for full terms and provenance.
756757

757-
at your option. This matches Rust ecosystem convention.
758+
If AGPL-3.0 is incompatible with your project's licence strategy, consider:
759+
- Contributing upstream rather than hard-forking
760+
- Using the crate in a sidecar architecture where AGPL obligations are
761+
contained to the sidecar process
762+
- Running JSS itself (same licence; different language)
758763

759-
JSS (the JavaScriptSolidServer reference) is licensed AGPL-3.0-only.
760-
solid-pod-rs is NOT a derivative work of JSS's JavaScript source, so
761-
the MIT/Apache-2.0 dual licensing is deliberate and consistent. See
762-
[`NOTICE`](./NOTICE) §"Licence relationship to JavaScriptSolidServer
763-
(JSS)" for the full rationale. Consumers bundling both solid-pod-rs
764-
and JSS together must verify their own compliance with AGPL-3.0's
765-
network-service clause for JSS.
764+
We welcome issues + PRs asking about specific compatibility scenarios.
766765

767766
Unless you explicitly state otherwise, any contribution intentionally
768-
submitted for inclusion in the work by you, as defined in the
769-
Apache-2.0 licence, shall be dual licensed as above, without any
770-
additional terms or conditions.
767+
submitted for inclusion in the work by you shall be licensed under the
768+
same AGPL-3.0-only terms, without any additional terms or conditions.
771769

772-
See [`NOTICE`](./NOTICE) for attribution details.
770+
See [`NOTICE`](./NOTICE) for attribution details and the full provenance
771+
chain.
773772

774773
---
775774

0 commit comments

Comments
 (0)