# Windows application compatibility

Vuka uses Wine and native Linux alternatives; it does not contain Windows, Microsoft DLL bundles, product keys, installation media, or a Windows license. Compatibility is application-specific and must be recorded against an exact application and runner version.

## Included layers

- Wine 64-bit plus i386 Wine and Mesa/Vulkan libraries for WoW64 and older Win32 software.
- Wine Mono `9.4.0`, the version expected by the packaged Wine `10.0`, cached locally for new-prefix .NET Framework compatibility.
- Both Wine Gecko `2.47.4` architectures, cached locally for HTML/MSHTML support in 64-bit WoW64 prefixes.
- Winetricks `20260125`, installed from its exact tagged upstream script after SHA-256 verification, for explicit per-prefix component installation.
- Lutris for managed game/application runners.
- GameMode, MangoHud, OpenGL and Vulkan diagnostic tools.
- Remmina for connecting to a real Windows machine over RDP.
- Samba/SMB clients and NTFS read/write support for Windows-oriented storage and shares.

Vuka does not silently run downloaded `.exe` or `.msi` files. Opening one invokes `vuka-run-windows`, which displays the exact path, SHA-256 digest and isolated Wine prefix, then requires confirmation. Each unique file digest receives a prefix under:

```text
~/.local/share/vuka/windows-prefixes/<first-16-sha256-characters>
```

Execution logs are stored under `~/.local/state/vuka/windows/`. Use the **Windows Prefixes** launcher or `vuka-wine-prefixes --list` to inspect created prefixes.

Wine Mono and Gecko are not fetched during prefix creation. The exact WineHQ MSIs, URLs and SHA-256 values are pinned in `upstream/WINDOWS_RUNTIME.env`; preflight rejects a changed download and the image hook verifies the installed copy again. Wine finds them in its standard `/usr/share/wine/mono` and `/usr/share/wine/gecko` paths. These compatibility layers do not turn Wine into Windows and do not guarantee that every .NET or embedded-browser application works.

## Command-line use

```bash
vuka-run-windows ~/Downloads/application.exe
vuka-run-windows ~/Downloads/installer.msi
vuka-wine-prefixes --list
```

`--yes` exists for deliberate automation and bypasses only Vuka's confirmation dialog; it does not weaken Wine or grant root privileges. Never use it on an untrusted file.

## Compatibility expectations

Often workable:

- portable Win32 utilities;
- conventional MSI/EXE installers;
- many DirectX applications translated through Wine/Vulkan;
- applications already catalogued as working by WineHQ or Lutris.

Commonly unsupported or unreliable:

- kernel drivers, hardware vendor control panels and firmware flashers;
- Microsoft Store/UWP applications;
- kernel anti-cheat systems that reject Wine or virtualized environments;
- applications that require unsupported DRM;
- current Microsoft 365 desktop and Adobe Creative Cloud suites without application-specific workarounds.

Use Remmina/RDP or a Windows virtual machine for software that genuinely requires Windows. Vuka must never describe Wine compatibility as a guarantee.

## Release test matrix

Record application name/version, installer digest, runner, prefix, GPU/driver, result, limitations and date for each case:

1. simple 64-bit portable executable;
2. simple 32-bit executable;
3. MSI install, launch and uninstall;
4. .NET desktop application;
5. DirectX/Vulkan application through Lutris;
6. SMB share access and NTFS removable storage;
7. Remmina/RDP session to a Windows host.

The source-controlled acceptance fixtures live under `tests/windows/`. They compile into native 32-bit and 64-bit PE console programs, a Windows Forms .NET program, a Direct3D 9 program and a real x64 MSI. `scripts/guest-windows-acceptance.sh` verifies the generated fixture manifest, opt-in refusal, isolated prefixes and logs, Win32/WoW64 execution, Wine Mono, Direct3D, MSI install/launch/uninstall cleanup and Vulkan diagnostics in an installed Vuka VM. The generated binaries are evidence artifacts and are not committed or embedded in the ISO; each fixture build writes its exact `SHA256SUMS` because the MSI toolchain assigns a new package code.

SMB, NTFS and RDP require real peer devices or media. Their packages and configuration are present, but a VM-only run cannot truthfully replace a Windows host, SMB server or removable disk test.
