From 5a324ca58087b9c5ab13f23fe45499876478219b Mon Sep 17 00:00:00 2001 From: Computer-Tsu <55188587+Computer-Tsu@users.noreply.github.com> Date: Wed, 8 Apr 2026 22:26:25 -0400 Subject: [PATCH 1/2] =?UTF-8?q?license:=20establish=20MIT=20as=20intended?= =?UTF-8?q?=20open-source=20baseline=20=E2=80=94=20retires=20GPL=20placeho?= =?UTF-8?q?lder,=20bumps=20version=20to=200.5.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/dependabot.yml | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/dependency-review.yml | 2 +- .github/workflows/format-check.yml | 2 +- .github/workflows/json-validate.yml | 2 +- .github/workflows/markdown-lint.yml | 2 +- CHANGELOG.md | 7 ++- CLA.md | 6 +-- CODE_SIGNING_POLICY.md | 44 +++++++++++++++++ LEGAL.md | 3 +- LICENSE-COMMERCIAL.md | 50 ++++++++++++-------- LICENSE-GPL.md | 35 -------------- LICENSE-MIT.md | 26 ++++++++++ README.md | 23 +++++++-- data/usb_devices.json | 2 +- installer/PortPane.iss | 6 +-- src/PortPane/Attribution.cs | 6 +-- src/PortPane/BrandingInfo.cs | 4 +- src/PortPane/Data/usb_devices.json | 2 +- src/PortPane/PortPane.csproj | 6 +-- src/PortPane/Resources/Strings.de.resx | 6 +-- src/PortPane/Resources/Strings.es.resx | 6 +-- src/PortPane/Resources/Strings.fr.resx | 6 +-- src/PortPane/Resources/Strings.ja.resx | 6 +-- src/PortPane/Resources/Strings.resx | 8 ++-- src/PortPane/Services/LicenseService.cs | 2 +- src/PortPane/ViewModels/SettingsViewModel.cs | 4 +- src/PortPane/Views/FirstRunDialog.xaml | 2 +- src/PortPane/Views/FirstRunDialog.xaml.cs | 2 +- 30 files changed, 169 insertions(+), 107 deletions(-) create mode 100644 CODE_SIGNING_POLICY.md delete mode 100644 LICENSE-GPL.md create mode 100644 LICENSE-MIT.md diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1a1dd6c..2e079d4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -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 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 79ae538..8024536 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -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) # # Workflow : Build · Test · Publish · Release # Purpose : Main CI/CD pipeline. Builds and tests on every push and PR to main. diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index dd71a01..0555806 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -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) # # Workflow : CodeQL Security Analysis # Purpose : Scans C# source code for security vulnerabilities using GitHub's diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index dd0b34e..241dfed 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -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) # # Workflow : Dependency Review # Purpose : Checks NuGet package changes introduced in a pull request against diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml index 230ed39..0212050 100644 --- a/.github/workflows/format-check.yml +++ b/.github/workflows/format-check.yml @@ -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) # # Workflow : .NET Format Check # Purpose : Enforces consistent C# code formatting on every pull request. diff --git a/.github/workflows/json-validate.yml b/.github/workflows/json-validate.yml index 3ed2f9d..7107fc3 100644 --- a/.github/workflows/json-validate.yml +++ b/.github/workflows/json-validate.yml @@ -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) # # Workflow : JSON Data File Validation # Purpose : Validates usb_devices.json whenever the data/ directory changes. diff --git a/.github/workflows/markdown-lint.yml b/.github/workflows/markdown-lint.yml index 923d99c..cec6d59 100644 --- a/.github/workflows/markdown-lint.yml +++ b/.github/workflows/markdown-lint.yml @@ -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) # # Workflow : Markdown Lint # Purpose : Checks all Markdown files for formatting consistency and common diff --git a/CHANGELOG.md b/CHANGELOG.md index 3521cd0..bd664f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 / Commercial (see LICENSE-MIT.md, LICENSE-COMMERCIAL.md) ════════════════════════════════════════════════════════════════════════════ FORMAT @@ -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, @@ -185,7 +188,7 @@ 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 / Commercial dual license with RSA offline license validation (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) diff --git a/CLA.md b/CLA.md index f1223a1..1642b6e 100644 --- a/CLA.md +++ b/CLA.md @@ -5,7 +5,7 @@ *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 +- **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. @@ -31,9 +31,9 @@ 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 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. ## No Obligation diff --git a/CODE_SIGNING_POLICY.md b/CODE_SIGNING_POLICY.md new file mode 100644 index 0000000..de16cb8 --- /dev/null +++ b/CODE_SIGNING_POLICY.md @@ -0,0 +1,44 @@ +# 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**: Binaries published by ShackDesk may include + additional branding/support/licensing terms described in + [LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md). + +Commercial terms 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. + +## 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. diff --git a/LEGAL.md b/LEGAL.md index b8d80ad..5085aa4 100644 --- a/LEGAL.md +++ b/LEGAL.md @@ -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-distributed binaries/services:** may be subject to additional commercial terms ([LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md)). --- diff --git a/LICENSE-COMMERCIAL.md b/LICENSE-COMMERCIAL.md index db25733..d9c3526 100644 --- a/LICENSE-COMMERCIAL.md +++ b/LICENSE-COMMERCIAL.md @@ -1,36 +1,44 @@ # Commercial License — PortPane by ShackDesk -Copyright © 2024–2026 Mark McDow (N4TEK), My Computer Guru LLC. All rights reserved. +Copyright © 2024–2026 Mark McDow (N4TEK), My Computer Guru LLC. + +## Scope + +This license applies only to official PortPane builds distributed by ShackDesk. +It does not apply to source-code distributions from this repository. + +The PortPane source code is available under the MIT License. This commercial +license governs use of official ShackDesk binaries and related services. ## Grant -Subject to the terms of a valid commercial license agreement with My Computer Guru LLC, -you are granted a non-exclusive, non-transferable license to: +Subject to a valid commercial license, you are granted a non-exclusive, +non-transferable license to: + +- Use official PortPane builds without trial limitations +- Unlock licensed features (such as branding and personalization) +- Receive updates or support if included with your license -- Use PortPane in commercial products or services -- Distribute PortPane as part of a commercial offering -- Use PortPane without the obligation to open-source your own code under GPL v3 +## Restrictions -## Conditions +1. **No redistribution of official builds.** You may not redistribute official + ShackDesk binaries without permission. -1. **Attribution must be preserved.** The `Attribution.cs` fingerprint embedded - in the binary must remain intact in all distributions. +2. **License key usage.** License keys may not be shared, resold, or + transferred unless explicitly allowed. -2. **License key required.** Commercial use requires a valid license key issued - by My Computer Guru LLC. +3. **No removal of licensing mechanisms.** You may not bypass or disable + license enforcement in official builds. -3. **No sublicensing.** You may not sublicense PortPane or its source code to - third parties. +## Open Source Notice -4. **No competing product.** You may not use PortPane's source code to build - a product that directly competes with PortPane. +PortPane source code is licensed under the MIT License. -## To Obtain a Commercial License +You are free to use, modify, and distribute the source code under those terms. -Contact: [shackdesk.com](https://shackdesk.com) +This commercial license does not restrict your rights under the MIT License for +source code. -## Disclaimer of Warranties +## Disclaimer -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, -OR OTHER LIABILITY. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. diff --git a/LICENSE-GPL.md b/LICENSE-GPL.md deleted file mode 100644 index e24f938..0000000 --- a/LICENSE-GPL.md +++ /dev/null @@ -1,35 +0,0 @@ -# GNU General Public License v3.0 - -Copyright (C) 2024–2026 Mark McDow (N4TEK), My Computer Guru LLC - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - ---- - -The full text of the GNU General Public License version 3 is available at: - - ---- - -## Additional Terms (GPL v3 Section 7) - -The following additional terms apply under Section 7 of the GPL v3: - -1. **Attribution Preservation.** The `Attribution.cs` copyright fingerprint - embedded in every build must be preserved in all distributions, - including modified versions. Removal constitutes a license violation. - -2. **No Misleading Branding.** Modified versions must not present themselves - as the official PortPane application or use the ShackDesk name in a way - that implies official endorsement. diff --git a/LICENSE-MIT.md b/LICENSE-MIT.md new file mode 100644 index 0000000..e7ff275 --- /dev/null +++ b/LICENSE-MIT.md @@ -0,0 +1,26 @@ +# MIT License + +Copyright (c) 2026 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. + +## Additional Terms + +The attribution and fingerprint files included with PortPane must be preserved +in source and binary redistributions. diff --git a/README.md b/README.md index e82021f..cf69bd8 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ Clarity and simplicity take precedence over feature density. - Portable mode — run from USB drive with settings stored alongside the exe - Auto-update via Velopack (background, non-interrupting) - Optional anonymous telemetry (disabled by default) -- GPL v3 licensed — full source available +- MIT licensed — full source available --- @@ -136,6 +136,12 @@ Ideal for EMCOMM go-kit deployment or running from a USB drive. --- +## Code Signing & Provenance + +PortPane release artifacts are currently unsigned. A SignPath-ready code-signing policy and trust model are documented in [CODE_SIGNING_POLICY.md](CODE_SIGNING_POLICY.md). + +--- + ## Building from Source > The author builds exclusively via GitHub Actions. These instructions are for contributors. @@ -172,6 +178,10 @@ Ships with English. German placeholder included. French, Spanish, Japanese stubs ## Trademarks +PortPane and ShackDesk are trademarks of My Computer Guru LLC. + +Use of the name, branding, or identity in derived products is not permitted without permission. + See [LEGAL.md](LEGAL.md) for trademark notices for Icom, Yaesu, Kenwood, Arduino, SignaLink, DigiRig, RIGblaster, and other referenced product names. @@ -187,10 +197,15 @@ If PortPane saves you time, consider leaving a star on GitHub. ## License -**Dual licensed:** +**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:** -- **GPL v3** — free for personal and open-source use. See [LICENSE-GPL.md](LICENSE-GPL.md). -- **Commercial** — for commercial products without GPL obligations. See [LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md). +- **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. --- diff --git a/data/usb_devices.json b/data/usb_devices.json index 5099144..02e7ecf 100644 --- a/data/usb_devices.json +++ b/data/usb_devices.json @@ -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 : GPL v3 / Commercial (see LICENSE-GPL.md)", + "_comment_5": " License : MIT / Commercial (see LICENSE-MIT.md)", "_comment_6": "════════════════════════════════════════════════════════════════════════", "_comment_7": "", "_comment_8": " PURPOSE", diff --git a/installer/PortPane.iss b/installer/PortPane.iss index 1af95b1..b817163 100644 --- a/installer/PortPane.iss +++ b/installer/PortPane.iss @@ -7,7 +7,7 @@ ; See BrandingInfo.cs for all values sourced here. #define AppName "PortPane" -#define AppVersion "0.5.0-beta" +#define AppVersion "0.5.6" #define AppPublisher "My Computer Guru LLC" #define AppURL "https://shackdesk.com" #define AppExeName "PortPane.exe" @@ -27,7 +27,7 @@ AppCopyright=Copyright (C) {#CopyrightYear} Mark McDow (N4TEK). All rights reser DefaultDirName={autopf}\{#AppName} DefaultGroupName={#AppName} AllowNoIcons=yes -LicenseFile=..\LICENSE-GPL.md +LicenseFile=..\LICENSE-MIT.md InfoBeforeFile=..\docs\INSTALLER_NOTE.txt OutputDir=Output OutputBaseFilename=PortPane-Setup-{#AppVersion} @@ -63,7 +63,7 @@ Source: "..\publish\{#AppExeName}.sha256"; DestDir: "{app}"; Flags: ignoreversio Source: "..\data\usb_devices.json"; DestDir: "{app}\Data"; Flags: ignoreversion ; License files -Source: "..\LICENSE-GPL.md"; DestDir: "{app}"; Flags: ignoreversion +Source: "..\LICENSE-MIT.md"; DestDir: "{app}"; Flags: ignoreversion Source: "..\LICENSE-COMMERCIAL.md"; DestDir: "{app}"; Flags: ignoreversion [Icons] diff --git a/src/PortPane/Attribution.cs b/src/PortPane/Attribution.cs index 4dd186e..3752175 100644 --- a/src/PortPane/Attribution.cs +++ b/src/PortPane/Attribution.cs @@ -14,7 +14,7 @@ namespace PortPane; /// -/// Hidden copyright fingerprint. Present in all builds (GPL and commercial). +/// Hidden copyright fingerprint. Present in all builds (MIT and commercial). /// Do not remove, rename, or suppress this class. /// The Fingerprint property is referenced at startup to prevent compiler removal. /// @@ -25,9 +25,9 @@ internal static class Attribution internal const string OriginalAuthor = BrandingInfo.AuthorName; internal const string Callsign = BrandingInfo.AuthorCallsign; internal const string ProjectURL = BrandingInfo.RepoURL; - internal const string LicenseSPDX = "GPL-3.0-or-later"; + internal const string LicenseSPDX = "MIT"; - // Copyright verification fingerprint. Do not remove. See LICENSE-GPL.md. + // Copyright verification fingerprint. Do not remove. See LICENSE-MIT.md. // UUID generated at project creation: f8a2c4e6-3b1d-4f9a-8e7c-5d2b0a6c1e4f private const string _fingerprint = "PortPane-ShackDesk-MCG-f8a2c4e6-3b1d-4f9a-8e7c-5d2b0a6c1e4f"; diff --git a/src/PortPane/BrandingInfo.cs b/src/PortPane/BrandingInfo.cs index 077d705..4db0648 100644 --- a/src/PortPane/BrandingInfo.cs +++ b/src/PortPane/BrandingInfo.cs @@ -9,7 +9,7 @@ public static class BrandingInfo public const string AppName = "PortPane"; public const string SuiteName = "ShackDesk"; public const string FullName = "PortPane by ShackDesk"; - public const string Version = "0.5.5"; + public const string Version = "0.5.6"; /// /// ISO 8601 UTC build timestamp. Empty string in source — patched by CI at @@ -64,7 +64,7 @@ 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 = "GPL v3 / Commercial"; + public const string LicenseType = "MIT / Commercial"; public const string TelemetryEndpoint = "https://telemetry.shackdesk.com/report"; /// diff --git a/src/PortPane/Data/usb_devices.json b/src/PortPane/Data/usb_devices.json index 5099144..02e7ecf 100644 --- a/src/PortPane/Data/usb_devices.json +++ b/src/PortPane/Data/usb_devices.json @@ -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 : GPL v3 / Commercial (see LICENSE-GPL.md)", + "_comment_5": " License : MIT / Commercial (see LICENSE-MIT.md)", "_comment_6": "════════════════════════════════════════════════════════════════════════", "_comment_7": "", "_comment_8": " PURPOSE", diff --git a/src/PortPane/PortPane.csproj b/src/PortPane/PortPane.csproj index ce8c03b..0cc8c5a 100644 --- a/src/PortPane/PortPane.csproj +++ b/src/PortPane/PortPane.csproj @@ -26,9 +26,9 @@ Mark McDow (N4TEK) Copyright © 2024-2026 Mark McDow. All rights reserved. PortPane is a trademark of My Computer Guru LLC - 0.5.4-alpha - 0.5.4.0 - 0.5.4.0 + 0.5.6 + 0.5.6.0 + 0.5.6.0 Takes the pain out of ports — amateur radio USB device helper https://github.com/Computer-Tsu/shackdesk-portpane diff --git a/src/PortPane/Resources/Strings.de.resx b/src/PortPane/Resources/Strings.de.resx index 25f2d70..77344f7 100644 --- a/src/PortPane/Resources/Strings.de.resx +++ b/src/PortPane/Resources/Strings.de.resx @@ -4,7 +4,7 @@ PortPane by ShackDesk — UI String Resources 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 / Commercial (see LICENSE-MIT.md, LICENSE-COMMERCIAL.md) ════════════════════════════════════════════════════════════════════════════ LANGUAGE : German (Deutsch) @@ -93,14 +93,14 @@ Anonyme Nutzungsdaten senden, um PortPane zu verbessern Mehr erfahren, was gesammelt wird Lizenz - Kostenlos (GPL v3) + Kostenlos (MIT) Kommerziell Über PortPane Version {0} Von {0} ({1}) - Lizenziert unter GPL v3 / Kommerziell + Lizenziert unter MIT / Kommerziell Auf GitHub ansehen Support erhalten diff --git a/src/PortPane/Resources/Strings.es.resx b/src/PortPane/Resources/Strings.es.resx index 8f21cd5..a697d70 100644 --- a/src/PortPane/Resources/Strings.es.resx +++ b/src/PortPane/Resources/Strings.es.resx @@ -4,7 +4,7 @@ PortPane by ShackDesk — UI String Resources 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 / Commercial (see LICENSE-MIT.md, LICENSE-COMMERCIAL.md) ════════════════════════════════════════════════════════════════════════════ LANGUAGE : Spanish (Español) @@ -91,14 +91,14 @@ Send anonymous usage data to help improve PortPane Learn more about what is collected License - Free (GPL v3) + Free (MIT) Commercial About PortPane Version {0} By {0} ({1}) - Licensed under GPL v3 / Commercial + Licensed under MIT / Commercial View on GitHub Get Support diff --git a/src/PortPane/Resources/Strings.fr.resx b/src/PortPane/Resources/Strings.fr.resx index 8e57435..b73b84d 100644 --- a/src/PortPane/Resources/Strings.fr.resx +++ b/src/PortPane/Resources/Strings.fr.resx @@ -4,7 +4,7 @@ PortPane by ShackDesk — UI String Resources 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 / Commercial (see LICENSE-MIT.md, LICENSE-COMMERCIAL.md) ════════════════════════════════════════════════════════════════════════════ LANGUAGE : French (Français) @@ -91,14 +91,14 @@ Send anonymous usage data to help improve PortPane Learn more about what is collected License - Free (GPL v3) + Free (MIT) Commercial About PortPane Version {0} By {0} ({1}) - Licensed under GPL v3 / Commercial + Licensed under MIT / Commercial View on GitHub Get Support diff --git a/src/PortPane/Resources/Strings.ja.resx b/src/PortPane/Resources/Strings.ja.resx index d9cffc0..ed8d227 100644 --- a/src/PortPane/Resources/Strings.ja.resx +++ b/src/PortPane/Resources/Strings.ja.resx @@ -4,7 +4,7 @@ PortPane by ShackDesk — UI String Resources 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 / Commercial (see LICENSE-MIT.md, LICENSE-COMMERCIAL.md) ════════════════════════════════════════════════════════════════════════════ LANGUAGE : Japanese (日本語) @@ -91,14 +91,14 @@ Send anonymous usage data to help improve PortPane Learn more about what is collected License - Free (GPL v3) + Free (MIT) Commercial About PortPane Version {0} By {0} ({1}) - Licensed under GPL v3 / Commercial + Licensed under MIT / Commercial View on GitHub Get Support diff --git a/src/PortPane/Resources/Strings.resx b/src/PortPane/Resources/Strings.resx index 1e45336..4768a01 100644 --- a/src/PortPane/Resources/Strings.resx +++ b/src/PortPane/Resources/Strings.resx @@ -4,7 +4,7 @@ PortPane by ShackDesk — UI String Resources (English — Source File) 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 / Commercial (see LICENSE-MIT.md, LICENSE-COMMERCIAL.md) ════════════════════════════════════════════════════════════════════════════ LANGUAGE : English (United States) @@ -100,7 +100,7 @@ Send anonymous usage data to help improve PortPane Learn more about what is collected License - Free (GPL v3) + Free (MIT) Commercial @@ -241,7 +241,7 @@ No internet connection required. Wrong application — this license is not for PortPane. License expired and is no longer valid. License file could not be read or is corrupt. - Free (GPL v3) + Free (MIT) Personal Club EMCOMM @@ -277,7 +277,7 @@ Would you like to relaunch PortPane now? About PortPane Version {0} By {0} ({1}) - Licensed under GPL v3 / Commercial + Licensed under MIT / Commercial View on GitHub Get Support diff --git a/src/PortPane/Services/LicenseService.cs b/src/PortPane/Services/LicenseService.cs index 043719d..c8209d1 100644 --- a/src/PortPane/Services/LicenseService.cs +++ b/src/PortPane/Services/LicenseService.cs @@ -191,7 +191,7 @@ public async Task DeactivateAsync() public bool IsFeatureAvailable(string featureKey) { - // All features available in GPL tier. Reserved for future commercial gating. + // All features available in MIT tier. Reserved for future commercial gating. return true; } diff --git a/src/PortPane/ViewModels/SettingsViewModel.cs b/src/PortPane/ViewModels/SettingsViewModel.cs index 987fd49..e2eeb35 100644 --- a/src/PortPane/ViewModels/SettingsViewModel.cs +++ b/src/PortPane/ViewModels/SettingsViewModel.cs @@ -767,11 +767,11 @@ public string PendingTelemetryFrequency public string LicenseTierDisplayName => _license.Current.Tier switch { - LicenseTier.Free => "Free (GPL v3)", + LicenseTier.Free => "Free (MIT)", LicenseTier.Personal => "Personal", LicenseTier.Club => "Club", LicenseTier.EmComm => "EMCOMM", - _ => "Free (GPL v3)" + _ => "Free (MIT)" }; public string LicenseeDisplay => _license.Current.Licensee ?? string.Empty; diff --git a/src/PortPane/Views/FirstRunDialog.xaml b/src/PortPane/Views/FirstRunDialog.xaml index 741f9ff..bfd6d11 100644 --- a/src/PortPane/Views/FirstRunDialog.xaml +++ b/src/PortPane/Views/FirstRunDialog.xaml @@ -47,7 +47,7 @@ + Text="Free for personal and non-commercial use under MIT. Please do not rebrand or resell."/> diff --git a/src/PortPane/Views/FirstRunDialog.xaml.cs b/src/PortPane/Views/FirstRunDialog.xaml.cs index eb39152..a95a3f8 100644 --- a/src/PortPane/Views/FirstRunDialog.xaml.cs +++ b/src/PortPane/Views/FirstRunDialog.xaml.cs @@ -27,7 +27,7 @@ private void GetStarted_Click(object sender, RoutedEventArgs e) } private void License_Click(object sender, RoutedEventArgs e) - => Process.Start(new ProcessStartInfo(BrandingInfo.RepoURL + "/blob/main/LICENSE-GPL.md") + => Process.Start(new ProcessStartInfo(BrandingInfo.RepoURL + "/blob/main/LICENSE-MIT.md") { UseShellExecute = true }); private void Privacy_Click(object sender, RoutedEventArgs e) From fd64eb203b87a37aee67cc4f6d19f144cbed8776 Mon Sep 17 00:00:00 2001 From: Computer-Tsu <55188587+Computer-Tsu@users.noreply.github.com> Date: Mon, 20 Apr 2026 13:46:56 -0400 Subject: [PATCH 2/2] Clean up stale license references and clarify MIT + services model Follow-up review pass: remove LICENSE-COMMERCIAL.md, add OFFICIAL_BUILDS_AND_SERVICES.md, and update all remaining references across docs, source, installer, UI strings, and workflow files. Rebrand in-app "License" tab to "Registration". --- .github/workflows/build.yml | 11 +++- .github/workflows/codeql.yml | 3 +- .github/workflows/dependency-review.yml | 3 +- .github/workflows/format-check.yml | 3 +- .github/workflows/json-validate.yml | 3 +- .github/workflows/markdown-lint.yml | 3 +- CHANGELOG.md | 5 +- CLA.md | 14 +++-- CODE_SIGNING_POLICY.md | 10 ++-- LEGAL.md | 11 ++-- LICENSE-COMMERCIAL.md | 44 --------------- LICENSE-MIT.md | 7 +-- OFFICIAL_BUILDS_AND_SERVICES.md | 53 +++++++++++++++++++ README.md | 17 +++--- data/usb_devices.json | 2 +- installer/PortPane.iss | 6 +-- src/PortPane/Attribution.cs | 8 ++- src/PortPane/BrandingInfo.cs | 11 +++- src/PortPane/Data/usb_devices.json | 2 +- src/PortPane/Resources/Strings.de.resx | 4 +- src/PortPane/Resources/Strings.es.resx | 10 ++-- src/PortPane/Resources/Strings.fr.resx | 10 ++-- src/PortPane/Resources/Strings.ja.resx | 10 ++-- src/PortPane/Resources/Strings.resx | 36 ++++++------- src/PortPane/ViewModels/SettingsViewModel.cs | 18 +++---- src/PortPane/Views/AboutDialog.xaml.cs | 4 +- .../Views/Dialogs/ResetConfirmDialog.xaml | 4 +- src/PortPane/Views/FirstRunDialog.xaml | 2 +- src/PortPane/Views/FirstRunDialog.xaml.cs | 2 +- src/PortPane/Views/SettingsWindow.xaml | 28 +++++----- 30 files changed, 186 insertions(+), 158 deletions(-) delete mode 100644 LICENSE-COMMERCIAL.md create mode 100644 OFFICIAL_BUILDS_AND_SERVICES.md diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8024536..30e47a0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -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. @@ -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 @@ -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 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 0555806..858219b 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -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 diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 241dfed..4171a10 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -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 diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml index 0212050..579d988 100644 --- a/.github/workflows/format-check.yml +++ b/.github/workflows/format-check.yml @@ -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. diff --git a/.github/workflows/json-validate.yml b/.github/workflows/json-validate.yml index 7107fc3..96b183e 100644 --- a/.github/workflows/json-validate.yml +++ b/.github/workflows/json-validate.yml @@ -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. diff --git a/.github/workflows/markdown-lint.yml b/.github/workflows/markdown-lint.yml index cec6d59..f280d70 100644 --- a/.github/workflows/markdown-lint.yml +++ b/.github/workflows/markdown-lint.yml @@ -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 diff --git a/CHANGELOG.md b/CHANGELOG.md index bd664f3..00c26fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 @@ -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) diff --git a/CLA.md b/CLA.md index 1642b6e..c539439 100644 --- a/CLA.md +++ b/CLA.md @@ -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. --- @@ -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 diff --git a/CODE_SIGNING_POLICY.md b/CODE_SIGNING_POLICY.md index de16cb8..cb733ac 100644 --- a/CODE_SIGNING_POLICY.md +++ b/CODE_SIGNING_POLICY.md @@ -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 @@ -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 diff --git a/LEGAL.md b/LEGAL.md index 5085aa4..e375ae6 100644 --- a/LEGAL.md +++ b/LEGAL.md @@ -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). --- @@ -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` diff --git a/LICENSE-COMMERCIAL.md b/LICENSE-COMMERCIAL.md deleted file mode 100644 index d9c3526..0000000 --- a/LICENSE-COMMERCIAL.md +++ /dev/null @@ -1,44 +0,0 @@ -# Commercial License — PortPane by ShackDesk - -Copyright © 2024–2026 Mark McDow (N4TEK), My Computer Guru LLC. - -## Scope - -This license applies only to official PortPane builds distributed by ShackDesk. -It does not apply to source-code distributions from this repository. - -The PortPane source code is available under the MIT License. This commercial -license governs use of official ShackDesk binaries and related services. - -## Grant - -Subject to a valid commercial license, you are granted a non-exclusive, -non-transferable license to: - -- Use official PortPane builds without trial limitations -- Unlock licensed features (such as branding and personalization) -- Receive updates or support if included with your license - -## Restrictions - -1. **No redistribution of official builds.** You may not redistribute official - ShackDesk binaries without permission. - -2. **License key usage.** License keys may not be shared, resold, or - transferred unless explicitly allowed. - -3. **No removal of licensing mechanisms.** You may not bypass or disable - license enforcement in official builds. - -## Open Source Notice - -PortPane source code is licensed under the MIT License. - -You are free to use, modify, and distribute the source code under those terms. - -This commercial license does not restrict your rights under the MIT License for -source code. - -## Disclaimer - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. diff --git a/LICENSE-MIT.md b/LICENSE-MIT.md index e7ff275..43606a6 100644 --- a/LICENSE-MIT.md +++ b/LICENSE-MIT.md @@ -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 @@ -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. diff --git a/OFFICIAL_BUILDS_AND_SERVICES.md b/OFFICIAL_BUILDS_AND_SERVICES.md new file mode 100644 index 0000000..95ff883 --- /dev/null +++ b/OFFICIAL_BUILDS_AND_SERVICES.md @@ -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. diff --git a/README.md b/README.md index cf69bd8..6dadbc3 100644 --- a/README.md +++ b/README.md @@ -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). --- diff --git a/data/usb_devices.json b/data/usb_devices.json index 02e7ecf..b79d10d 100644 --- a/data/usb_devices.json +++ b/data/usb_devices.json @@ -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", diff --git a/installer/PortPane.iss b/installer/PortPane.iss index b817163..b5b1059 100644 --- a/installer/PortPane.iss +++ b/installer/PortPane.iss @@ -62,9 +62,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}" diff --git a/src/PortPane/Attribution.cs b/src/PortPane/Attribution.cs index 3752175..56bae7a 100644 --- a/src/PortPane/Attribution.cs +++ b/src/PortPane/Attribution.cs @@ -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; @@ -14,8 +13,7 @@ namespace PortPane; /// -/// 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. /// internal static class Attribution @@ -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"; diff --git a/src/PortPane/BrandingInfo.cs b/src/PortPane/BrandingInfo.cs index 4db0648..25c2af4 100644 --- a/src/PortPane/BrandingInfo.cs +++ b/src/PortPane/BrandingInfo.cs @@ -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"; + /// /// Per-channel update feed URL. Resolves at runtime based on ChannelInfo.Channel. /// Served by ShackDesk-Site as static JSON; updated automatically after each release. diff --git a/src/PortPane/Data/usb_devices.json b/src/PortPane/Data/usb_devices.json index 02e7ecf..b79d10d 100644 --- a/src/PortPane/Data/usb_devices.json +++ b/src/PortPane/Data/usb_devices.json @@ -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", diff --git a/src/PortPane/Resources/Strings.de.resx b/src/PortPane/Resources/Strings.de.resx index 77344f7..37040b4 100644 --- a/src/PortPane/Resources/Strings.de.resx +++ b/src/PortPane/Resources/Strings.de.resx @@ -4,7 +4,7 @@ PortPane by ShackDesk — UI String Resources 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 ════════════════════════════════════════════════════════════════════════════ LANGUAGE : German (Deutsch) @@ -100,7 +100,7 @@ Über PortPane Version {0} Von {0} ({1}) - Lizenziert unter MIT / Kommerziell + MIT-Quellcode + optionale kostenpflichtige Dienste Auf GitHub ansehen Support erhalten diff --git a/src/PortPane/Resources/Strings.es.resx b/src/PortPane/Resources/Strings.es.resx index a697d70..1272085 100644 --- a/src/PortPane/Resources/Strings.es.resx +++ b/src/PortPane/Resources/Strings.es.resx @@ -4,7 +4,7 @@ PortPane by ShackDesk — UI String Resources 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 ════════════════════════════════════════════════════════════════════════════ LANGUAGE : Spanish (Español) @@ -90,15 +90,15 @@ Settings — PortPane Send anonymous usage data to help improve PortPane Learn more about what is collected - License - Free (MIT) - Commercial + Registration + Standard + Registered About PortPane Version {0} By {0} ({1}) - Licensed under MIT / Commercial + MIT source code + optional paid services View on GitHub Get Support diff --git a/src/PortPane/Resources/Strings.fr.resx b/src/PortPane/Resources/Strings.fr.resx index b73b84d..a4f8193 100644 --- a/src/PortPane/Resources/Strings.fr.resx +++ b/src/PortPane/Resources/Strings.fr.resx @@ -4,7 +4,7 @@ PortPane by ShackDesk — UI String Resources 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 ════════════════════════════════════════════════════════════════════════════ LANGUAGE : French (Français) @@ -90,15 +90,15 @@ Settings — PortPane Send anonymous usage data to help improve PortPane Learn more about what is collected - License - Free (MIT) - Commercial + Registration + Standard + Registered About PortPane Version {0} By {0} ({1}) - Licensed under MIT / Commercial + MIT source code + optional paid services View on GitHub Get Support diff --git a/src/PortPane/Resources/Strings.ja.resx b/src/PortPane/Resources/Strings.ja.resx index ed8d227..faa9892 100644 --- a/src/PortPane/Resources/Strings.ja.resx +++ b/src/PortPane/Resources/Strings.ja.resx @@ -4,7 +4,7 @@ PortPane by ShackDesk — UI String Resources 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 ════════════════════════════════════════════════════════════════════════════ LANGUAGE : Japanese (日本語) @@ -90,15 +90,15 @@ Settings — PortPane Send anonymous usage data to help improve PortPane Learn more about what is collected - License - Free (MIT) - Commercial + Registration + Standard + Registered About PortPane Version {0} By {0} ({1}) - Licensed under MIT / Commercial + MIT source code + optional paid services View on GitHub Get Support diff --git a/src/PortPane/Resources/Strings.resx b/src/PortPane/Resources/Strings.resx index 4768a01..66ee833 100644 --- a/src/PortPane/Resources/Strings.resx +++ b/src/PortPane/Resources/Strings.resx @@ -4,7 +4,7 @@ PortPane by ShackDesk — UI String Resources (English — Source File) 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 ════════════════════════════════════════════════════════════════════════════ LANGUAGE : English (United States) @@ -99,9 +99,9 @@ Settings — PortPane Send anonymous usage data to help improve PortPane Learn more about what is collected - License - Free (MIT) - Commercial + Registration + Standard + Registered General @@ -109,7 +109,7 @@ COM Ports Updates Privacy - License + Registration _OK @@ -229,19 +229,19 @@ Reports never include callsign, name, IP address, hostname, or audio content.Alpha Beta In {0} days - Drop .portpane license file here or click to browse - PortPane License (*.portpane)|*.portpane - License files are validated offline. + Drop a .portpane registration file here or click to browse + PortPane Registration (*.portpane)|*.portpane + Registration files are validated offline. No internet connection required. - Get a License - Personal / Commercial - Club / EMCOMM + Registration & Support + Personal registration + Club / EMCOMM registration Support the project - Invalid signature — this license key was not issued by ShackDesk. - Wrong application — this license is not for PortPane. - License expired and is no longer valid. - License file could not be read or is corrupt. - Free (MIT) + Invalid signature — this registration file was not issued by ShackDesk. + Wrong application — this registration file is not for PortPane. + Registration expired and is no longer valid. + Registration file could not be read or is corrupt. + Standard Personal Club EMCOMM @@ -251,7 +251,7 @@ No internet connection required. This will remove all your customizations and saved preferences. The next time PortPane starts it will be as if you are running it for the first time. The following file will be permanently deleted: The following will NOT be affected: - Your license key (useful for future reinstalls): + Your registration file (useful for future reinstalls): Your log files (useful if you need to report a problem after reset): I understand this will permanently delete my settings and restart PortPane Check the box above to enable Reset Settings @@ -277,7 +277,7 @@ Would you like to relaunch PortPane now? About PortPane Version {0} By {0} ({1}) - Licensed under MIT / Commercial + MIT source code + optional paid services View on GitHub Get Support diff --git a/src/PortPane/ViewModels/SettingsViewModel.cs b/src/PortPane/ViewModels/SettingsViewModel.cs index e2eeb35..0d159a4 100644 --- a/src/PortPane/ViewModels/SettingsViewModel.cs +++ b/src/PortPane/ViewModels/SettingsViewModel.cs @@ -767,11 +767,11 @@ public string PendingTelemetryFrequency public string LicenseTierDisplayName => _license.Current.Tier switch { - LicenseTier.Free => "Free (MIT)", + LicenseTier.Free => "Standard", LicenseTier.Personal => "Personal", LicenseTier.Club => "Club", LicenseTier.EmComm => "EMCOMM", - _ => "Free (MIT)" + _ => "Standard" }; public string LicenseeDisplay => _license.Current.Licensee ?? string.Empty; @@ -798,8 +798,8 @@ private async Task BrowseLicenseFileAsync() { var dlg = new OpenFileDialog { - Title = "Select License File", - Filter = "PortPane License|*.portpane", + Title = "Select Registration File", + Filter = "PortPane Registration|*.portpane", CheckFileExists = true, }; @@ -829,11 +829,11 @@ private async Task InstallLicenseFromFileAsync(string filePath) { LicenseInstallErrorText = result.ErrorMessage switch { - "file_unreadable" => "Could not read the license file.", - "wrong_app" => "This license is not for PortPane.", - "invalid_signature" => "License signature is invalid.", - "expired" => "This license has expired.", - _ => $"License error: {result.ErrorMessage}" + "file_unreadable" => "Could not read the registration file.", + "wrong_app" => "This registration file is not for PortPane.", + "invalid_signature" => "Registration signature is invalid.", + "expired" => "This registration has expired.", + _ => $"Registration error: {result.ErrorMessage}" }; } } diff --git a/src/PortPane/Views/AboutDialog.xaml.cs b/src/PortPane/Views/AboutDialog.xaml.cs index 58b80ef..df59518 100644 --- a/src/PortPane/Views/AboutDialog.xaml.cs +++ b/src/PortPane/Views/AboutDialog.xaml.cs @@ -14,10 +14,10 @@ public AboutDialog(ILicenseService license) InitializeComponent(); _license = license; - // Show licensee name for paid tiers + // Show registration holder for paid tiers if (license.Current.Tier != LicenseTier.Free) { - LicenseeBlock.Text = $"Licensed to: {license.Current.Licensee}"; + LicenseeBlock.Text = $"Registered to: {license.Current.Licensee}"; LicenseeBlock.Visibility = Visibility.Visible; SupportBlock.Visibility = Visibility.Collapsed; } diff --git a/src/PortPane/Views/Dialogs/ResetConfirmDialog.xaml b/src/PortPane/Views/Dialogs/ResetConfirmDialog.xaml index 229a699..a8c15b5 100644 --- a/src/PortPane/Views/Dialogs/ResetConfirmDialog.xaml +++ b/src/PortPane/Views/Dialogs/ResetConfirmDialog.xaml @@ -50,12 +50,12 @@ Margin="0,0,0,8" Text="The following will NOT be affected:"/> - + + Text="Your registration file (useful for future reinstalls):"/> + Text="PortPane source code is licensed under MIT. Paid registration, personalization, and support are optional."/> diff --git a/src/PortPane/Views/FirstRunDialog.xaml.cs b/src/PortPane/Views/FirstRunDialog.xaml.cs index a95a3f8..2705c3d 100644 --- a/src/PortPane/Views/FirstRunDialog.xaml.cs +++ b/src/PortPane/Views/FirstRunDialog.xaml.cs @@ -27,7 +27,7 @@ private void GetStarted_Click(object sender, RoutedEventArgs e) } private void License_Click(object sender, RoutedEventArgs e) - => Process.Start(new ProcessStartInfo(BrandingInfo.RepoURL + "/blob/main/LICENSE-MIT.md") + => Process.Start(new ProcessStartInfo(BrandingInfo.SourceLicenseURL) { UseShellExecute = true }); private void Privacy_Click(object sender, RoutedEventArgs e) diff --git a/src/PortPane/Views/SettingsWindow.xaml b/src/PortPane/Views/SettingsWindow.xaml index 8b35ea1..fe1bbe7 100644 --- a/src/PortPane/Views/SettingsWindow.xaml +++ b/src/PortPane/Views/SettingsWindow.xaml @@ -428,12 +428,12 @@ - - + + - + @@ -443,14 +443,14 @@ - - - + - + - -