Skip to content

fix: ship the third-party license notices in the MSI (#70) - #93

Merged
jamditis merged 1 commit into
mainfrom
fix/70-msi-license-notices
Jul 16, 2026
Merged

fix: ship the third-party license notices in the MSI (#70)#93
jamditis merged 1 commit into
mainfrom
fix/70-msi-license-notices

Conversation

@jamditis

Copy link
Copy Markdown
Owner

Before submitting

  • I searched existing issues and pull requests (including closed ones) so this isn't a duplicate
  • I tested this change locally

Nothing skipped. Both installers were built in CI and their payloads inspected — see Testing.

Description

The MSI shipped the runtime DLLs without the third-party notices that cover them, which is the license-compliance gap #69 set out to close but only closed on the NSIS side.

bundle.resources now declares the notices file as a real resource, so both bundlers place it. With that in place, the two mechanisms #69 used to work around the gap are gone: the explicit File/Delete pair in src-tauri/nsis/installer.nsi (the template's own {{#each resources}} loops now install and uninstall it), and the staging block in scripts/bundle-runtime-dlls.mjs. That script keeps staging the VC++ and Vulkan DLLs and verifying DirectML.dll; only the notices block was removed. Its comment claimed the MSI harvests the file as a sibling of the exe, which is the false premise behind #70 — WiX harvests the binaries collection and the configured resources, not arbitrary files staged next to the exe.

The resources block had to change from list form to map form, which is the non-obvious part:

  • List form (["../THIRD_PARTY_NOTICES.md"]) rewrites a leading .. to a literal _up_ directory, so the file would install to _up_/THIRD_PARTY_NOTICES.md (resource_relpath() in tauri-utils maps Component::ParentDir to _up_). Map form keeps .. in the source path.
  • A glob key in map form flattens its matches, which would collapse resources/models/silero_vad_v4.onnx to resources/silero_vad_v4.onnx and reopen [BUG] Parakeet fails to load on non-ASCII Windows profile paths (default-engine crash) #56. A directory key preserves structure, so \"resources/\": \"resources/\" is used rather than \"resources/**/*\".

Related issues

Fixes #70. Follow-up to #69; the removed NSIS lines were added there, and #45 is the original notices issue.

Testing

Built both installers in CI (run 29512763139, workflow_dispatch with make_release=false, so no release was touched) and inspected the payloads rather than trusting the config.

MSI — read via the WindowsInstaller COM API, reconstructing install paths by walking File to Component to Directory:

NSIS — silently installed the built AudioBud_0.3.1_x64-setup.exe on Windows 11 and enumerated the tree:

  • THIRD_PARTY_NOTICES.md (13,783 bytes) present exactly once, at the install root. No duplicate anywhere in the tree.
  • resources\models\silero_vad_v4.onnx (1,807,522 bytes) still nested; no flattened copy at resources\silero_vad_v4.onnx.
  • All 5 staged runtime DLLs plus DirectML.dll still present, so removing the notices block did not disturb DLL staging.
  • The setup.exe is 9,396 bytes smaller than the shipped v0.3.1 build, consistent with the notices payload no longer being embedded twice.

The installers redistribute the Microsoft VC++ runtime, the Vulkan loader and
DirectML, so they have to carry the license notices covering them. Only the NSIS
installer did. #69 staged THIRD_PARTY_NOTICES.md next to the exe on the
assumption the WiX bundler would harvest it as a sibling, but WiX harvests the
binaries collection and the configured resources, not an arbitrary .md, so the
released MSI shipped the DLLs without their notices.

Declare the file as a real bundle resource instead, which both bundlers install,
and drop the NSIS File/Delete lines and the beforeBundleCommand staging that
worked around its absence. The explicit File line would otherwise write it twice.

bundle.resources moves to the map form because neither alternative works: in the
list form Tauri rewrites a leading .. to a literal _up_ directory
(tauri-utils resource_relpath), landing the file at _up_/THIRD_PARTY_NOTICES.md,
and a glob key in the map form copies matches to the target without preserving
structure, which would flatten resources/models/silero_vad_v4.onnx and regress
the model path #56 just fixed. A directory key preserves the layout.
@jamditis
jamditis merged commit f5e53c2 into main Jul 16, 2026
5 checks passed
@jamditis
jamditis deleted the fix/70-msi-license-notices branch July 16, 2026 16:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MSI installer omits THIRD_PARTY_NOTICES.md (WiX does not harvest the exe-sibling .md)

1 participant