ADR 0058: Apache 2.0, and a public repository on GitHub
- Status: accepted; implemented 2026-10-23. Amends 42 (releases move to GitHub).
- Date: 2026-10-23
Context
nodwyn was built in a private repository on a private Gitea, with CI on a
self-hosted runner and releases and the books reachable only from there.
docs/maintenance-review.md left the licence as "a separate release
decision". Without a licence, published code is readable and not usable: nobody
may copy, build on or redistribute it. The tree and its history also named
machines and paths that mean nothing to anyone else, and carried a 13 MB demo
binary and an old WebAssembly build that no longer have a use.
Decision
- The licence is Apache 2.0.
LICENSEis the standard text andNOTICEnames the copyright holder and the data and code that come from others. Apache 2.0 matches Brote's spirit (a permissive licence), carries an explicit patent grant, which suits a tool whose users hand it credentials, and lets people use the code at work without a lawyer. A contribution is licensed the same way by section 5 of the licence, so there is no contributor agreement. Source files carry no per-file header: one licence covers the repository, and 700 commits of headers would add noise nobody reads. A header goes in a file that is copied somewhere else. - GitHub is the home.
github.com/fclaude/nodwynis the module path ingo.mod, sogo installresolves there. CI (ci.yml) runs on hosted runners for every push tomainand every pull request:make accept, the release builder's tests,govulncheck, the four portable builds and the browser checks. Releases arerelease.yml(amends 42). The Gitea workflows and the package dispatch are removed. - The history is rewritten once, before it is published. In a copy of the
repository, not in place: private hostnames, personal home paths, the
names of the owner's machines and the CI runner's label are replaced everywhere,
in files and in commit messages; the demo binary and the WebAssembly builds
are dropped; only
mainis kept, with no tags, so the first publicv0.1.0is cut byrelease.ymlfrom the cleaned history; and every commit is signed again with the maintainer's SSH key, because rewriting invalidates the signatures the PDF cleanup (ADR 42) gave them. The new signatures attest to the rewritten commits, not to the originals. Commit hashes cited in the docs name the rewritten commits. Authors and dates are untouched. - The README is for a newcomer. It says what nodwyn is, how to install
it and how to start. The long reference that used to open it is
docs/reference.md, and the package map is in the manual. - Outsiders get the usual files:
CONTRIBUTING.md(AGENTS.md's rules, said to a contributor),SECURITY.md(private reports, and what the project does and does not promise about secrets),CODE_OF_CONDUCT.md(Contributor Covenant 2.1) and issue and pull request templates. - The model catalogue carries models.dev's notice.
models.jsonis a snapshot of models.dev's data (MIT). Its licence text is ininternal/frontend/web/licenses/models-dev.txt, andnodwyn licensesprints it.
Consequences
Anyone can build, use and fork nodwyn, and can verify that a release is the source it says. The old object IDs are gone: the private repository keeps the originals, and nothing public refers to them. Release builds are now checked on a runner nobody here controls, which finds what the self-hosted one hid, and it costs a first run's worth of fixing. Books build from LaTeX on Ubuntu's TeX packages, not Alpine's.
Not built
- Per-file SPDX or licence headers (decision 1).
- Signed releases. Checksums detect damage and not a malicious publisher. Build provenance attestation is the next step if people want it.
- A Windows build, a package for any distribution and a Homebrew tap.
- The workflows have not run on a hosted runner at the time of writing: the
first run of
ci.ymland ofrelease.ymlis their test.