Skip to content
Merged
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
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# PortPane by ShackDesk
# Project : https://github.com/Computer-Tsu/shackdesk-portpane
# Author : Mark McDow (N4TEK) — My Computer Guru LLC
# License : GPL v3 / Commercial (see LICENSE-GPL.md, LICENSE-COMMERCIAL.md)
# License : MIT + official-build commercial terms (see LICENSE-MIT.md, LICENSE-COMMERCIAL.md)
#
# File : .github/dependabot.yml
# Purpose : Configures GitHub Dependabot to automatically open pull requests
Expand Down
11 changes: 9 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
# PortPane by ShackDesk
# Project : https://github.com/Computer-Tsu/shackdesk-portpane
# Author : Mark McDow (N4TEK) — My Computer Guru LLC
# License : GPL v3 / Commercial (see LICENSE-GPL.md, LICENSE-COMMERCIAL.md)
# License : MIT source code + official builds/services
# (see LICENSE-MIT.md, OFFICIAL_BUILDS_AND_SERVICES.md)
#
# Workflow : Build · Test · Publish · Release
# Purpose : Main CI/CD pipeline. Builds and tests on every push and PR to main.
Expand Down Expand Up @@ -330,7 +331,11 @@ jobs:
$pattern = "(?s)## \[$version\].*?(?=## \[|\z)"
$match = [regex]::Match($content, $pattern)
$notes = if ($match.Success) { $match.Value.Trim() } else { "See CHANGELOG.md for details." }
$notes | Out-File -FilePath ./release_notes.md -Encoding utf8
@"
$notes

Code signing policy: https://shackdesk.com/portpane/code-signing-policy/
"@ | Out-File -FilePath ./release_notes.md -Encoding utf8
echo "notes_file=./release_notes.md" >> $env:GITHUB_OUTPUT

- name: Rename artifacts with version
Expand Down Expand Up @@ -438,6 +443,8 @@ jobs:

This build has a 14-day expiry. Always download the current version from this page.
Not recommended for general use — for testing purposes only.

Code signing policy: https://shackdesk.com/portpane/code-signing-policy/
prerelease: true
files: |
./release/PortPane-*.exe
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
# PortPane by ShackDesk
# Project : https://github.com/Computer-Tsu/shackdesk-portpane
# Author : Mark McDow (N4TEK) — My Computer Guru LLC
# License : GPL v3 / Commercial (see LICENSE-GPL.md, LICENSE-COMMERCIAL.md)
# License : MIT source code + official builds/services
# (see LICENSE-MIT.md, OFFICIAL_BUILDS_AND_SERVICES.md)
#
# Workflow : CodeQL Security Analysis
# Purpose : Scans C# source code for security vulnerabilities using GitHub's
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
# PortPane by ShackDesk
# Project : https://github.com/Computer-Tsu/shackdesk-portpane
# Author : Mark McDow (N4TEK) — My Computer Guru LLC
# License : GPL v3 / Commercial (see LICENSE-GPL.md, LICENSE-COMMERCIAL.md)
# License : MIT source code + official builds/services
# (see LICENSE-MIT.md, OFFICIAL_BUILDS_AND_SERVICES.md)
#
# Workflow : Dependency Review
# Purpose : Checks NuGet package changes introduced in a pull request against
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/format-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
# PortPane by ShackDesk
# Project : https://github.com/Computer-Tsu/shackdesk-portpane
# Author : Mark McDow (N4TEK) — My Computer Guru LLC
# License : GPL v3 / Commercial (see LICENSE-GPL.md, LICENSE-COMMERCIAL.md)
# License : MIT source code + official builds/services
# (see LICENSE-MIT.md, OFFICIAL_BUILDS_AND_SERVICES.md)
#
# Workflow : .NET Format Check
# Purpose : Enforces consistent C# code formatting on every pull request.
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/json-validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
# PortPane by ShackDesk
# Project : https://github.com/Computer-Tsu/shackdesk-portpane
# Author : Mark McDow (N4TEK) — My Computer Guru LLC
# License : GPL v3 / Commercial (see LICENSE-GPL.md, LICENSE-COMMERCIAL.md)
# License : MIT source code + official builds/services
# (see LICENSE-MIT.md, OFFICIAL_BUILDS_AND_SERVICES.md)
#
# Workflow : JSON Data File Validation
# Purpose : Validates usb_devices.json whenever the data/ directory changes.
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/markdown-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
# PortPane by ShackDesk
# Project : https://github.com/Computer-Tsu/shackdesk-portpane
# Author : Mark McDow (N4TEK) — My Computer Guru LLC
# License : GPL v3 / Commercial (see LICENSE-GPL.md, LICENSE-COMMERCIAL.md)
# License : MIT source code + official builds/services
# (see LICENSE-MIT.md, OFFICIAL_BUILDS_AND_SERVICES.md)
#
# Workflow : Markdown Lint
# Purpose : Checks all Markdown files for formatting consistency and common
Expand Down
8 changes: 6 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
PortPane by ShackDesk — Changelog
Project : https://github.com/Computer-Tsu/shackdesk-portpane
Author : Mark McDow (N4TEK) — My Computer Guru LLC
License : GPL v3 / Commercial (see LICENSE-GPL.md, LICENSE-COMMERCIAL.md)
License : MIT source code + official builds/services (see LICENSE-MIT.md, OFFICIAL_BUILDS_AND_SERVICES.md)
════════════════════════════════════════════════════════════════════════════

FORMAT
Expand Down Expand Up @@ -70,6 +70,9 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### Changed

- License baseline switched from GPL v3 to MIT across app metadata, installer packaging, and user-facing strings
- Project version bumped to `0.5.6` in branding and assembly/package metadata

- `BrandingInfo.Version` stripped of channel suffix (was `"0.5.1-beta"`); suffix now provided
exclusively by `ChannelInfo.VersionSuffix` on each branch
- `LicenseService`: `UnlockAllForTesting = true` returns Personal-tier license automatically,
Expand Down Expand Up @@ -185,7 +188,8 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- Dark theme with system High Contrast mode compatibility
- Single-instance enforcement via named Mutex
- Velopack auto-update (background, rate-limited to once per 24h, non-interrupting)
- GPL v3 / Commercial dual license with RSA offline license validation (key placeholder)
- MIT source-code licensing with official-build registration validation
infrastructure (key placeholder)
- Opt-in anonymous telemetry (off by default)
- `Help → View Collected Data` viewer with Send/Clear/Close
- Pending report queue (max 10, oldest discarded)
Expand Down
16 changes: 10 additions & 6 deletions CLA.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
*This summary is not legal text — the full agreement is below.*

- **You keep ownership** of everything you contribute. You are not giving up your copyright.
- **You give permission** for your contribution to be used in both the free (GPL v3) and
paid (commercial) versions of PortPane.
- **This is standard practice** for dual-licensed open source projects. Without this
agreement, the project could not legally offer a commercial version.
- **You give permission** for your contribution to be used in both the MIT-licensed
source code and official ShackDesk builds/services.
- **This is standard practice** for projects that offer open source code alongside
official builds, personalization, and support. Without this agreement, the
project could not consistently offer those official ShackDesk services.
- Submitting a pull request on GitHub means you agree to these terms.

---
Expand All @@ -31,9 +32,12 @@ By submitting a pull request or any other contribution to PortPane by ShackDesk,

3. You represent that your contributions do not violate any third-party license, patent, copyright, or other intellectual property right.

## Dual Licensing
## Distribution Models

1. You acknowledge that PortPane is dual-licensed under GPL v3 and a commercial license, and that your contributions may be distributed under either license at the maintainer's discretion.
1. You acknowledge that source code in this repository is distributed under MIT,
and that ShackDesk may offer official builds, optional registration/
personalization, and support under separate commercial terms. You agree your
contributions may be used in both contexts at the maintainer's discretion.

## No Obligation

Expand Down
46 changes: 46 additions & 0 deletions CODE_SIGNING_POLICY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Code Signing Policy (SignPath Readiness)

## Scope

This policy defines how official PortPane release artifacts are produced and how
code signing will be integrated for trusted distribution.

## Source Code License

All source code in this repository is licensed under the MIT License
([LICENSE-MIT.md](LICENSE-MIT.md)).

## Official Builds vs Source Builds

- **Source builds**: Any binaries you build yourself from this repository are
governed by MIT terms.
- **Official ShackDesk builds and services**: See
[OFFICIAL_BUILDS_AND_SERVICES.md](OFFICIAL_BUILDS_AND_SERVICES.md).

Official ShackDesk services do not reduce or override MIT rights for source
code.

## Trusted Build Intent

The CI workflow is structured to support a trusted signing flow:

1. Build unsigned release artifact in GitHub Actions.
2. Publish immutable workflow artifacts (exe + sha256).
3. Sign official release artifacts in a dedicated signing stage/service.
4. Publish signed artifacts and checksums to GitHub Releases.

## Current Status (as of 2026-04-08)

- CI currently builds and publishes **unsigned** artifacts.
- Signing is intentionally a placeholder in `.github/workflows/build.yml`.
- SignPath integration is planned but not yet enabled in this repository.
- Initial SignPath rollout is intended for **alpha** releases first, then
**beta**. Stable may later use SignPath or a separate signing process.

## Future SignPath Notes

When SignPath is enabled, release notes should identify:

- which artifacts were signed,
- the certificate subject used for signing,
- where verification guidance is documented.
12 changes: 6 additions & 6 deletions LEGAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ PortPane™ is a trademark of My Computer Guru LLC.

## License

PortPane is dual-licensed. See [LICENSE-GPL.md](LICENSE-GPL.md) and [LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md).
- **Source code in this repository:** MIT License ([LICENSE-MIT.md](LICENSE-MIT.md)).
- **Official ShackDesk builds and services:** see [OFFICIAL_BUILDS_AND_SERVICES.md](OFFICIAL_BUILDS_AND_SERVICES.md).

---

Expand Down Expand Up @@ -60,10 +61,9 @@ USB device identification data sourced in part from the

---

## Attribution Requirement
## Official Build Provenance

All distributions of PortPane, including builds under the commercial license,
must retain the `Attribution.cs` copyright fingerprint embedded in the binary.
Fingerprint: `PortPane-ShackDesk-MCG-f8a2c4e6-3b1d-4f9a-8e7c-5d2b0a6c1e4f`
ShackDesk retains the `Attribution.cs` fingerprint in official builds for
provenance and support purposes.

Removal constitutes a license violation.
Fingerprint: `PortPane-ShackDesk-MCG-f8a2c4e6-3b1d-4f9a-8e7c-5d2b0a6c1e4f`
36 changes: 0 additions & 36 deletions LICENSE-COMMERCIAL.md

This file was deleted.

35 changes: 0 additions & 35 deletions LICENSE-GPL.md

This file was deleted.

21 changes: 21 additions & 0 deletions LICENSE-MIT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# MIT License

Copyright (c) 2024-2026 Mark McDow (N4TEK), My Computer Guru LLC

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
53 changes: 53 additions & 0 deletions OFFICIAL_BUILDS_AND_SERVICES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Official Builds and Services — PortPane by ShackDesk

Copyright © 2024-2026 Mark McDow (N4TEK), My Computer Guru LLC.

This document describes optional ShackDesk-distributed builds and paid services
for PortPane. It does not reduce, replace, or override the MIT rights granted
for source code in this repository.

## Source Code

All source code in this repository is licensed under the MIT License. If you
build PortPane yourself from this repository, the resulting build is governed
by MIT and applicable third-party licenses.

## Official ShackDesk Offerings

ShackDesk may provide one or more of the following for official PortPane builds:

- Official ShackDesk-distributed binaries
- Optional registration files for official builds
- Optional personalization such as operator name, callsign, club, or EMCOMM identity
- Optional paid support or update assistance

## Registration and Personalization

- Registration files are issued by ShackDesk for official builds only.
- They may unlock personalization, branding, or future paid conveniences in
official ShackDesk builds.
- Registration files may not be shared, resold, or transferred unless
ShackDesk explicitly allows it.

## Support Services

- Paid support is included only when explicitly purchased or granted.
- Free community support may still be available through public GitHub
discussions, documentation, or issue reporting.

## Branding and Provenance

- ShackDesk names, logos, trademarks, and trade dress remain the property of
My Computer Guru LLC.
- Official ShackDesk builds may include provenance markers, signatures, support
identifiers, or registration mechanisms.

## Open Source Notice

Nothing in this document limits your rights under the MIT License for source
code in this repository.

## Disclaimer

Official builds and services are provided "AS IS" unless a separate written
support agreement says otherwise.
Loading
Loading