“Good documentation not only explains how code works, but also clearly details why it was designed that way.”— Technical Writing Standards
Introduction to WinNest
When installing Windows software on Linux using Wine, users commonly experience "Registry cluttering" or overlapping DLL overrides within a single default prefix (`~/.wine`). This directly leads to compatibility failures between different applications.
WinNest was created to package each Windows program inside a fully independent data directory, automate configuration, and provide native desktop integration into Linux systems.
Core Design Features:
- Absolute Isolation: Each software runs in a separate prefix sandbox with its own virtual Registry database.
- Safe Spawning: Avoids raw shell command concatenation, removing command injection attack vectors.
- Automated Desktop Integration: Generates launch shortcut (`.desktop`) files and registers MIME types for double-click operation.
Setup & System Installation
The recommended user installation path is the official WinNest APT repository. This lets the package manager install Wine, wine32, winbind, cabextract, and desktop integration tools instead of asking users to guess system packages manually.
- Operating system: Debian, Ubuntu, nonlaOS, or a Debian-like distribution.
- Architecture: amd64 with i386 enabled so APT can install
wine32:i386. - Wine: declared as a WinNest package dependency when using the official repository.
Recommended APT repository install:
Run these commands once to add the repository and install WinNest:
Why i386 matters
Many Windows installers still need 32-bit Wine support even when the installer is x64. Without wine32:i386, installs may fail with syswow64\\ntdll.dll errors or exit unexpectedly.
Maintainer release build:
These commands are for release maintainers, not the main end-user install flow:
Local development process:
Enter the following commands inside the WinNest project root folder:
Note on Development Execution
After building, you can invoke the CLI wrapper directly during development using:
npm run dev:cli -- doctor (Replace `doctor` with the CLI command you wish to test).