FreeSimpleGUI LGPL info and Pavlov Distribution

Date: 2025 05-May 07

Great β€” here's a complete setup:


βœ… 1. NOTICE File (for LGPLv3+ compliance with FreeSimpleGUI)

NOTICE

This software includes the FreeSimpleGUI library,
which is licensed under the GNU Lesser General Public License v3 or later (LGPLv3+).

You can find a copy of the LGPLv3 license at:
https://www.gnu.org/licenses/lgpl-3.0.html

FreeSimpleGUI source code is available at:
https://github.com/dfurman/FreeSimpleGUI

No modifications were made to FreeSimpleGUI by this software's author.

If you do make changes to FreeSimpleGUI, update that last line to say:
"Modifications were made to FreeSimpleGUI. Modified source code is available upon request."


βœ… 2. LICENSE File for the Rest of Your Program

If you want your own code to be closed source and require permission to use, you typically use a custom proprietary license. Here's a simple, legally conservative example:

πŸ“„ LICENSE

Copyright Β© [2025] [Your Name or Company]

All rights reserved.

This software is proprietary and confidential. No part of this software may be copied, modified, distributed, or used without the express written permission of the copyright holder.

Permission to use, distribute, or modify this software must be obtained in writing. Unauthorized use is strictly prohibited.

This software is provided "as is" without warranty of any kind, express or implied.

Third-Party Components:
This software includes the FreeSimpleGUI library, which is licensed separately under the GNU Lesser General Public License v3 or later (LGPLv3+). See the NOTICE file for details.

βœ… Summary

Would you like to automate this into a CLI tool that generates these files?

Update:

Got it β€” since you're also using the Autodesk FBX SDK, which comes with its own strict proprietary EULA, we’ll include a clause in both the NOTICE and LICENSE files to reflect that. Autodesk's license does not allow redistribution of the SDK itself and limits usage to applications that interact with Autodesk software.


βœ… Updated NOTICE File

NOTICE

This software includes the following third-party components:

1. **FreeSimpleGUI**  
   Licensed under the GNU Lesser General Public License v3 or later (LGPLv3+).  
   License: https://www.gnu.org/licenses/lgpl-3.0.html  
   Source: https://github.com/dfurman/FreeSimpleGUI  
   No modifications were made to FreeSimpleGUI.

2. **Autodesk FBX SDK**  
   Provided under the Autodesk FBX Software Development Kit License Agreement.  
   The FBX SDK is subject to its own terms and conditions, which restrict redistribution.  
   For more information, see: https://www.autodesk.com/developer-network/platform-technologies/fbx-sdk-2020-0  
   This software uses the FBX SDK solely for importing/exporting 3D assets in compliance with Autodesk's terms.

βœ… Updated LICENSE File (Proprietary)

Copyright Β© [2025] [Your Name or Company]

All rights reserved.

This software is proprietary and confidential. No part of this software may be copied, modified, distributed, or used without the express written permission of the copyright holder.

Permission to use, distribute, or modify this software must be obtained in writing. Unauthorized use is strictly prohibited.

This software is provided "as is" without warranty of any kind, express or implied.

---

Third-Party Components:

1. **FreeSimpleGUI**  
   This software includes FreeSimpleGUI, which is licensed separately under the GNU Lesser General Public License v3 or later (LGPLv3+).  
   See the NOTICE file or https://www.gnu.org/licenses/lgpl-3.0.html for license terms.

2. **Autodesk FBX SDK**  
   This software uses the Autodesk FBX SDK, which is provided under the Autodesk FBX Software Development Kit License Agreement.  
   The SDK is not redistributed with this software and must be obtained directly from Autodesk.  
   Use of this SDK is governed by Autodesk’s terms: https://www.autodesk.com/developer-network/platform-technologies/fbx-sdk-2020-0

The inclusion of these components does not alter the licensing terms of the proprietary portions of this software.

βœ… Final Notes:

Would you like these generated automatically into files in your project structure (e.g. with a poetry run gen_license command)?

FBX SDK exposure

Excellent follow-up β€” this gets into the nuances of Autodesk's FBX SDK license, which is very restrictive but has some wiggle room depending on how you use it.


βœ… What’s Actually True About the Autodesk FBX SDK License?

❌ You Cannot Freely Redistribute the FBX SDK (binaries or headers)


βœ… But You Can Use the SDK in Your Software (With Conditions)

βœ… You Can:

❗ You Cannot:


βœ… So in Your Case:

β€œWhat if the software does not expose the FBX SDK, but just uses it to generate export files?”

Yes β€” that's perfectly acceptable. You’re using the SDK as a tool, not exposing it or redistributing it.

You can:

⚠️ But:


βœ… In Summary:

Scenario Allowed? Notes
Build software using FBX SDK βœ… As long as you don't redistribute SDK files
Bundle FBX SDK DLLs or headers ❌ Violates EULA
Use FBX SDK to export .fbx internally βœ… Fine, as long as it’s not externally exposed
Expose FBX API functionality to plugins or scripts ⚠️ Risky β€” could be interpreted as indirect redistribution

Would you like a sample installer approach or user prompt that checks for the FBX SDK and guides users to install it if missing?

Clayton 4:

the fbx sdk is rolled out in my python project using poetry and pyproject.toml to reference gitlab.irna.fr/api/v4/projects/18692/

My software is packaged into an exe (both setup and portable) using pyinstaller, which obfuscates everything except for configuration files

ChatGPT 4:

Thanks for the detailed setup β€” your case is nuanced, but here’s a clear breakdown of how your FBX SDK integration and distribution via PyInstaller and Poetry aligns with Autodesk’s license, and what steps you should take to remain compliant.


βœ… Summary of Your Setup


βœ… What You're Doing Right

⚠️ Potential Risks

  1. Redistribution of compiled FBX binaries inside your EXE β€” PyInstaller may still bundle .dll or .so files from the SDK.

  2. If the FBX SDK was not statically or completely bundled, or if the GitLab package replicates Autodesk binaries or headers, you are technically redistributing Autodesk binaries.

  3. If Autodesk audits your setup and sees unlicensed distribution (even via a compiled EXE), you could be non-compliant.


βœ… How to Stay Safe (and Professional)

1. Add a NOTICE Clause

Update your NOTICE file with this stronger disclaimer:

3. **Autodesk FBX SDK**
This software uses the Autodesk FBX SDK internally for FBX file import/export. The SDK is not publicly exposed through this software's API or UI.

The FBX SDK is licensed under the Autodesk FBX Software Development Kit License Agreement. For terms, visit:
https://www.autodesk.com/developer-network/platform-technologies/fbx-sdk-2020-0

Any required components of the FBX SDK are used internally and only as permitted under the SDK's licensing terms.

2. Document the SDK Source (If Using a Private Wrapper)

Make clear that you’re not packaging Autodesk binaries separately, but relying on a custom-built internal dependency. You might add to pyproject.toml metadata:

[tool.poetry.dependencies]
fbx-wrapper = { git = "https://gitlab.irna.fr/api/v4/projects/18692/", rev = "commit_or_tag" }

And document in your README or LICENSE:

The fbx-wrapper dependency is a private, internal Python binding to Autodesk’s FBX SDK. It is used strictly under Autodesk’s SDK license. The FBX SDK itself is not redistributed independently.


3. Optional: Include a Runtime SDK Check

To stay extra compliant, you could:


βœ… Conclusion

You're probably compliant given:

Still, add strong license notes in NOTICE and LICENSE, and consider keeping your EXE's FBX functionality modular in case you ever need to disable or separate it later.

Would you like a PyInstaller hook to isolate the FBX SDK parts and optionally disable them at runtime?

Clayton 5:

I use inno installer to convert my pyinstaller portable exe into a setup exe

How can i now make a msix which can be submitted to the app store?

Chat GPT 5:

To convert your Python-based application (currently a PyInstaller-built EXE wrapped in an Inno Setup installer) into an MSIX package suitable for submission to the Microsoft Store, you’ll need to follow these steps:


βœ… Overview

Step Task
1️⃣ Prepare your PyInstaller EXE for MSIX compatibility
2️⃣ Create a Windows Application Manifest
3️⃣ Use the MSIX Packaging Tool to wrap the app
4️⃣ Sign the MSIX with a trusted certificate
5️⃣ Submit to Microsoft Store (via Partner Center)

πŸ”§ 1. Prepare Your EXE

Make sure your PyInstaller app behaves like a standard Windows app:

If your app depends on writing to system folders, registry, or Program Files, refactor to use AppData or LocalAppData instead.


πŸ“ 2. Create an App Manifest

Create a file like AppxManifest.xml. Here's a simple example:

<?xml version="1.0" encoding="utf-8"?>
<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  IgnorableNamespaces="uap">

  <Identity Name="com.yourcompany.myapp"
            Publisher="CN=Your Company, O=Your Company, C=US"
            Version="1.0.0.0" />

  <Properties>
    <DisplayName>MyApp</DisplayName>
    <PublisherDisplayName>Your Company</PublisherDisplayName>
    <Logo>Assets\StoreLogo.png</Logo>
  </Properties>

  <Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.22000.0" />
  </Dependencies>

  <Resources>
    <Resource Language="en-us" />
  </Resources>

  <Applications>
    <Application Id="MyApp"
                 Executable="myapp.exe"
                 EntryPoint="Windows.FullTrustApplication">
      <uap:VisualElements DisplayName="MyApp"
                          Description="3D visualization software"
                          Square150x150Logo="Assets\Logo.png"
                          Square44x44Logo="Assets\SmallLogo.png"
                          BackgroundColor="transparent"/>
    </Application>
  </Applications>
</Package>

🧰 3. Use the MSIX Packaging Tool (GUI or CLI)

πŸ”½ Install

Download from the Microsoft Store:
MSIX Packaging Tool
https://apps.microsoft.com/store/detail/msix-packaging-tool/9n5lw3jbcxkf

🧱 Use It

  1. Select Application Package > Create package on this computer

  2. Point it to your folder (EXE and all resources)

  3. Add your AppxManifest.xml

  4. It will bundle everything and create an .msix file

πŸ§ͺ Alternatively, use PowerShell:

MakeAppx pack /d MyAppFolder /p MyApp.msix

πŸ” 4. Sign the MSIX

MSIX apps must be digitally signed:

Options:

Example (test only):

New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=MyApp" -CertStoreLocation "Cert:\LocalMachine\My"

Then:

SignTool sign /fd SHA256 /a /f mycert.pfx /p password MyApp.msix

πŸ“¦ 5. Submit to the Microsoft Store

  1. Register at the Microsoft Partner Center
    https://partner.microsoft.com/

  2. Create an App submission

  3. Upload your .msix file

  4. Fill in metadata, screenshots, pricing, etc.

  5. Submit for certification


βœ… Notes Specific to Python Projects


Would you like a full example with the directory structure and build script for packaging into .msix from your PyInstaller output?

Clayton 6:

πŸ” 4. Sign the MSIX
MSIX apps must be digitally signed:

Options:
Use a certificate from a trusted CA (required for Store submission)

For this step, what is the typical cost? How long does it last?

ChatGPT 6:

Great question β€” here's a breakdown of the cost, validity, and options for getting a code signing certificate from a trusted Certificate Authority (CA), which is required for Microsoft Store MSIX submission:


πŸ” Code Signing Certificate β€” Overview

Provider Type Cost (USD) Validity Notes
DigiCert OV ~$500–700/year 1–3 years High-trust, widely accepted
Sectigo (formerly Comodo) OV ~$70–120/year 1–3 years Affordable and common
GoDaddy OV ~$200–300/year 1–3 years Easy for domain owners
GlobalSign OV ~$350–450/year 1–2 years Enterprise-grade
SSL.com OV/EV ~$80–400/year 1–3 years Offers EV for SmartScreen reputation

πŸ’‘ OV = Organization Validated, EV = Extended Validation
For the Microsoft Store, OV is enough. EV helps with SmartScreen warnings for sideloaded apps.


⏳ Certificate Validity


βœ… Required for Microsoft Store?

Yes. Microsoft requires:


πŸ“Œ Note: SmartScreen Reputation

If you distribute your app outside the Microsoft Store (via direct download), SmartScreen may block it even if signed. EV certificates bypass SmartScreen faster, but store apps are trusted automatically.


Would you like recommendations for where to buy a low-cost OV certificate that works for MSIX submissions?

Clayton 8:

What is the best way to provide a superuser shell within a gui application? A separate window can launch?

Chat GPT 8:

To provide a superuser shell (i.e., an interactive terminal with elevated privileges) within a GUI application, while keeping it separate but integrated, the best approach depends on your platform (Windows, macOS, Linux) β€” but here’s a general cross-platform strategy that’s both user-friendly and secure:


βœ… Best-Practice Design

Launch a separate terminal window from your GUI that:

  1. Opens an elevated shell (sudo, runas, etc.)

  2. Runs with its own privileges

  3. Can return exit code or output to the GUI (optional)


πŸͺŸ On Windows

You can use runas or powershell Start-Process:

βœ… Example (Python)

import subprocess

def launch_admin_shell():
    subprocess.run([
        "powershell", "-Command",
        "Start-Process powershell -Verb runAs"
    ])

This opens a new PowerShell window as Administrator.


🐧 On Linux/macOS

You can launch gnome-terminal, xterm, or similar with sudo -s or su.

βœ… Example (Python)

import subprocess

def launch_root_shell():
    subprocess.run(["x-terminal-emulator", "-e", "sudo -s"])

Replace x-terminal-emulator with gnome-terminal, konsole, or xterm as needed.


πŸ” Security Tips


πŸ’‘ UX Tips


Would you like a working cross-platform Python function that tries to detect and launch the right terminal with elevated rights based on OS?

Clayton 9:

Can a "Open Admin Shell" button launch a special instance of powershell or cmd or windows console host?

ChatGPT 9:

Yes, an "Open Admin Shell" button in your GUI can absolutely launch a special instance of:

…with admin privileges and optional environment variables or working directory.


βœ… Example: Launch PowerShell as Administrator from Python

import subprocess

def open_admin_powershell():
    subprocess.run([
        "powershell", "-Command",
        "Start-Process powershell -Verb runAs"
    ])

This will:


πŸͺŸ Alternative: CMD as Admin

def open_admin_cmd():
    subprocess.run([
        "powershell", "-Command",
        "Start-Process cmd -Verb runAs"
    ])

πŸ§ͺ Customize Environment or Start Directory

You can launch with:

In Python:

def open_admin_shell_with_env():
    subprocess.run([
        "powershell", "-Command",
        "Start-Process powershell -Verb runAs -ArgumentList '-NoExit','-Command','cd C:\\MyApp; $env:MYVAR=42'"
    ])

🧩 Can I Launch Windows Terminal?

Yes β€” if the user has Windows Terminal installed:

def open_admin_windows_terminal():
    subprocess.run([
        "powershell", "-Command",
        "Start-Process wt -Verb runAs"
    ])

You can also pass it profiles, commands, directories, etc.


Would you like to include a dropdown or settings menu in your GUI for selecting which shell to launch (PowerShell, CMD, etc.)?

Clayton 10:

How is this different from "Don't bundle a hidden shell in the main GUI β€” it's dangerous and confusing." ?

ChatGPT 10:

Great follow-up β€” here’s the clear distinction between launching an admin shell from a button and the "dangerous hidden shell" anti-pattern:


βœ… Safe Approach (What You're Doing)

πŸ›‘οΈ Security posture: High β€” user consents, system enforces access, no deception.


🚫 Dangerous Anti-Pattern

⚠️ This is what’s meant by:

β€œDon’t bundle a hidden shell in the main GUI β€” it’s dangerous and confusing.”

Especially bad: when the app runs with admin privileges just to allow GUI access to system tasks, and then pipes everything through that process.


πŸ‘οΈ Summary

Method User-Visible Requires UAC Scope Controlled Security Risk
Button opens PowerShell (Admin) βœ… Yes βœ… Yes βœ… High πŸ” Low
Hidden elevated shell in background ❌ No ❌ Possibly ❌ Unclear ⚠️ High

Would you like help creating a self-contained function that launches a chosen shell with elevated rights, optionally passing some context?