How to Use Bottles for Running Windows Software on Fedora

Install Bottles via Flatpak on Fedora to run Windows software using a Wine-based environment.

The scenario

You downloaded a .exe installer for a legacy accounting tool or a niche creative application. You double-click it on Fedora and the system does nothing. Your desktop expects a native RPM or a Flatpak. You need a bridge between the Windows binary and your Linux environment without polluting your system packages or breaking your host dependencies.

What is actually happening

Bottles is not a virtual machine. It does not emulate a full Windows operating system. It uses Wine, which translates Windows API calls into POSIX calls on the fly. Bottles wraps Wine in a graphical interface and manages isolated environments called prefixes. Each prefix acts like a self-contained Windows drive. It holds registry settings, installed fonts, application data, and downloaded DLLs. Running multiple prefixes prevents one application's dependencies from breaking another. Bottles also handles dependency installation through Winetricks and manages Flatpak runtimes to keep the sandbox secure.

Think of it like a series of separate workbenches in a shared garage. You keep the heavy power tools on one bench and the delicate electronics on another. They share the same building, but they never mix. The isolation keeps your Fedora installation clean and predictable.

Flatpak applications run in a sandbox by default. Bottles ships as a Flatpak to isolate Wine's complex dependency tree from your host system. This means Bottles cannot directly access your home directory or system libraries unless you grant explicit permissions. The sandbox keeps your Fedora installation clean. It also means you will occasionally need to adjust portal settings or mount directories manually. Trust the package manager. Manual file edits drift, snapshots stay.

Installation and first run

You need the Flatpak runtime installed before Bottles can function. Fedora includes Flatpak support out of the box, but the Flathub repository must be added explicitly. Run the following commands to prepare the environment and install the application.

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# Register the official Flathub repository if it is not already present
flatpak install flathub com.usebottles.bottles
# Download the Bottles application and its required runtimes
flatpak run com.usebottles.bottles
# Launch the GUI directly from the Flatpak wrapper

The first launch downloads the default runtime stack. This includes the base Linux libraries, the Wine binary, and the desktop integration portals. The process takes a minute or two depending on your connection speed. Once the window opens, you will see a clean dashboard with a prominent button to create a new environment.

Click the create button and choose an environment type. Bottles offers several presets. The Application preset installs standard Windows libraries and focuses on productivity software. The Gaming preset pulls in DirectX components, Vulkan translation layers, and performance optimizations. Select the preset that matches your workload. Name the bottle something descriptive. The name becomes the directory identifier for the prefix.

Configuring the environment

After the prefix initializes, you need to point Bottles at your Windows executable. Open the Executables tab inside the bottle view. Click the add button and browse to your .exe file. Bottles will copy the installer into the prefix or create a shortcut to it, depending on your selection. Run the installer through the Bottles interface. Do not run it directly from your file manager. The Flatpak sandbox will block the execution unless the path is explicitly whitelisted.

Many Windows applications require additional components that do not ship with the base Wine installation. Bottles integrates Winetricks to handle these dependencies. Open the Dependencies tab and search for the required component. Common requirements include vcrun2019, dotnet48, or corefonts. Install them through the interface. Bottles will download the Microsoft installers and run them inside the isolated prefix. The process mimics a real Windows installation sequence.

flatpak info --show-permissions com.usebottles.bottles
# Display the current sandbox permissions for the Bottles Flatpak
flatpak override --user --filesystem=home com.usebottles.bottles
# Grant read-write access to your home directory if an app needs it
flatpak run com.usebottles.bottles --cli bottles list
# Verify that your custom prefix appears in the internal database

The Flatpak sandbox restricts file access by design. If an application fails to find its configuration files or refuses to save documents, you must adjust the filesystem permissions. Use the override command to grant access to specific directories. Avoid granting unrestricted access to the entire host filesystem. Scope the permission to the exact path the application requires.

Verifying the setup

Run the application through the Bottles Executables tab. Watch the terminal output if you enabled verbose logging in the bottle settings. A successful launch will show the application window and return control to the desktop. Check the prefix directory to confirm that files are being written correctly.

ls -la ~/.var/app/com.usebottles.bottles/data/bottles/bottles/
# List the root directory containing all your isolated prefixes
find ~/.var/app/com.usebottles.bottles/data/bottles/bottles/ -name "*.exe" -type f
# Locate the installed Windows binary inside the active prefix
journalctl -u flatpak* --since "10 minutes ago" | grep -i bottles
# Check the system journal for sandbox violations or runtime errors

The prefix directory structure mirrors a Windows drive layout. You will see drive_c, dosdevices, and user.reg. Application data lives under drive_c/users/container/AppData. If the application launches and saves files to the expected location, the translation layer is working correctly. Reboot before you debug. Half the time the symptom is gone.

Common pitfalls and error patterns

Flatpak sandboxing blocks direct execution of external binaries. You will see a permission denied error if you try to run the .exe from your file manager instead of the Bottles interface. The error typically reads Operation not permitted or No such file or directory when the wrapper cannot resolve the path. Always launch through the Bottles Executables tab.

Missing dependencies cause silent failures or immediate crashes. Wine will print a warning to the terminal when a required DLL is not found. The output looks like err:module:import_dll Library KERNEL32.dll (which is needed by L"Z:\\path\\to\\app.exe") not found. Install the missing component through the Dependencies tab. Do not copy DLLs manually from your host system. The architecture and runtime versions will mismatch.

DPI scaling breaks modern Windows applications on high-resolution displays. The application window appears tiny or text renders incorrectly. Open the bottle settings and enable the DPI override. Set the resolution to match your display or enable the automatic scaling flag. Wine handles the translation at the window manager level.

fixme:ntdll:EtwEventRegister unrecognized provider guid {00000000-0000-0000-0000-000000000000}
err:ole:CoGetClassObject class {clsid} not registered
err:module:import_dll Library MSVCP140.dll (which is needed by L"Z:\\app.exe") not found

These log lines indicate missing runtime components or unregistered COM objects. The fixme lines are informational and safe to ignore. The err lines require action. Install the corresponding Visual C++ redistributable or .NET framework through Winetricks. Run journalctl first. Read the actual error before guessing.

When to use Bottles versus other tools

Use Bottles when you want a graphical interface to manage multiple isolated Wine prefixes without touching the command line. Use native Wine when you need direct system library access or are running headless servers without a desktop environment. Use a full virtual machine when the software requires hardware virtualization, kernel-level drivers, or anti-cheat systems that block translation layers. Use Steam when you are running commercial games that already include Proton compatibility tools. Stay on the upstream Workstation if you only deviate from the defaults occasionally.

Where to go next