# License Spektra ships as two separate programs under two different licenses. This file is the authoritative map of which paths are covered by which license. If you only read one licensing file in this repo, read this one. ## The App — proprietary **© 2026 Squaresmile Media. All rights reserved.** The desktop application — the Tauri shell, the browser frontend, and the branding/assets that make up the packaged `.app`/`.dmg`/Windows installer UI — is commercial, proprietary software. It is licensed to end users under the terms of [EULA.md](EULA.md), not under an open-source license. Proprietary paths: - `src-tauri/` (Rust shell: `Cargo.toml`, `tauri.conf.json`, capabilities) - `index.html` - `js/` (except the vendored `js/vendor/jspdf.umd.min.js`, whose own MIT header stays verbatim — see [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md)) - `css/` - `advisor.js`, `analysis.js`, `export.js` - `favicon.svg` and other branding assets Do not add an open-source license header to any file under these paths. ## The Engine — GPL-3.0-or-later The Python engine — the RF scanning/DSP backend that is frozen into the PyInstaller sidecar and shipped inside the App bundle — is free software licensed under the **GNU General Public License, version 3 or later** (GPL-3.0-or-later). The full, verbatim license text is at [licenses/GPL-3.0.txt](licenses/GPL-3.0.txt). This licensing choice is not a preference — it is a requirement. The engine links `pyrtlsdr` (GPL-3.0-or-later) and, at runtime, loads GPL-2.0-or-later native libraries (`librtlsdr`, `libhackrf`, `libairspy`). Distributing a program that links GPL code means the combined work must itself be GPL-licensed. The exact 24 GPL-3.0-or-later engine files (each carries its own SPDX header, see below): **Root (8):** `scanner.py`, `transport.py`, `transport_audio.py`, `transport_dsp.py`, `transport_http.py`, `transport_waterfall.py`, `demod.py`, `synthetic_sdr.py` **`sources/` (15):** `sources/__init__.py`, `sources/airspy_source.py`, `sources/base.py`, `sources/demo_source.py`, `sources/device_constants.py`, `sources/hackrf_source.py`, `sources/rfexplorer_source.py`, `sources/rtlsdr_source.py`, `sources/sdrplay_source.py`, `sources/serial_source.py`, `sources/soapy_enumerate.py`, `sources/soapy_source.py`, `sources/tinysa_detect.py`, `sources/tinysa_source.py`, `sources/tinysa_ultra_source.py` **`pyinstaller-hooks/` (1):** `pyinstaller-hooks/rth_soapy_plugin_path.py` (a PyInstaller runtime hook frozen into the sidecar to fix the SoapySDR plugin search path) Nothing in [EULA.md](EULA.md) does or can limit anyone's rights under the GPL-3.0-or-later for these 24 files — the EULA governs the App only, and the GPL carve-out clause in EULA.md says so explicitly. ## The boundary between them The App and the Engine are separate programs. The Tauri shell spawns the Engine as a subprocess (the PyInstaller sidecar) and talks to it exclusively over local network sockets — HTTP on `127.0.0.1:38080` (walking to `:38090` if occupied) and WebSocket on `127.0.0.1:38765`. There is no shared process memory, no linked library boundary, and no compiled-in coupling between the two programs; they communicate at arm's length via a local network protocol, the same way a browser talks to any local web server. ## Third-party components Everything else bundled into the shipped distributions — third-party libraries, tools, and installer resources not written for this project — is inventoried with its own license in [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md), including the written source offer required for the GPL/LGPL components.