Dæmon NaCl Runtime — Modern Native Client Runtime
The Dæmon NaCl Runtime provides the loader to run Native Client applications built with the Dæmon Saigo SDK.
Native Client is not a Google thing anymore
Google publicly announced in May of 2017 the (then-)upcoming deprecation and abandonment of Native Client technologies in favor of WebAssembly, and announced the actual deprecation in 2020. But Google also supported Native Client-powered ChromeOS 138 until ChromeOS 139 in July of 2025 and as such continued developpement of some Native Client technologies. This extra development materialized in the maintenance of the loader and a toolchain named Saigo, frequently rebased on the latest LLVM upstream at the time. The loader received commits from Google until April of 2025, while Saigo received commits from Google until January of 2025 and the last rebase was over Clang 21.
Nothing about Native Client should be expected from Google anymore.
Status
The Unvanquished team is working on rebuilding the Native Client ecosystem to benefit from the updates implemented by Google over the years. This enables newer C and C++ versions, thanks to the Saigo compiler (from the Dæmon Saigo SDK being based on Clang 21. It also makes sure everyone can rebuild the runtime and the toolchain.
The official releases for Unvanquished are already using the Dæmon NaCl Runtime on Linux for the amd64 architecture, other systems are still using the Google NaCl Runtime.
Sources
The project for rebuilding the Dæmon NaCl Runtime can be found there:
Platform support
| System | Architecture | Dæmon NaCl Runtime | Google PNaCL SDK | Dæmon Saigo SDK |
|---|---|---|---|---|
| Windows | amd64 | ✅️ native | ✅️ native | ✅️ native |
| i686 | ✅️ native | ✅️ native | ✅️ native | |
| Linux | amd64 | ✅️ native | ✅️ native | ✅️ native |
| i686 | ✅️ native | ❌️ | ✅️ native | |
| arm64 | ☑️ armhf Multiarch ☑️ Box64 (WIP) |
❌️ | ✅️ native | |
| armhf | ✅️ native | ❌️ | ✅️ native | |
| ppc64el | ☑️ Box64 (WIP) | ❌️ | ✅️ native | |
| riscv64 | ☑️ Box64 (WIP) | ❌️ | ✅️ native | |
| loong64 | ☑️ Box64 (WIP, untested) | ❌️ | ✅️ native | |
| macOS | amd64 | ✅️ native | ✅️ native | ✅️ native |
| arm64 | ☑️ amd64 Rosetta2 | ☑️ amd64 Rosetta2 | ✅️ native | |
| FreeBSD | amd64 | ☑️ Linuxulator | ❌️ | ✅️ native |
| i686 | ☑️ Linuxulator (untested) | ❌️ | ✅️ native |
It has been verified that Linux on arm64, ppc64el and riscv64 can run the amd64 loader on Box64, though on riscv64 it is very slow. The Box64 translation layer can also run on loong64 but this has not been tested yet. The Dæmon engine received patches to run Box64, but the user has to build the engine themselves and provides Box64. This is work-in-progress. Box64 integration is still work in progress (at some point we may ship Box64 with engines that can use it).
The NaCl loader (the virtual machine running the virtualised code) is available for three systems: Linux, Windows and macOS. The supported architectures differs per system:
- Linux: amd64, i686, armhf;
- Windows: amd64, i686;
- macOS: amd64.
It is possible to run native engines with other platforms when there is a compatibility layer to run the NaCl loader:
- Linux, arm64: running the armhf NaCl loader through built-in Linux Multiarch compatibility;
- macOS, arm64: running the amd64 NaCl loader through Rosetta2 compatibility;
- FreeBSD, amd64: running the Linux NaCl loader through built-in Linuxulator compatibility.
We provide the Multiarch libraries for running the armhf game on Linux arm64, no system modification is required on that part.
The Linux armhf NaCl loader requires a 4k PageSize kernel, this may require a system modification:
There is work in progress to remove this restriction.
The Linux i686 and armhf NaCl loaders may run on FreeBSD using Linuxulator but it is not tested.
NaCl also supportrf 32-bit MIPS on Linux but this architecture is not supported by the Dæmon engine and the Unvanquished game project, and is not supported by the Dæmon Saigo SDK.
