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..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 : 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. @@ -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 dd71a01..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 : 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 diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index dd0b34e..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 : 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 diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml index 230ed39..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 : 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. diff --git a/.github/workflows/json-validate.yml b/.github/workflows/json-validate.yml index 3ed2f9d..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 : 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. diff --git a/.github/workflows/markdown-lint.yml b/.github/workflows/markdown-lint.yml index 923d99c..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 : 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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 3521cd0..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 : 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 @@ -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,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) diff --git a/CLA.md b/CLA.md index f1223a1..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 (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. --- @@ -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 diff --git a/CODE_SIGNING_POLICY.md b/CODE_SIGNING_POLICY.md new file mode 100644 index 0000000..cb733ac --- /dev/null +++ b/CODE_SIGNING_POLICY.md @@ -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. diff --git a/LEGAL.md b/LEGAL.md index b8d80ad..e375ae6 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 builds and services:** see [OFFICIAL_BUILDS_AND_SERVICES.md](OFFICIAL_BUILDS_AND_SERVICES.md). --- @@ -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` diff --git a/LICENSE-COMMERCIAL.md b/LICENSE-COMMERCIAL.md deleted file mode 100644 index db25733..0000000 --- a/LICENSE-COMMERCIAL.md +++ /dev/null @@ -1,36 +0,0 @@ -# Commercial License — PortPane by ShackDesk - -Copyright © 2024–2026 Mark McDow (N4TEK), My Computer Guru LLC. All rights reserved. - -## 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: - -- 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 - -## Conditions - -1. **Attribution must be preserved.** The `Attribution.cs` fingerprint embedded - in the binary must remain intact in all distributions. - -2. **License key required.** Commercial use requires a valid license key issued - by My Computer Guru LLC. - -3. **No sublicensing.** You may not sublicense PortPane or its source code to - third parties. - -4. **No competing product.** You may not use PortPane's source code to build - a product that directly competes with PortPane. - -## To Obtain a Commercial License - -Contact: [shackdesk.com](https://shackdesk.com) - -## Disclaimer of Warranties - -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. 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..43606a6 --- /dev/null +++ b/LICENSE-MIT.md @@ -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. 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 e82021f..6dadbc3 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,14 @@ If PortPane saves you time, consider leaving a star on GitHub. ## License -**Dual licensed:** +PortPane source code is licensed under MIT. Official ShackDesk builds, optional +registration/personalization, and support are offered under separate +commercial 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). +- **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 5099144..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 : GPL v3 / Commercial (see LICENSE-GPL.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 1af95b1..b5b1059 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} @@ -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-GPL.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 4dd186e..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 (GPL 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 @@ -25,9 +23,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 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 077d705..25c2af4 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,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 = "GPL v3 / 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 5099144..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 : GPL v3 / Commercial (see LICENSE-GPL.md)", + "_comment_5": " License : MIT source code (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..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 : GPL v3 / Commercial (see LICENSE-GPL.md, LICENSE-COMMERCIAL.md) + License : MIT source code + official builds/services ════════════════════════════════════════════════════════════════════════════ 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 + 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 8f21cd5..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 : GPL v3 / Commercial (see LICENSE-GPL.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 (GPL v3) - Commercial + Registration + Standard + Registered About PortPane Version {0} By {0} ({1}) - Licensed under GPL v3 / 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 8e57435..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 : GPL v3 / Commercial (see LICENSE-GPL.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 (GPL v3) - Commercial + Registration + Standard + Registered About PortPane Version {0} By {0} ({1}) - Licensed under GPL v3 / 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 d9cffc0..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 : GPL v3 / Commercial (see LICENSE-GPL.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 (GPL v3) - Commercial + Registration + Standard + Registered About PortPane Version {0} By {0} ({1}) - Licensed under GPL v3 / 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 1e45336..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 : GPL v3 / Commercial (see LICENSE-GPL.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 (GPL v3) - 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 (GPL v3) + 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 GPL v3 / Commercial + MIT source code + optional paid services 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..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 (GPL v3)", + LicenseTier.Free => "Standard", LicenseTier.Personal => "Personal", LicenseTier.Club => "Club", LicenseTier.EmComm => "EMCOMM", - _ => "Free (GPL v3)" + _ => "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 eb39152..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-GPL.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 @@ - - - + - + - -