License Compliance & Management¶
Version: 1.0.0
Last Updated: 2026-01-14
Applies To: All Structum packages and contributions
Overview¶
Structum is licensed under the Apache License 2.0. This document explains our licensing strategy, contributor policies, and compliance procedures.
1. Project License¶
Apache License 2.0¶
Key Permissions:
✅ Commercial use
✅ Modification
✅ Distribution
✅ Patent grant
Key Conditions:
📄 License and copyright notice
📄 State changes
📄 Provide attribution (NOTICE file)
📄 Same license for derivative works
Full Text: See LICENSE file in repository root.
2. SPDX Headers & Copyright Policy¶
Standard Header Template¶
All source files (.py, .toml, .yaml, etc.) MUST include:
# SPDX-FileCopyrightText: 2026 Your Name <your.email@example.com>
# SPDX-License-Identifier: Apache-2.0
Copyright Policy¶
Multi-Contributor Model: Each contributor retains copyright of their work.
New Files¶
When creating new files, add your own copyright:
# SPDX-FileCopyrightText: 2026 Mario Rossi <mario@example.com>
# SPDX-License-Identifier: Apache-2.0
Modifying Existing Files¶
Small changes (< 10 lines): Keep existing headers unchanged
Substantial contributions (refactors, new features): Add your copyright line
# SPDX-FileCopyrightText: 2026 PythonWoods Team
# SPDX-FileCopyrightText: 2026 Mario Rossi <mario@example.com>
# SPDX-License-Identifier: Apache-2.0
Why Multi-Contributor Model?¶
Transparency: Clear attribution in every file
No Barriers: No CLA required - easier to contribute
Standard Practice: Common for Apache-2.0 projects
REUSE Compliance: Machine-readable copyright information
3. Contributor Responsibilities¶
By Contributing, You Certify¶
Originality: The contribution is your original work
License Grant: You grant it under Apache-2.0
Patent Grant: Apache-2.0 includes patent grant automatically
Legal Authority: You have the right to submit this contribution
No CLA Required¶
Structum does NOT require a Contributor License Agreement (CLA).
You retain copyright of your contributions
Your work is distributed under Apache-2.0 (same as the project)
Standard for open-source projects
4. Third-Party Dependencies¶
Allowed Licenses¶
Structum (Apache-2.0) can use dependencies under these licenses:
License |
Compatible? |
Notes |
|---|---|---|
MIT |
✅ Yes |
Highly permissive |
BSD (2/3-Clause) |
✅ Yes |
Highly permissive |
Apache-2.0 |
✅ Yes |
Same license |
LGPL-3.0 |
✅ Yes |
Only for libraries (not forks) |
ISC |
✅ Yes |
Similar to MIT |
GPL-2.0/3.0 |
❌ No |
Copyleft - would infect Structum |
Proprietary |
❌ No |
Not open-source |
Adding New Dependencies¶
Checklist:
[ ] Verify license is compatible (see table above)
[ ] Add to
NOTICEfile with:Package name & URL
Copyright holder
License type
[ ] Add attribution to relevant package README
[ ] Run
structum license deps-checkto verify
5. REUSE Compliance¶
What is REUSE?¶
REUSE is a specification for declaring copyright and licensing in a machine-readable way.
Structum’s REUSE Strategy¶
Components:
SPDX Headers: In all source files
.reuse/dep5: Bulk license declarations for non-code filesNOTICE: Human-readable attributionLICENSE: Full license text
Verification¶
# Check compliance
structum license check
# Or manually
uv run reuse lint
Goal: 100% REUSE compliance (all files have clear licensing)
6. File-Specific Policies¶
Python Source Files¶
# SPDX-FileCopyrightText: 2026 PythonWoods Team
# SPDX-License-Identifier: Apache-2.0
\"\"\"Module docstring here.\"\"\"
Configuration Files (TOML/YAML)¶
# SPDX-FileCopyrightText: 2026 PythonWoods Team
# SPDX-License-Identifier: Apache-2.0
[project]
name = "structum"
Markdown Documentation¶
No SPDX header needed - covered by .reuse/dep5:
Files: docs/* *.md
Copyright: 2026 PythonWoods Team
License: Apache-2.0
Auto-Generated Files¶
Covered by .reuse/dep5:
Files: **/__pycache__/* dist/* build/*
Copyright: 2026 PythonWoods Team
License: Apache-2.0
7. CLI Tools for License Management¶
Check Compliance¶
structum license check
Runs reuse lint and reports any non-compliant files.
Add SPDX Headers¶
# Single file
structum license add-header path/to/file.py
# All missing files
structum license add-headers
Automatically adds standard SPDX header.
Audit Dependencies¶
structum license deps-check
Scans all dependencies and reports:
License types
Compatibility with Apache-2.0
Missing licenses
8. Contribution Workflow¶
For Contributors¶
Write code with proper SPDX headers (your copyright)
Run checks:
structum check && structum license checkSubmit PR
CI verifies REUSE compliance
Merge after code review and approval
For Maintainers¶
Check
structum license checkpassesVerify SPDX headers are correct
Review no proprietary dependencies added
Merge if compliant and code quality is good
9. Recognition Policy¶
How Contributors Are Recognized¶
Not via SPDX headers ❌
Via these methods ✅:
CONTRIBUTORS.md: Listed alphabeticallyGit History: Permanent record
Release Notes: Major contributions highlighted
About Page (future): Community page on website
Example CONTRIBUTORS.md Entry¶
## Contributors
- **John Doe** - Authentication system refactor (#123)
- **Jane Smith** - Database plugin performance improvements (#456)
10. Frequently Asked Questions¶
Q: Should I put my name in the SPDX header?¶
A: YES! For new files, use your own copyright. For substantial edits to existing files, add your copyright line.
Q: Can I use my contribution elsewhere?¶
A: Yes! You retain full copyright. Apache-2.0 is permissive and non-exclusive.
Q: What if I find a file without SPDX header?¶
A: Run structum license add-header <file> or report it as an issue.
Q: What counts as a “substantial contribution”?¶
A: Refactors, new features, or changes > 10 lines. Bug fixes < 10 lines don’t require adding your copyright.
Q: What about files I only slightly modified?¶
A: Keep the original SPDX headers unchanged:
# SPDX-FileCopyrightText: 2026 PythonWoods Team # ← Keep this
# SPDX-License-Identifier: Apache-2.0
11. Enforcement¶
Pre-Commit Checks¶
CI pipeline runs:
structum license check
Result: PR fails if any file lacks proper licensing.
Remediation¶
If non-compliant:
Run
structum license add-headersCommit fixes
Re-run CI
12. Updates to This Policy¶
Amendment Process¶
See: docs/governance/amendment_policy.md
Summary:
Policy changes require community discussion
Major changes need governance approval
Always maintain Apache-2.0 compatibility
13. Legal Disclaimer¶
[!NOTE] This document provides guidance, not legal advice. For legal questions, consult a qualified attorney.
References¶
Contact¶
License Questions: legal@pythonwoods.com
Technical Support: dev@pythonwoods.com