aboutsummaryrefslogtreecommitdiff
path: root/docs/POLICY.txt
blob: f9e361445df5cc6ca924f57524748c6601b37334 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Copyright (C) 2026 Doan Luu Duc Tai <doan@luuduct.ai>

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/>.

PROJECT CONVENTIONS

    License: GNU Affero General Public License, version 3 or later.
    SPDX identifier: AGPL-3.0-or-later.
    Copyright holder: Doan Luu Duc Tai <doan@luuduct.ai>, 2026.

    Every nontrivial first-party source, configuration, template, and prose
    file carries the AGPL copyright and permission header. LICENSE is the
    unmodified license text. Binary public keys and empty WKD policy files
    retain their protocol format. Generated Cargo.lock retains Cargo's own
    metadata as well as the project notice.

    Do not add explanatory source comments. Express intent through structure
    and names. Legal headers are the required exception. Use .txt for prose
    documentation. The generated HTML license page is an explicit exception.
    Rust documentation attributes provide crate metadata without comments.

    Keep configured secrets only in the root .env. Never commit .env or var/.
    .env.example lists required keys with placeholders. Public hostnames,
    public GPG keys, paths, configuration, and source belong in Git.
    TLS account/certificate private keys, databases, and other generated
    private state are persistent data in var/data, not .env configuration.
    The GPG secret key and revocation certificate remain outside this project.

STRICTNESS

    Preserve the requested Rust and Clippy deny groups, including pedantic
    and nursery. The one additional exception is redundant_pub_crate: its
    advice to make internal binary items public conflicts with unreachable_pub,
    which remains denied. Internal interfaces remain explicitly crate-private.
    No unsafe code, unwrap, expect, todo, debug output, arithmetic shortcuts,
    or broad warning suppression is introduced.

    cargo-deny rejects duplicate crate versions, wildcard requirements, unknown
    registries, unknown Git sources, and yanked versions. There are no duplicate
    version skip exceptions. Its AGPL allowance is scoped to this package.
    The dependency allowlist retains the requested permissive licenses and
    Zlib; an unused allowance may produce an informational audit warning.

    Human license names follow https://www.gnu.org/licenses/license-list.html.
    In particular, display Expat License for SPDX MIT. Do not alter original
    copyright notices, legal texts, crate metadata, or machine SPDX identifiers.
    cargo-about covers Rust dependencies. Supporting container applications
    and their operating-system packages carry additional upstream licenses.

PORTABILITY

    All first-party project files and state live below stack/. Standard host
    integration consists of packages, subordinate UID/GID allocations, one
    low-port sysctl setting, user linger, and a systemd user-service link.
    Host SSH keys, firewall policy, accounts, and disks are host administration,
    not application export contents.

    Releases currently contain a static x86_64 Linux command and native
    linux/amd64 container images. They are portable across compatible x86_64
    Linux machines. An ARM machine needs a native release build; the command
    rejects mismatched production images. Development mode may fetch/build
    native images on an architecture mismatch. Container source and Rust
    source are public so new targets can be added without restoring an OS.