Skip to content

Migrate Burrow.app off GPL mo β†’ bundle the MIT burrow-engine#218

Draft
caezium wants to merge 2 commits into
mainfrom
feat/bundle-burrow-engine
Draft

Migrate Burrow.app off GPL mo β†’ bundle the MIT burrow-engine#218
caezium wants to merge 2 commits into
mainfrom
feat/bundle-burrow-engine

Conversation

@caezium

@caezium caezium commented Jun 27, 2026

Copy link
Copy Markdown
Owner

Why

Shipping Burrow resolves upstream mo, which relicensed MIT β†’ GPL-3.0 on 2026-06-11 (+ trademark policy). GPL is incompatible with a closed product. This migrates the app onto our MIT engine fork (burrow-engine, pinned at mo's last MIT commit 9daf936 / V1.42.0), bundled inside the app β€” zero install, never touches GPL upstream.

What this does

  • scripts/bundle-engine.sh β€” stages the engine runtime (mole + lib/ + status-go/analyze-go + MIT LICENSE; no Go source, ~8.6 MB) into Resources/engine/, ad-hoc-signing the nested Go binaries.
  • scripts/build.sh β€” canonical build: xcodebuild + a post-build codesign --force --deep. Xcode's CodeSign runs after all build phases, so the engine's resource seal is finalized here (a stale seal breaks FDA β€” Full Disk Access remains undetected after enabling it in System SettingsΒ #177/release(macos): ad-hoc re-sign frameworks when unsigned β€” fixes FDA (#177)Β #178).
  • project.yml β€” a postBuildScripts phase stages the engine when its source is present (vendor/burrow-engine submodule or $BURROW_ENGINE_SRC); dev builds without it fall back to a system engine.
  • MoleCLI.swift β€” resolution is now bundled engine β†’ installed burrow-engine β†’ legacy mo. Install hints repoint off tw93/Mole; keeps the Mole CLI Β© tw93 credit (graceful, license-forced migration).

βœ… Verified (real xcodebuild)

  • BUILD SUCCEEDED; the bundled mole status --json (and --watch NDJSON) runs correctly from inside the .app.
  • Signing resolved: scripts/build.sh output passes codesign --verify --deep --strict. Nested engine binaries signed; app seal valid.

⏳ Remaining

  • Vendor the engine as a vendor/burrow-engine submodule for reproducible release/CI builds.
  • Wire the post-build seal into the release pipeline (extend the existing inside-out re-sign to cover the bundled engine).

Test

cd macos && BURROW_ENGINE_SRC=~/Desktop/burrow-engine scripts/build.sh Debug
# -> βœ“ built + sealed: <path>/Burrow.app   (open it; engine is at Contents/Resources/engine)

caezium added 2 commits June 26, 2026 08:05
…ff GPL mo)

The shipping app resolves upstream mo (now GPL). This bundles OUR MIT engine fork inside
the app so users run it with zero install and never touch GPL upstream.

- scripts/bundle-engine.sh: stages the engine RUNTIME (mole + lib/ + status-go/analyze-go
  + LICENSE; no Go source) into Resources/engine. Verified standalone: the bundled mole
  runs status --json AND --watch correctly from the copied location (sources lib/ relative
  to itself).
- project.yml: postCompileScripts build phase runs the bundler when the engine source is
  present (vendor/burrow-engine submodule or $BURROW_ENGINE_SRC); falls back gracefully.
- MoleCLI: resolve order is bundled engine -> installed burrow-engine -> legacy mo. Install
  hints repoint off tw93/Mole. Keeps the 'Mole CLI Β© tw93' credit (graceful migration).

Verified: bundle script (live), MoleCLI parses, project.yml generates. PENDING a real
xcodebuild: nested-binary signing (engine must be codesigned for the app sig to validate)
+ vendoring the engine as a submodule for reproducible release builds.
…r build phases)

The bundle build phase stages the engine, but Xcode's CodeSign runs AFTER all phases, so the
resource seal is stale (breaks FDA #177). The final inside-out re-sign must happen post-build:
- scripts/build.sh: canonical local build = xcodebuild + codesign --force --deep (engine sealed).
- bundle-engine.sh ad-hoc-signs the nested Go binaries.
Verified: build.sh-style seal passes codesign --verify --deep --strict; bundled engine runs.
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.

1 participant