Identities for entities did.bot
agent llm did
didbot plan license.md
5.0 kB
Markdown
at commit 18ba4fe0


id: license title: The project has no license, and three different things need one status: open crates: [] dependsOn: [] exitCriterion: > A LICENSE file exists at the repository root, the lexicons state their own license independent of the code's, and every vendored corpus's license has been checked for compatibility with whatever is chosen. #

license #

The decision has already been made by metadata, and the file it names does not exist. Cargo.toml declares license = "MIT" at the workspace root and every crate inherits it through license.workspace = true — so the code ships under a stated licence today. There is no LICENSE file anywhere in the repository. That is the gap this epic's exit criterion is really about: not choosing a licence, which has effectively happened, but writing it down where a reader looks for it, and checking it against the vendored licences below.

There is no LICENSE file anywhere in this repository. That is a decision by omission — under most jurisdictions' default copyright rules, "no license" means no rights are granted to reuse the code at all, which is probably not what a project inviting federation intends, and is certainly not something a stranger reading docs/deployment.md or building against bot.did.* can safely assume either way.

This epic does not pick a license. It lays out what the decision covers, because "the project's license" is actually three separable decisions with different audiences and different consequences, and picking one without naming the other two leaves the other two undecided by default rather than by choice.

The code #

The Rust workspace under crates/, docs/, and everything else that is this project's own implementation. The choice here is the ordinary open-source one — permissive versus copyleft, and whether contributions need a CLA — and it mostly affects other implementers who might build on didbot itself rather than build a different server that talks the same protocol.

The lexicons #

bot.did.* is this project's schema contribution, and pds-xrpc already flags the domain as unregistered and the namespace as "a placeholder." A schema is different from code in one way that matters here: others may need to implement against it. A relay, an indexer, or a competing server implementation that wants to read a bot.did.registration record needs to know the record's shape, and a restrictive code license sitting over the lexicon JSON could be read as restricting implementing the schema, not just reusing this project's Rust. Bluesky's own app.bsky.* and com.atproto.* lexicons ship under terms chosen specifically to keep that door open.

The vendored interop corpus #

vendor/atproto-lexicons/ and vendor/atproto-interop-tests/ are copied into this tree — vendor/atproto-lexicons/, per pds-xrpc's Done list, "copied unedited from the atproto repository" and used as the source of truth the conformance harness checks responses against. Both directories carry their own license files already: vendor/atproto-lexicons/ ships LICENSE.txt, LICENSE-APACHE.txt and LICENSE-MIT.txt; vendor/atproto-interop-tests/ ships LICENSE-CC0.

Done #

Nothing closed yet.