Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions .github/workflows/cla-assistant.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: "CLA Assistant"

# CLA Assistant Lite — a GitHub Action that requires pull-request authors
# to acknowledge the AetherSDR Contributor License Agreement (CLA.md)
# before their PR can be merged. Acceptance is recorded by the
# contributor posting a specific comment on their PR; the action
# stores their signature in a separate signatures file on a dedicated
# branch, so consent is auditable and persistent.
#
# Choice of implementation: contributor-assertion-action is a maintained
# fork that keeps the original cla-assistant flow without requiring an
# external SaaS app to be installed on the repository (no permissions
# beyond the GITHUB_TOKEN this workflow already has). See:
# https://github.com/contributor-assistant/github-action

on:
issue_comment:
types: [created]
pull_request_target:
types: [opened, closed, synchronize]

# Required permissions are the minimum needed for the action to
# (a) read PR metadata, (b) post a comment requesting signature,
# (c) commit the signature record to the signatures branch.
permissions:
actions: write
contents: write
pull-requests: write
statuses: write

jobs:
CLAAssistant:
runs-on: ubuntu-latest
steps:
- name: "CLA Assistant"
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
uses: contributor-assistant/github-action@v2.6.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# Signatures stored on a dedicated branch of THIS repository
# (not a remote signatures repo). Storing in-repo keeps the
# action working with the workflow's built-in GITHUB_TOKEN —
# a remote storage repo would require a separately-issued
# PERSONAL_ACCESS_TOKEN with cross-repo write access.
path-to-signatures: 'signatures/cla-signatures.json'
path-to-document: 'https://github.com/aethersdr/AetherSDR/blob/main/CLA.md'
branch: 'cla-signatures'
allowlist: dependabot[bot],aethersdr-agent[bot],github-actions[bot]
create-file-commit-message: 'chore(cla): create signature file for CLA Assistant'
signed-commit-message: 'chore(cla): $contributorName has signed the CLA on PR #$pullRequestNo'
custom-notsigned-prcomment: |
Thank you for your pull request — and welcome to AetherSDR.

Before this PR can be merged, our [Contributor License Agreement (CLA)](https://github.com/aethersdr/AetherSDR/blob/main/CLA.md) must be accepted by all contributors who have authored commits on this PR.

**To sign the CLA**, please post the following comment on this PR:

> I have read the CLA Document and I hereby sign the CLA

After signing, the CLA bot will record your acceptance on a separate signatures branch and unblock this PR. If anything in the CLA is unclear, please ask in the PR thread or open a discussion under "Project Governance" — we're happy to clarify before you sign.

*AetherSDR moved from GPL v3 to AGPL v3 in 2026. The CLA is part of that transition; it gives the project maintainer the ability to relicense the project under any OSI-approved open-source license in the future without contacting every past contributor individually. See the [LICENSE](https://github.com/aethersdr/AetherSDR/blob/main/LICENSE) file for context.*
custom-pr-sign-comment: 'I have read the CLA Document and I hereby sign the CLA'
custom-allsigned-prcomment: 'All contributors have signed the CLA — this PR is now eligible for review and merge.'
lock-pullrequest-aftermerge: false
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,35 @@ Format follows [Keep a Changelog](https://keepachangelog.com/).
> **Versioning:** Starting with **v26.5.1**, AetherSDR moves to **CalVer**
> (`YY.M.patch`). Earlier tags used semver through v0.9.8.

## [Unreleased]

### License — moved to AGPL v3 (from GPL v3)

AetherSDR's license has changed from **GPL v3** to **AGPL v3** to close
a gap in which AetherSDR could be hosted as a paid remote-SDR-as-a-service
offering without sharing modifications, undermining the commercial-use
protections that FlexRadio Systems requires under their own SmartSDR EULA
(revised January 19, 2026).

The mechanism uses GPL v3 section 13 — existing GPL v3 contributions
retain their original license; new contributions are AGPL v3 (via the
Contributor License Agreement, `CLA.md`); the combined work is governed
by AGPL v3's network-use clause. Personal, non-commercial, community, and
private use are unaffected.

A small new module (`src/core/ProjectLicenseNotice.cpp/.h`) anchors the
AGPL v3 portion of the combined work and provides the license summary
shown in the About dialog and startup log.

A **Contributor License Agreement** (`CLA.md`) is now required for new
PRs, enforced by the **CLA Assistant Lite** GitHub Action. The CLA grants
the project maintainer the right to relicense the project under any
OSI-approved open-source license in the future, eliminating the need to
contact every past contributor individually.

For full reasoning and history, see `LICENSE`, `LICENSE-AGPL-v3.txt`,
`LICENSE-GPL-v3.txt`, and `CLA.md`.

## [v26.6.1.1] — 2026-06-02

### Hotfix: macOS DMG release build + two GUI fixes
Expand Down
158 changes: 158 additions & 0 deletions CLA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
# AetherSDR Individual Contributor License Agreement (CLA) v1.0

Thank you for your interest in contributing to AetherSDR (the "Project").
This Contributor License Agreement ("Agreement") documents the rights
granted by contributors to the Project. This Agreement is between the
contributor ("You") and Jeremy Fielder (KK7GWY) ("the Project Maintainer")
on behalf of the Project.

This Agreement is adapted from the Apache Software Foundation Individual
Contributor License Agreement (v2.0) with project-specific modifications,
most importantly the right to relicense under different open-source
licenses in the future.

By submitting a Contribution to the Project (by opening a pull request,
patch submission, or any other means), you agree to the terms below.

## 1. Definitions

- **"You"** (or **"Your"**) means the copyright owner or legal entity
authorized by the copyright owner that is making this Agreement. For
legal entities, the entity making a Contribution and all other entities
that control, are controlled by, or are under common control with that
entity are considered to be a single Contributor. For the purposes of
this definition, "control" means (i) the power, direct or indirect, to
cause the direction or management of such entity, whether by contract
or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
- **"Contribution"** means any original work of authorship, including any
modifications or additions to an existing work, that is intentionally
submitted by You to the Project for inclusion in, or documentation of,
any of the products owned or managed by the Project. For the purposes
of this definition, "submitted" means any form of electronic, verbal,
or written communication sent to the Project or its representatives,
including but not limited to communication on electronic mailing
lists, source code control systems, and issue tracking systems that
are managed by, or on behalf of, the Project for the purpose of
discussing and improving the Project, but excluding communication that
is conspicuously marked or otherwise designated in writing by You as
"Not a Contribution."

## 2. Grant of Copyright License

Subject to the terms and conditions of this Agreement, You hereby grant
to the Project Maintainer and to recipients of software distributed by
the Project a perpetual, worldwide, non-exclusive, no-charge,
royalty-free, irrevocable copyright license to reproduce, prepare
derivative works of, publicly display, publicly perform, sublicense, and
distribute Your Contributions and such derivative works.

## 3. Grant of Patent License

Subject to the terms and conditions of this Agreement, You hereby grant
to the Project Maintainer and to recipients of software distributed by
the Project a perpetual, worldwide, non-exclusive, no-charge,
royalty-free, irrevocable (except as stated in this section) patent
license to make, have made, use, offer to sell, sell, import, and
otherwise transfer the Project, where such license applies only to
those patent claims licensable by You that are necessarily infringed by
Your Contribution(s) alone or by combination of Your Contribution(s)
with the Project to which such Contribution(s) was submitted. If any
entity institutes patent litigation against You or any other entity
(including a cross-claim or counterclaim in a lawsuit) alleging that
Your Contribution, or the Project to which You have contributed,
constitutes direct or contributory patent infringement, then any patent
licenses granted to that entity under this Agreement for that
Contribution or Project shall terminate as of the date such litigation
is filed.

## 4. Right to Relicense

You acknowledge that the Project Maintainer may, in the Project
Maintainer's sole discretion and at any time in the future, relicense
the Project (in whole or in part) under any OSI-approved open-source
software license. You grant to the Project Maintainer the right to
relicense Your Contributions under any such OSI-approved open-source
license without further consent or notice from You.

This relicensing right is limited to OSI-approved open-source licenses
and does not authorize the Project Maintainer to release the Project,
or Your Contributions, under a proprietary or non-open-source license.

## 5. Representations

You represent that:

1. You are legally entitled to grant the licenses granted by this
Agreement. If Your employer(s) has rights to intellectual property
that You create that includes Your Contributions, You represent that
You have received permission to make Contributions on behalf of that
employer, that Your employer has waived such rights for Your
Contributions to the Project, or that Your employer has executed a
separate Corporate CLA with the Project.

2. Each of Your Contributions is Your original creation (see Section 7
for submissions on behalf of others). You represent that Your
Contribution submissions include complete details of any third-party
license or other restriction (including, but not limited to, related
patents and trademarks) of which You are personally aware and which
are associated with any part of Your Contributions.

3. If any of Your Contributions includes or is based on output produced
by a generative AI tool (including but not limited to Claude, ChatGPT,
Codex, Copilot, Gemini, or similar), You represent that You have
reviewed and accepted that output as Your own work, that You have the
right to contribute it under the terms of this Agreement, and that
doing so does not violate the terms of service or licensing terms of
the tool that produced the output. The Project explicitly welcomes
AI-assisted contributions but treats the human contributor — not the
AI tool — as the author of record for the purposes of this Agreement.

## 6. Support

You are not expected to provide support for Your Contributions, except
to the extent You desire to provide support. You may provide support
for free, for a fee, or not at all. Unless required by applicable law or
agreed to in writing, You provide Your Contributions on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions of
TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR
PURPOSE.

## 7. Submissions on Behalf of Others

Should You wish to submit work that is not Your original creation, You
may submit it to the Project separately from any Contribution,
identifying the complete details of its source and of any license or
other restriction (including, but not limited to, related patents,
trademarks, and license agreements) of which You are personally aware,
and conspicuously marking the work as "Submitted on behalf of a
third-party: [named here]".

## 8. Notification of Changes

You agree to notify the Project Maintainer of any facts or circumstances
of which You become aware that would make these representations
inaccurate in any respect.

## 9. Governing Law

This Agreement is governed by the laws of the State of Idaho, United
States of America, without regard to its conflict of law principles.

## 10. Effective Date

This Agreement is effective as of the date You first submit a
Contribution to the Project after the publication of this Agreement.

────────────────────────────────────────────────────────────────────────────

**To accept this Agreement:** comment on your first pull request with
the phrase "I have read the CLA Document and I hereby sign the CLA"
(or a substantively equivalent statement). The CLA Assistant Lite
GitHub Action will record your acceptance and gate the Project's PR
merge process until your acceptance is recorded.

**Questions** about this Agreement should be raised in a GitHub
discussion under the "Project Governance" category, or directly with
the Project Maintainer.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,8 @@ endif()

# Sources
set(CORE_SOURCES
# AGPL v3 — combined-work anchor for GPL v3 §13 (see LICENSE).
src/core/ProjectLicenseNotice.cpp
src/core/AppSettings.cpp
src/core/SettingsHelpers.cpp
src/core/ThemeManager.cpp
Expand Down
18 changes: 13 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,20 @@ that matches our conventions.
Persistence). Your PR's commit message will cite the principle it
honors (e.g. `Principle V.` for nested-JSON persistence or
`Principle X.` for verified-base patch generation).
3. **One issue per PR.** Keep changes focused and reviewable.
4. **Follow the coding conventions** below.
5. **Test your changes** against a real FlexRadio if possible.
6. **Sign your commits** (required by branch protection — SSH or GPG;
3. **Accept the [Contributor License Agreement](CLA.md).** AetherSDR
moved from GPL v3 to AGPL v3 in 2026. The CLA grants the project
maintainer the right to relicense the project under any OSI-approved
open-source license in the future without contacting every past
contributor individually. The CLA Assistant Lite bot will comment
on your first PR with the signing instructions; reply with the
single-line acknowledgement and the bot records your signature.
You sign once per GitHub account — not once per PR.
4. **One issue per PR.** Keep changes focused and reviewable.
5. **Follow the coding conventions** below.
6. **Test your changes** against a real FlexRadio if possible.
7. **Sign your commits** (required by branch protection — SSH or GPG;
see [Commit Signing](#commit-signing) below).
7. **Open a pull request** against `main` with a clear description.
8. **Open a pull request** against `main` with a clear description.

---

Expand Down
Loading
Loading