EasySpotter application

EasySpotter Proprietary Freeware License
Version 1.0, 3 October 2026

Copyright (c) 2026 W2JKT Software LLC. All rights reserved.

1. Scope and ownership

This license applies to the independently authored EasySpotter application
in executable form and its accompanying documentation and configuration
examples (the "Software"). W2JKT Software LLC (the "Licensor") retains ownership
of the Software. Third-party components are governed by their own licenses,
as described in section 4 and THIRD-PARTY-NOTICES.md.

The application source code is private and is not supplied under this license.
This license grants no right to receive, publish, or redistribute that private
source code and imposes no obligation on the Licensor to provide it. Rights
required by third-party licenses or applicable law remain unaffected.

2. Free use

The Licensor grants you a nonexclusive, worldwide, royalty-free license to
install, copy, and use the Software for personal, educational, nonprofit, and
commercial purposes. You may use it on multiple computers and make backup
copies. You may edit the configuration examples and your configuration files.
The application license does not impose restrictions on your received data,
audio recordings, decode output, or other data produced using the Software.

3. Redistribution and reserved rights

You may redistribute complete, unmodified binary packages of the Software
without charging a license fee for the Software, provided that you include
this license and all accompanying copyright notices, third-party notices,
license texts, and documentation. You must not misrepresent the origin of the
Software or imply endorsement by the Licensor. You may charge separately for
your own services, provided you do not imply that the Licensor supplies or
endorses those services.

Except as permitted by section 4, applicable law, or separate written permission
from the Licensor, you may not distribute modified versions of the application,
sell or sublicense the application, or remove its copyright or license notices.
No rights to the Licensor's names, trademarks, or logos are granted beyond
accurately identifying the Software and reproducing its included notices.
All rights not expressly granted are reserved.

4. Third-party rights and private modifications

This license does not replace, restrict, or relicense any third-party component.
Where this license conflicts with a third-party license, that third-party
license controls for the affected component and its required permissions.
Preserve the notices and conditions applicable to those components.

The Software uses system copies of LGPL-covered shared libraries, including
PulseAudio client libraries, GTK/GLib GUI libraries, and glibc. You may replace
those libraries with interface-compatible modified versions. You may modify the Software for your
own use and reverse engineer it to debug those modifications, including as
required by section 6 of LGPL version 2.1. These permissions do not require
delivery of the private application source code and do not grant permission
to redistribute modified application binaries. Additional rights granted by
applicable law or third-party licenses are not restricted by this license.

The LGPL version 2.1 text accompanies the Software as LGPL-2.1. Embedded
PocketFFT and the separately installed libsamplerate library retain their BSD
licenses and notices. WSJT-X and the SDRplay hardware API are separately
installed programs or components governed by their respective licenses; this
license does not grant rights to redistribute their binaries, SDKs, or source.

5. Warranty disclaimer and limitation of liability

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND
NONINFRINGEMENT. THE LICENSOR DOES NOT WARRANT UNINTERRUPTED OR ERROR-FREE
OPERATION AND HAS NO OBLIGATION TO PROVIDE SUPPORT, UPDATES, OR MAINTENANCE.

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSOR SHALL NOT BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES, INCLUDING LOSS OF DATA, PROFITS, OR USE, ARISING FROM
THE SOFTWARE OR ITS USE, WHETHER IN CONTRACT, TORT, OR OTHERWISE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THIS SECTION DOES NOT EXCLUDE
LIABILITY THAT CANNOT LAWFULLY BE EXCLUDED.

6. Compliance and severability

By exercising the permissions granted by this license, you agree to its terms.
If you fail to comply, the permissions granted by this license terminate until
the breach is cured. This does not terminate rights independently granted by
third-party licenses or applicable law. If a provision is unenforceable, the
remaining provisions remain in effect to the extent permitted by law.


Third-party notices and licenses follow. The SDRplay vendor SDK/driver and
WSJT-X executable are separately installed, not bundled in this artifact.
The LGPL version 2.1 license is included in this directory as LGPL-2.1.
On Debian/Ubuntu GPL version 3 is available in
/usr/share/common-licenses/GPL-3. Runtime-library packages supply
their full notices and exceptions under /usr/share/doc/.

# Third-party notices

The independent EasySpotter application is proprietary freeware under the
accompanying LICENSE. Its source remains private. That license does not replace
or restrict the third-party licenses and rights described here.

## PocketFFT (embedded)

The channelizer uses the BSD-3-Clause PocketFFT header pinned at revision
c90e55b3d529f8efa40ed01a20de22405f45fc65. Source and provenance are in
third_party/pocketfft. The complete header notice follows:

```text
This file is part of pocketfft.

Copyright (C) 2010-2024 Max-Planck-Society
Copyright (C) 2019-2020 Peter Bell

For the odd-sized DCT-IV transforms:
  Copyright (C) 2003, 2007-14 Matteo Frigo
  Copyright (C) 2003, 2007-14 Massachusetts Institute of Technology

For the prev_good_size search:
  Copyright (C) 2024 Tan Ping Liang, Peter Bell

For the safeguards against integer overflow in good_size search:
  Copyright (C) 2024 Cris Luengo

Authors: Martin Reinecke, Peter Bell

All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
  list of conditions and the following disclaimer in the documentation and/or
  other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its contributors may
  be used to endorse or promote products derived from this software without
  specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```

## cpp-httplib (embedded, companion spot server only)

The optional companion spot server (`easyspotter-spot-server`, built only with
`-DENABLE_SPOT_SERVER=ON`) embeds the MIT-licensed single-header HTTP/HTTPS
library cpp-httplib, pinned at tag v0.15.3, in `third_party/httplib`. It is not
part of the receiver, decoder or GUI. The header notice follows:

```text
Copyright (c) 2024 Yuji Hirose. All rights reserved.

MIT License

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.
```

The spot server also dynamically links OpenSSL (libssl/libcrypto) for TLS.
OpenSSL 3.x is Apache-2.0. Its source and notice are supplied by the system
OpenSSL package; no OpenSSL source is embedded in this repository.

## libsamplerate (shared library)

The build requires version 0.1.9 or newer, whose library is BSD-2-Clause.
The source distribution's build scripts can have other licenses; they are not
copied into this project. The library notice follows:

```text
Copyright (c) 2012-2016, Erik de Castro Lopo <erikd@mega-nerd.com>
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```

## libusb (shared library, RX-888 backend and RTL-SDR listing; header vendored)

The RTL-SDR listing loads it the same way (to list devices only). The bundled
rtl_tcp links it: dynamically on Linux, statically (libusb 1.0.30 from MSYS2,
whose source is listed in `licenses\msys2\SOURCES.txt`) in `rtl_tcp.exe`.
The optional RX-888 MKII backend (`-DENABLE_RX888=ON`) speaks USB through
libusb-1.0, which is LGPL-2.1-or-later. The application does **not** link libusb
at build time: it loads the system shared library `libusb-1.0.so.0` dynamically
at run time, so the library may be replaced freely. Only libusb's public API
header (`libusb.h`, v1.0.27) is vendored under `third_party/libusb/` so the
backend can be compiled without the `libusb-1.0-0-dev` package; its copyright and
license notice are retained in that file. The FX3 upload protocol and image
format are re-implemented from public Cypress/firmware interface facts, not
copied from GPL host code (ka9q-radio, fxload/ezusb).

## libdatachannel and its bundled dependencies (statically linked into easysdr)

EasySDR's direct listener connections (EasySDR 0.27, `easysdr/peer.hpp`) use
[libdatachannel](https://github.com/paullouisageneau/libdatachannel) v0.24.5, built in statically with
its WebSocket and media parts switched off, together with the libraries it bundles as submodules:

- libdatachannel, Copyright (c) 2019-2024 Paul-Louis Ageneau — Mozilla Public License 2.0
- libjuice (ICE/STUN), Copyright (c) 2020 Paul-Louis Ageneau — Mozilla Public License 2.0
- usrsctp (SCTP), Copyright (c) 2015 Randall Stewart, Michael Tuexen and others — BSD 3-Clause
- plog, Copyright (c) 2022 Sergey Podobry — MIT
- nlohmann json, Copyright (c) 2013-2022 Niels Lohmann — MIT

All are used unmodified. The MPL-2.0 covers those two libraries' own files only; their source is the
pinned tree `packaging/fetch_libdatachannel.py` fetches (commits recorded there), and their licence
texts are in the packages' documentation folder with this file. OpenSSL provides DTLS, as for the rest
of the service. The WebRTC connection itself is end-to-end encrypted (DTLS-SRTP style key agreement over
DTLS); the STUN server (stun:w2jkt.com) sees only each end's public address.

## RX-888 firmware (SDDC_FX3.img, MIT; bundled unchanged)

The EasySpotter and EasySDR packages carry the RX-888's firmware image, loaded
into the receiver's FX3 controller at power-up, at
`/usr/share/easyspotter/firmware/` and `/usr/share/easysdr/firmware/`. It is a
separate program distributed unchanged: the SDDC firmware v1.0.3 "20 second
watchdog" build from ka9q-radio (built from fventuri/SDDC_FX3, derived from
ik1xpv/ExtIO_sddc), MIT License, Copyright (c) 2017-2020 Oscar Steila, with
Cypress EZ-USB FX3 SDK library code in binary form for use with Cypress FX3
devices. Its source, checksum and full license text are in the `NOTICE` file
beside it (`packaging/rx888-firmware-NOTICE.txt`).

## Other dynamically linked runtime libraries

The graphical launcher uses GTK 3, GDK, GLib/GObject/GIO, Pango, GdkPixbuf,
ATK and their system runtime dependencies as dynamically linked libraries.
These GNOME libraries are LGPL-2.1-or-later; Cairo is available under LGPL-2.1
or MPL-1.1. Other system dependencies retain their permissive or LGPL licenses.
The GTK project explicitly permits proprietary applications:
https://www.gtk.org/ . No toolkit implementation is embedded or bundled in the
application package. The distribution installs the shared libraries and supplies
their full notices and license texts. Users can replace interface-compatible
libraries; the application does not perform library signature or checksum checks.

The launcher invokes separately installed systemctl, journalctl and pkexec
utilities through ordinary process arguments. Their implementation code is
not incorporated into the application or shipped in its package.

PulseAudio client libraries and glibc are LGPL-2.1-or-later. Stock GCC's
libstdc++ and libgcc use GPL-3.0-or-later with the GCC Runtime Library Exception.
Their system packages supply their copyright and license documents. Dynamic
replacement of these shared libraries must remain possible. These notices do
not authorize bundling libraries without their applicable source and notice
obligations; inventory the exact dependencies for each release artifact.

The application distribution also includes the unmodified LGPL version 2.1
text as LGPL-2.1 beside LICENSE. The application terms allow private modification
and reverse engineering to debug those modifications, as required by LGPL 2.1
section 6, and replacement of interface-compatible shared libraries.

## External receiver and decoder programs

RTL-SDR access uses an rtl_tcp server over its network protocol (an independent
client implementation, `src/rtl_tcp.cpp`). rtl_tcp/librtlsdr (Osmocom rtl-sdr) are
GPL-2.0-or-later and are never linked into, loaded by or included in this
application. The Debian and Windows packages include an `rtl_tcp` binary as an
aggregate: a separate program, built by `packaging/rtl_sdr.py` from the pinned
rtl-sdr 2.0.3 release (SHA-256 checked) with the two small patches in
`packaging/rtl-sdr/` ("-d <index>" opens only that dongle; "-E" ends it when its input ends), which
the application starts on a loopback port and talks to only over TCP. Its
GPL-2.0 license (`packaging/rtl-sdr/COPYING`), the patches, the build commands and
a written offer of corresponding source travel with the binary
(`/usr/share/doc/easyspotter/rtl-sdr/`, `licenses\rtl-sdr\` on Windows); the
source is offered at https://w2jkt.com/rtl-sdr-source (RELEASE TODO: publish
before public release). WSJT-X's jt9 and wsprd are GPL-3.0 and is invoked as an
independently installed executable using WAV files, CLI arguments, and text
output. No RTL-SDR or WSJT-X implementation source is included here, other than
those patches. The RTL-SDR listing (`src/rtl_usb.cpp`) keeps only librtlsdr's list
of USB vendor and product IDs, which are facts about the hardware.

JS8 decoding uses a separate `js8-wav` executable over WAV files and text.
The helper sources in `extras/js8-decoder/` are GPL-3.0-only, with their
complete license in that directory; this is an explicit exception to the root
application's proprietary source terms. The helper links the separately
obtained GPL-3.0 gfsk8-modem-clean project, including its KissFFT dependency.

The `js8-wav` binary is included in the tuner Debian package as an aggregate
(GPL-3.0 section 5): it is a separate program that communicates with the
proprietary tuner only through WAV audio and decoded text over a process
boundary, so the tuner is not a derivative of it and remains unaffected by the
GPL. Its GPL-3.0 license and a written offer of corresponding source travel
with the binary under `/usr/share/doc/js8-wav/`. Complete corresponding source
for `js8-wav`, the linked gfsk8-modem-clean, and its KissFFT dependency is
offered at https://w2jkt.com/js8-wav-source (RELEASE TODO: publish before public
release). Reference: https://github.com/jfrancis42/gfsk8-modem-clean .

JTTY and MSK144 decoding use the separate `jtty-rx` and `msk144-rx` executables (one project, built from
unmodified WSJT-X 3.3.0-beta2 JTTY and MSK144 decoder files, (C) Joe Taylor K1JT and the WSJT
Development Group, GPL-3.0). The tuner streams 12 kHz PCM audio to it and reads decoded
text lines back over a process boundary; no WSJT-X source is in this repository. The
binaries are included in the tuner Debian package as an aggregate (GPL-3.0 section 5), with
its GPL-3.0 license and a written offer of corresponding source under
`/usr/share/doc/jtty-rx/`; the source is offered at https://w2jkt.com/jtty-rx-source
(RELEASE TODO: publish before public release).

The optional independent `jt9-cuda` helper in `extras/jt9-cuda-decoder/` is
GPL-3.0-or-later source, with its complete license in that directory; it is
another explicit exception to the root application's proprietary source terms.
It builds separately against externally obtained WSJT-X GPLv3 source and
generates a modified OSD recovery routine. Its separate binary package is
accompanied by the exact helper and complete WSJT-X corresponding source.
Neither that binary nor NVIDIA runtime/SDK/driver files are included in the
tuner package. NVIDIA runtime libraries remain separately installed build and
runtime dependencies. Source archive provenance and SHA256 verification are
documented in the helper. Reference:
https://archive.ubuntu.com/ubuntu/pool/universe/w/wsjtx/ .

The SDRplay API is a separately installed proprietary vendor component loaded
at runtime. Its SDK and driver are not included in this repository. Vendor
redistribution terms must be checked before distributing SDK/driver files.

## SQLite (shared library)

The CLI, launcher and service helper dynamically use the system SQLite library
for optional decoded-count history. SQLite is in the public domain. No SQLite
code or library binary is bundled in this package. Its use does not impose an
application-source publication condition. SQLite's public-domain dedication and
licensing information are published at https://www.sqlite.org/copyright.html.

## W2JKT Spotter Android app dependencies

The companion Android app in `android/` bundles the following third-party
libraries into its APK at build time. All are Apache-2.0 licensed. None are
modified; sources are available from their respective project repositories and
Maven Central. The app itself is proprietary freeware under the accompanying
LICENSE.

- AndroidX (Core, Lifecycle, Activity, Compose UI/Material3, DataStore) —
  Apache-2.0, © The Android Open Source Project.
- Jetpack Compose runtime and Material 3 — Apache-2.0, © The Android Open
  Source Project.
- Kotlin standard library, kotlinx.coroutines, kotlinx.serialization —
  Apache-2.0, © JetBrains s.r.o. and contributors.
- OkHttp — Apache-2.0, © Square, Inc.

The app contains no Google Play Services, analytics, advertising or tracking
code. It makes outbound HTTPS requests only to the server address the user
configures.

## EasySDR Android app dependencies

The EasySDR listening app in `easysdr/android/` bundles the same kind of libraries, all Apache-2.0
and unmodified: AndroidX (Core, Lifecycle, Activity, Compose UI and Material 3), the Kotlin standard
library, kotlinx.coroutines and kotlinx.serialization (© JetBrains s.r.o. and contributors), and
OkHttp (© Square, Inc.). Opus audio is decoded by the phone's own system decoder; the app bundles no
codec. It contains no Google Play Services, analytics, advertising or tracking code, and connects only
to the w2jkt.com station list and the stations the user opens.

## External WSPR decoding and uploads

WSPR uses the separately installed WSJT-X `wsprd` executable over ordinary
PCM WAV files and stdout text. No WSJT-X modem code is linked, copied or
embedded in the tuner. Tests invoke the external `wsprsim` program to generate
channel symbols; its implementation is not copied here.

The WSPRnet uploader independently formats the public HTTP form fields
documented by the upstream WSJT-X uploader. It invokes the separately
installed curl program; curl and its libraries are not embedded. WSPRnet
protocol reference: https://github.com/WSJTX/wsjtx/blob/master/Network/wsprnet.cpp

## Amateur Radio Country Files (cty.dat, bundled data)

The callsign check ships AD1C's country file `cty.dat` (https://www.country-files.com/, Jim Reisert
AD1C) unmodified as data, installed as `share/easyspotter/cty.dat`, and refreshes it at run time from
https://www.country-files.com/cty/cty.dat at most monthly. It is published under the permission notice
below (https://www.country-files.com/copyright/, read 2026-10-17), also installed as
`share/doc/easyspotter/cty.dat.LICENSE`:

```text
Copyright © 1994-

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.
```

## Super Check Partial (MASTER.SCP, downloaded, not bundled)

The callsign check downloads `MASTER.SCP` from https://www.supercheckpartial.com/downloads/MASTER.SCP
into the user's state folder on first use and at most monthly after that (with If-Modified-Since). The
site publishes no licence for redistributing the file, so EasySpotter does not ship it.
