# Felucca licensing

Felucca is free software, licensed under the GNU General Public License, version 3 only
(`GPL-3.0-only`, full text in `LICENSE`) as a whole. Individual components and assets
keep their own terms below, including the CC0 Hügelton Sample Pack. Their licence
texts are in `LICENSES/` and the component paths listed below.

Copyright (C) 2026 Leo Kuroshita (@kurogedelic), Hügelton Instruments

The experimental SMK board adapter also retains Copyright (C) 2026 M. Geisler
(genkigenki/makkuro), GPL-3.0-only. It adapts
`genkigenki/Felucca@b67312cd25bd01b097ed69388b83e86bd8449365`; see
[the source and qualification record](docs/smk37.md#source-and-qualification).
This covers the selected SMK HAL, controls, flash-layout, packaging and updater
changes, with native safety adaptations. No vendor dump, factory calibration,
CC BY-NC guide assets or restricted donor logo is included.
The elapsed wheel-drift helper additionally adapts GPL-3.0-only
`zvenson/dinghy@7c31bb25c90cc11b2a94f1a10f549d0817884ac1`,
`firmware/src/smk_wheel.h`, with its individual notice retained.

## Upstream 1.8.0 copied components

The backport pins `hugelton/Felucca@9f62297c2db627bbcb20d7ce896683a17318674c`.
GPL firmware/UI and desktop files retain upstream copyright notices.
`firmware/src/keytouch.c`, `keytouch.h`, `firmware/hal/fm1_adc.h` and
`fm1_input_analog.h` retain MPL-2.0 from the upstream aftertouch integration and
`hugelton/felucca-bsp@5942e68b89ab9ccd23f2c541d712ca38fe635f11`.
Their separate [licence](LICENSES/MPL-2.0-felucca-bsp.txt) and
[notice](LICENSES/NOTICE-felucca-bsp.txt) accompany distributions; other HAL files
keep their own GPL notices.

The optional `firmware/src/adpcm_dsp.c` BRR/Gaussian decoder derives from
Shay Green's snes_spc and retains LGPL-2.1-or-later; the decoding portion of
`tools/gen_adpcm.py` retains the same attribution. The engine glue and original
synthetic wave generator remain GPL-3.0-only. The complete
[LGPL text](LICENSES/LGPL-2.1-snes_spc.txt) is included. No Nintendo sample bank or
factory sound data is copied. Source pins and adaptations are recorded in the
[backport guide](docs/upstream-1.8-backport.md).

## What is GPL-3.0-only

Every file in this tree that carries an `SPDX-License-Identifier: GPL-3.0-only` header:

- the firmware: `firmware/` (app, HAL, update loader; not `firmware/engines/`, MIT: below)
- the build script and tools: `build.sh`, `tools/` (except the CC0 `tools/gen_waves.py` generator and MIT external-emulator patch below)
- the web pages (installer, editor, the browser emulator `web/emu/`) and their tests: `web/` (not the Fukiai and DotGothic16 fonts, below)
- the SDL2 desktop/common platform adapters: `platforms/`
- the host tests: `tests/`

The following source files are ports and keep the licence of their originals:
`firmware/src/phys_dsp.c` (DaisySP, MIT), `firmware/src/phys_symp.c` (Rings, MIT) and
`firmware/src/fm6_core.c` (msfa, Apache-2.0), and `firmware/src/macro_dsp.c`
(Braids, MIT). The bundled full Braids/stmlib source bank and its generated C DSP
header also retain MIT; see `assets/braids/README.md`. The firmware built with these
components is GPL-3.0-only as a whole.

Five engines and the code they share are under the MIT licence, not the GPL. They are
Hügelton Instruments' own work and live in their own repository, Felucca-Engines
(<https://github.com/hugelton/Felucca-Engines>), included here as the git submodule
`firmware/engines/`: the ANALOG, LOFI, TRIO, WHEEL and NOISE engines (`eng_analog.c`,
`eng_lofi.c`, `eng_trio.c`, `eng_wheel.c`, `eng_noise.c`), the engine interface
(`felucca_engine.h`), the shared DSP helpers (`dsp.c`) and the generator of their tables
(`SPDX-License-Identifier: MIT`, `firmware/engines/LICENSE`, also
`LICENSES/MIT-Felucca-Engines.txt`). The firmware built with them is GPL-3.0-only as a whole.
The pinned collection also includes MIT PHASE source, which this firmware does not
compile. The firmware retains its native GPL-3.0-only PHASE implementation and
per-part crossfade storage in `firmware/src/eng_phase.c`.
Felucca's complete source includes that submodule: clone with `--recurse-submodules`, and
give it along with the rest when you share the source. Releases produced by our
complete-source workflow also carry `felucca-VERSION-source.tar.gz`, which includes the
pinned submodule (GitHub's generated source archives leave it empty). The complete asset includes all
tracked build inputs, source generators, fonts, samples, profile definitions and
tests, with the Engines MIT license and all other attribution/license files. Its
`SOURCE-PINS.json` identifies both commits and checks every source file; the
[build guide](BUILDING.md#get-the-source) explains download verification and builds
without Git. The JieLi toolchain and SDK remain separately obtained prerequisites.

You may use, study, change and share Felucca under the GPL. If you distribute Felucca, or
firmware derived from it, you must also give your recipients its complete corresponding
source under the same licence. That includes devices that ship with modified Felucca inside.

## Hügelton Instruments' own work

All by Hügelton Instruments (Leo Kuroshita), in this tree:

| What | Licence | Where |
| --- | --- | --- |
| Felucca: firmware, tools (except the Sample Pack generator), web pages, tests | GPL-3.0-only | `LICENSE` |
| The PHASE engine, Felucca's own design | GPL-3.0-only | `firmware/src/eng_phase.c` |
| The DRUM voices and kit | GPL-3.0-only | `firmware/src/drum_voice.c`, `firmware/src/eng_drum.c` |
| The Hügelton Sample Pack: the `tools/gen_waves.py` generator and its synthesized single-cycle waves, drum sounds and plucks; its drums also supply SLICE's BREAK | CC0 1.0 | `tools/gen_waves.py`, `LICENSES/CC0-1.0.txt` |
| The controls picture | GPL-3.0-only | `docs/controls.jpg` |
| The Fukiai icon font (<https://github.com/hugelton/Fukiai>): the firmware's icons (rasterised at build time by `tools/gen_aa_icons.py`) and the web editor's | MIT | `web/fukiai.ttf`, `LICENSES/MIT-Fukiai.txt`, `web/FUKIAI-LICENSE.txt` |
| The ANALOG, LOFI, TRIO, WHEEL and NOISE engines, the engine interface and the shared DSP helpers: Felucca-Engines (<https://github.com/hugelton/Felucca-Engines>) | MIT | `firmware/engines/`, `LICENSES/MIT-Felucca-Engines.txt` |

### Sample Pack dedication and scope

The author explicitly clarified PHASE as Felucca's own GPL engine and dedicated
`tools/gen_waves.py` **and every sound it makes** to CC0 1.0 in
[upstream commit `5738617968a22b5d4c0d3470cfcc95559052f446`](https://github.com/hugelton/Felucca/commit/5738617968a22b5d4c0d3470cfcc95559052f446).
The script's body, from its module docstring onward, matches that pinned declaration
byte for byte (SHA-256 `de661a4edd42181372c8363b257386e85803efaea433242b00100a702656c108`).
Only its attribution header changes; the generated sounds are unchanged. This
self-contained generator uses standard-library synthesis and embedded parameters,
not external sample banks.

The [CC0 1.0 legal text](LICENSES/CC0-1.0.txt) is included alongside the other
notices ([official reference](https://creativecommons.org/publicdomain/zero/1.0/)).
The dedication is limited to this generator and its sounds. PHASE and DRUM code,
`tools/gen_samples.py`, the sample codecs/build tools and the combined firmware
remain GPL-3.0-only; the CC0 sound data does not relicense those implementations.
Existing Versilian CC0 samples, fonts, MIT engines, ported DSP and SDK files retain
their separate notices. Complete source archives include the generator and CC0 text;
release/site packaging includes every `LICENSES/*.txt` notice with the package.

## Third-party material

| What | Licence | Where |
| --- | --- | --- |
| MIDI test music: Empacotatron by Fupi; Elytra and Xenon Phoenix (MIDI versions) by continuum.mid | CC0 1.0; original MIDI files retain CC0 independently of test code | `tests/fixtures/midi/`, provenance and checksums in `manifest.json`, `LICENSES/CC0-1.0.txt` |
| External fm1-emu trace patch after Joakim Eriksson (2026); optional externally built CLI also includes its GPL-3.0-only USB source | MIT patch; combined CLI includes MIT and GPL-3.0-only | `tools/emulator_trace/retired-trace.patch`, `tools/emulator_trace/LICENSE-MIT-fm1-emu.txt`; source/build boundary in `docs/emulator-trace-prerequisite.md` |
| Inter Tight font by The Inter Project Authors: documentation panel-diagram outlines only, outside the firmware asset closure; the font declares no Reserved Font Name | SIL OFL 1.1 | `docs/manual/fonts/InterTight[wght].ttf`, `docs/manual/fonts/OFL.txt`, `LICENSES/OFL-InterTight.txt` |
| M8Stealth57 / M8Stealth89 by Trash80, with embedded ancestry credits including Matthias Tellen: native UI text and keycap/badge legend ink, rasterised and packed at build time; the standalone RAM loader uses a native uppercase/digit subset; ten additional UI bitmap marks are local adaptations | CC BY-SA 3.0; font data and adaptations retain these terms | `assets/fonts/m8stealth/README.md`, `LICENSES/CC-BY-SA-3.0-M8Stealth.txt` |
| Instrument samples (Versilian Studios VSCO-2 Community Edition, VCSL): the SAMPLE sets, also the SLICE engine's PIANO (the PIANO set's middle C) | CC0 1.0 | `assets/samples-cc0/`, provenance in `ATTRIBUTION.txt` there |
| DaisySP by Electrosmith, Corp and Emilie Gillet (<https://github.com/electro-smith/DaisySP>): the PHYS engine's modal and string models and the resonator, ported to fixed point | MIT | `firmware/src/phys_dsp.c`, `LICENSES/MIT-DaisySP.txt` |
| Rings by Emilie Gillet (<https://github.com/pichenettes/eurorack>): the PHYS engine's sympathetic strings, ported to fixed point | MIT | `firmware/src/phys_symp.c`, `LICENSES/MIT-Rings.txt` |
| Braids by Emilie Gillet (<https://github.com/pichenettes/eurorack>): MACRO's full oscillator/resource bank and stmlib helpers, translated/adapted to integer C | MIT | `firmware/src/macro_dsp.c`, `assets/braids/`, `LICENSES/MIT-Braids.txt` |
| msfa by Google Inc. and Pascal Gauthier, from Dexed (<https://github.com/asb2m10/dexed>): the FM6 engine's synthesis, ported to integer C (Dexed itself is GPL-3.0; only msfa is used; the FM6 factory patches are Felucca's own) | Apache-2.0 | `firmware/src/fm6_core.c`, `LICENSES/Apache-2.0-msfa.txt` |
| klattsch by Tony Gies (<https://github.com/tgies/klattsch>): design reference for the VOICE engine; no code copied. Formant data from Klatt (1980) / Hillenbrand et al. (1995) | MIT (klattsch) | credit only |
| X0X by charlesvestal (<https://github.com/charlesvestal/fm1-x0x>), a Felucca fork: the design of the browser emulator (the worklet, the device clock driven by its audio, the exports); its files credit it in their headers | GPL-3.0 | `web/emu/` |
| The second core: its start, mailbox and guards from X0X by charlesvestal (<https://github.com/charlesvestal/fm1-x0x>, with the dual-core findings of Melodee by keremimo, <https://github.com/keremimo/melodee>); its audio split, measurements and hardening after Jangada by zednaked (<https://github.com/zednaked/jangada>); each credited in its files | GPL-3.0 | `firmware/hal/fm1_cpu1.{h,S}`, `firmware/src/fx.c`, `tests/c1_host.h`, `tests/dualcore_test.c` |
| DotGothic16 font by The DotGothic16 Project Authors (<https://github.com/fontworks-fonts/DotGothic16>): the browser emulator's knob labels, served with its page (cut to printable ASCII; the font declares no Reserved Font Name) | SIL OFL 1.1 | `web/emu/fonts/DotGothic16-subset.woff`, `LICENSES/OFL-DotGothic16.txt` (also `web/emu/fonts/OFL.txt`) |
| JieLi AC79 SDK by JieLi Technology: three of its files go into every `.fwsc` package (below); none are in this tree | Apache-2.0 | `LICENSES/Apache-2.0.txt` |

Tamzen/Tamsyn is no longer a build input. Its notice remains in
`LICENSES/Tamzen.txt` for historical distributions and the dated font comparison.

On the device, hold HOME, select SYSTEM with ALGORITHM and ABOUT with PRESETS, then tap
OCT+ to open the information screen; turning PRESETS scrolls on into
CREDITS, a short list of these authors, licences and source URLs.

## JieLi SDK files in the packages (Apache-2.0)

A `.fwsc` package made by `tools/build.py` (with `tools/fm1pkg_make.py`; this is the package the
web installer installs) holds three unmodified files from the JieLi AC79 SDK
(<https://gitee.com/Jieli-Tech/fw-AC79_AIoT_SDK>, `cpu/wl82/tools/`). They are read from your SDK
checkout at build time (see BUILDING.md); no SDK files are in this tree.

| File in the package | What it is |
| --- | --- |
| `uboot.boot` | the first-stage boot loader (SPL) |
| `cfg_tool.bin` | the chip configuration block |
| `eq_cfg_hw.bin` | the default hardware EQ table |

They are licensed under the Apache License, Version 2.0 (`LICENSES/Apache-2.0.txt`), not under
the GPL, and their copyright stays with JieLi Technology. The SDK has no NOTICE file. Apache-2.0
files may be distributed together with GPL-3.0 code; Felucca itself stays GPL-3.0-only.

Every distribution of a package carries the licence texts with it: the release folder
(`tools/build.py --release`) and the site (`web/make_site.py`, next to the package in
`firmware/` and linked from the installer page).

## No vendor material

No M-VAVE material is part of Felucca. The firmware links no vendor code and contains no vendor
data, and the packages hold only Felucca and the three SDK files above. The installer's
"Return to official V15" holds only the official file's size and SHA-256: you select the
official firmware file you downloaded yourself, and it is checked and installed in your browser,
never uploaded or redistributed.

## Contributions

Contributions are welcome under GPL-3.0-only. Changes to the five engines and the code they
share (`firmware/engines/`) go to the Felucca-Engines repository, under the MIT licence.

## Trademarks

"Felucca" and "Hügelton Instruments" are names of Hügelton Instruments.

"M-VAVE" and "FM-1" are trademarks of their respective owners. Felucca is independent
firmware that runs on FM-1 hardware. It is not affiliated with, endorsed by or supported
by those owners.

## Radio

Felucca never enables the Bluetooth / Wi-Fi radio of the hardware.
