Skip to content

Should releases include a native win-arm64 binary? #196

Description

@tig

Question

Should release builds include a native win-arm64 binary?

Current state

The release matrix (.github/workflows/release.yml) builds three RIDs, one per OS at its dominant arch:

  • osx-arm64
  • linux-x64
  • win-x64

There is no win-arm64 (nor linux-arm64 / osx-x64). The implicit policy today is "one RID per OS, the dominant architecture."

Why this is deferred, not an oversight

Windows-on-ARM already runs the win-x64 binary. WoA ships a built-in x64 emulator, so clet-<ver>-win-x64.zip is functional on Snapdragon X / ARM Surface devices today. The case for a native win-arm64 build is therefore performance (cold-start latency under emulation), not functionality. Our own perf budget cares about this (tests/SPEC.md: "<150ms Windows x64"), but for the current alpha (one clet) it's premature.

The build cost is non-trivial because of AOT. We publish with -p:PublishAot=true --self-contained. ILC cross-compilation to win-arm64 from a win-x64 host is not a clean path; the reliable approach is a native windows-11-arm GitHub runner (now GA). That means a new matrix row, a new runner, and getting the Unit/Integration/Smoke steps green on arm64. Note tests/Directory.Build.props already documents a win-arm64 sharp edge (NETSDK1151), so the RID has its own known rough spots.

Adding it breaks the current symmetry and invites "then why not linux-arm64?" — which should be a deliberate coverage decision, not a one-off.

When it would be worth doing

  • Once there's actual user demand for native Windows ARM performance, or
  • When we stand up the Homebrew/WinGet channels at v1.0 GA (Milestone: v1.0 GA — tied to TG v2 GA, channels live #6) and want first-class arm64 packages rather than emulated ones — that's the natural moment, since we're touching the release/packaging surface anyway.

Proposed disposition

Defer past v0.x. Revisit at RC (#5) / GA (#6). If accepted, the work is:

  • Add a win-arm64 row to the build matrix in release.yml on a windows-11-arm runner.
  • Confirm AOT publish + Unit/Integration/Smoke pass on arm64.
  • Add package_windows win-arm64 to the release packaging step and a row to the README download table.
  • Update specs/clet-spec.md §7 (release) to record the supported-RID policy explicitly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions