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
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 : MIT + official-build commercial terms (see LICENSE-MIT.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 @@ -338,7 +339,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 @@ -446,6 +451,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 : MIT + official-build commercial terms (see LICENSE-MIT.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 : MIT + official-build commercial terms (see LICENSE-MIT.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 : MIT + official-build commercial terms (see LICENSE-MIT.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 : MIT + official-build commercial terms (see LICENSE-MIT.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 : MIT + official-build commercial terms (see LICENSE-MIT.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
5 changes: 3 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 : MIT / Commercial (see LICENSE-MIT.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 @@ -188,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)
- MIT / 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
14 changes: 9 additions & 5 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 (MIT) 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 @@ -33,7 +34,10 @@ By submitting a pull request or any other contribution to PortPane by ShackDesk,

## Distribution Models

1. You acknowledge that source code in this repository is distributed under MIT, and that official ShackDesk-distributed binaries/services may be offered under separate commercial terms. You agree your contributions may be used in both distribution models 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
10 changes: 6 additions & 4 deletions CODE_SIGNING_POLICY.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ All source code in this repository is licensed under the MIT License

- **Source builds**: Any binaries you build yourself from this repository are
governed by MIT terms.
- **Official ShackDesk builds**: Binaries published by ShackDesk may include
additional branding/support/licensing terms described in
[LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md).
- **Official ShackDesk builds and services**: See
[OFFICIAL_BUILDS_AND_SERVICES.md](OFFICIAL_BUILDS_AND_SERVICES.md).

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

## Trusted Build Intent

Expand All @@ -34,6 +34,8 @@ The CI workflow is structured to support a trusted signing flow:
- 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

Expand Down
11 changes: 5 additions & 6 deletions LEGAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ PortPane™ is a trademark of My Computer Guru LLC.
## License

- **Source code in this repository:** MIT License ([LICENSE-MIT.md](LICENSE-MIT.md)).
- **Official ShackDesk-distributed binaries/services:** may be subject to additional commercial terms ([LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md)).
- **Official ShackDesk builds and services:** see [OFFICIAL_BUILDS_AND_SERVICES.md](OFFICIAL_BUILDS_AND_SERVICES.md).

---

Expand Down Expand Up @@ -61,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`
44 changes: 0 additions & 44 deletions LICENSE-COMMERCIAL.md

This file was deleted.

7 changes: 1 addition & 6 deletions LICENSE-MIT.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# MIT License

Copyright (c) 2026 My Computer Guru LLC
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
Expand All @@ -19,8 +19,3 @@ 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.

## Additional Terms

The attribution and fingerprint files included with PortPane must be preserved
in source and binary redistributions.
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.
17 changes: 8 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -197,15 +197,14 @@ If PortPane saves you time, consider leaving a star on GitHub.

## License

**Source code license:**

- **MIT** — all source code in this repository is licensed under MIT. See [LICENSE-MIT.md](LICENSE-MIT.md).
- If you compile from this repository yourself, your resulting build is governed by MIT (plus applicable third-party licenses).

**Official ShackDesk build terms:**

- **Commercial terms** may apply to official ShackDesk-distributed binaries, branding/licensing services, and support offerings. See [LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md).
- These official-build terms do **not** limit your MIT rights for source code from this repository.
PortPane source code is licensed under MIT. Official ShackDesk builds, optional
registration/personalization, and support are offered under separate
commercial terms.

- **Source code:** MIT. See [LICENSE-MIT.md](LICENSE-MIT.md).
- **Official ShackDesk builds and services:** see [OFFICIAL_BUILDS_AND_SERVICES.md](OFFICIAL_BUILDS_AND_SERVICES.md).
- If you compile PortPane yourself from this repository, your resulting build is
governed by MIT (plus applicable third-party licenses).

---

Expand Down
2 changes: 1 addition & 1 deletion data/usb_devices.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"_comment_2": " PortPane by ShackDesk — USB Device Database",
"_comment_3": " Project : https://github.com/Computer-Tsu/shackdesk-portpane",
"_comment_4": " Author : Mark McDow (N4TEK) — My Computer Guru LLC",
"_comment_5": " License : MIT / Commercial (see LICENSE-MIT.md)",
"_comment_5": " License : MIT source code (see LICENSE-MIT.md)",
"_comment_6": "════════════════════════════════════════════════════════════════════════",
"_comment_7": "",
"_comment_8": " PURPOSE",
Expand Down
6 changes: 3 additions & 3 deletions installer/PortPane.iss
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,9 @@ Source: "..\publish\{#AppExeName}.sha256"; DestDir: "{app}"; Flags: ignoreversio
; USB device database (bundled — also shipped as separate artifact for updates)
Source: "..\data\usb_devices.json"; DestDir: "{app}\Data"; Flags: ignoreversion

; License files
Source: "..\LICENSE-MIT.md"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\LICENSE-COMMERCIAL.md"; DestDir: "{app}"; Flags: ignoreversion
; Legal and service files
Source: "..\LICENSE-MIT.md"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\OFFICIAL_BUILDS_AND_SERVICES.md"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Comment: "{#AppDescription}"
Expand Down
8 changes: 3 additions & 5 deletions src/PortPane/Attribution.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
// All rights reserved.
//
// This file contains attribution metadata embedded as a copyright fingerprint.
// It is intentionally retained in all distributions, including commercial builds.
// Removal or modification of this file constitutes a violation of the license terms.
// ShackDesk retains it in official builds for provenance and support purposes.

using System.Runtime.CompilerServices;

Expand All @@ -14,8 +13,7 @@
namespace PortPane;

/// <summary>
/// Hidden copyright fingerprint. Present in all builds (MIT and commercial).
/// Do not remove, rename, or suppress this class.
/// Hidden copyright fingerprint. Present in official ShackDesk builds.
/// The Fingerprint property is referenced at startup to prevent compiler removal.
/// </summary>
internal static class Attribution
Expand All @@ -27,7 +25,7 @@ internal static class Attribution
internal const string ProjectURL = BrandingInfo.RepoURL;
internal const string LicenseSPDX = "MIT";

// Copyright verification fingerprint. Do not remove. See LICENSE-MIT.md.
// Copyright verification fingerprint used in official ShackDesk builds.
// UUID generated at project creation: f8a2c4e6-3b1d-4f9a-8e7c-5d2b0a6c1e4f
private const string _fingerprint =
"PortPane-ShackDesk-MCG-f8a2c4e6-3b1d-4f9a-8e7c-5d2b0a6c1e4f";
Expand Down
11 changes: 10 additions & 1 deletion src/PortPane/BrandingInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,18 @@ public static int? DaysRemaining
public const string AppURL = "https://shackdesk.com";
public const string SupportURL = "https://github.com/Computer-Tsu/shackdesk-portpane/discussions";
public const string DonationURL = "";
public const string LicenseType = "MIT / Commercial";
public const string LicenseType = "MIT source code + optional paid services";
public const string TelemetryEndpoint = "https://telemetry.shackdesk.com/report";

public static string RepoDocBranch => ChannelInfo.Channel switch
{
ReleaseChannel.Alpha => "dev",
ReleaseChannel.Beta => "beta",
_ => "main"
};

public static string SourceLicenseURL => $"{RepoURL}/blob/{RepoDocBranch}/LICENSE-MIT.md";

/// <summary>
/// Per-channel update feed URL. Resolves at runtime based on ChannelInfo.Channel.
/// Served by ShackDesk-Site as static JSON; updated automatically after each release.
Expand Down
2 changes: 1 addition & 1 deletion src/PortPane/Data/usb_devices.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"_comment_2": " PortPane by ShackDesk — USB Device Database",
"_comment_3": " Project : https://github.com/Computer-Tsu/shackdesk-portpane",
"_comment_4": " Author : Mark McDow (N4TEK) — My Computer Guru LLC",
"_comment_5": " License : MIT / Commercial (see LICENSE-MIT.md)",
"_comment_5": " License : MIT source code (see LICENSE-MIT.md)",
"_comment_6": "════════════════════════════════════════════════════════════════════════",
"_comment_7": "",
"_comment_8": " PURPOSE",
Expand Down
Loading