# WinBoat is built from source inside the package build (see the project README): # bun install # bun run build:linux-gs # which transpiles the renderer/main, compiles the Windows guest server with # Go, and runs electron-builder to produce the unpacked application under # dist/linux--unpacked. This spec installs that unpacked tree under # /opt/WinBoat and wires up the launcher, desktop entry and icon. Name: winboat Version: 0.9.0 Release: 1%{?dist} Summary: Windows for Penguins - run Windows apps on Linux License: MIT URL: https://github.com/TibixDev/winboat Source0: https://github.com/easton57/winboat/archive/refs/tags/%{version}.tar.gz # Bundled Electron runtime: disable automatic requirement generation (the # bundled .so files would otherwise generate bogus dependencies on system # libraries) and declare the real runtime libraries explicitly. AutoReq: no # Build toolchain. BuildRequires: git BuildRequires: go BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: make BuildRequires: pkgconf-pkg-config BuildRequires: libusb1-devel BuildRequires: zip BuildRequires: tar BuildRequires: curl # Bun is not packaged in Fedora yet; it is bootstrapped at build time. Requires: alsa-lib Requires: at-spi2-atk Requires: at-spi2-core Requires: atk Requires: cairo Requires: cups-libs Requires: dbus-libs Requires: expat Requires: fontconfig Requires: freetype Requires: glib2 Requires: gtk3 Requires: libX11 Requires: libXcomposite Requires: libXcursor Requires: libXdamage Requires: libXext Requires: libXfixes Requires: libXi Requires: libXrandr Requires: libXrender Requires: libXScrnSaver Requires: libXtst Requires: libuuid Requires: libdrm Requires: libnotify Requires: libxcb Requires: mesa-libgbm Requires: nspr Requires: nss Requires: pango Requires: xdg-utils # WinBoat composites Windows apps as native windows via FreeRDP. Requires: freerdp # Indicate that we ship our own Electron copy. Provides: bundled(electron) = 43 ExclusiveArch: x86_64 aarch64 %description WinBoat is an Electron app that lets you run Windows applications on Linux using a containerized approach. Windows runs as a VM inside a Docker/Podman container and is reached through the WinBoat Guest Server; applications are composited as native OS-level windows using FreeRDP and the RemoteApp protocol. This package builds WinBoat from source. %prep %setup -q -n %{name}-%{version} # build-guest-server.sh (invoked during %%build) calls `git rev-parse`; the # distributed source tarball has no .git, so create a throwaway repo so the # version metadata can be derived. if [ ! -d .git ]; then git init -q git -c user.email=build@localhost -c user.name=build add -A git -c user.email=build@localhost -c user.name=build commit -qm "build" 2>/dev/null || : fi %build # Bun is not packaged in Fedora; bootstrap it into the build directory. if ! command -v bun >/dev/null 2>&1; then BUN_INSTALL=%{_builddir}/bun curl -fsSL https://bun.sh/install | BUN_INSTALL=%{_builddir}/bun bash export PATH="%{_builddir}/bun/bin:$PATH" fi export PATH="%{_builddir}/bun/bin:$PATH" # Install dependencies (applies the patched usb dependency automatically). bun install --frozen-lockfile # Transpile the renderer/main and compile the Windows guest server. bash build-guest-server.sh bun scripts/build.ts # Produce the unpacked application tree (no packaging - we package it here). bun x electron-builder --linux dir %install # Locate the unpacked application produced by electron-builder. UNPACKED=$(ls -d dist/linux-*-unpacked | head -n1) mkdir -p %{buildroot}/opt/%{name} cp -a "$UNPACKED"/. %{buildroot}/opt/%{name}/ # Make the launcher and the Chromium sandbox executable. chmod 0755 %{buildroot}/opt/%{name}/%{name} chmod 4755 %{buildroot}/opt/%{name}/chrome-sandbox # License files (also shipped inside the app dir by electron-builder). mkdir -p %{buildroot}%{_licensedir}/%{name} cp -p LICENSE %{buildroot}%{_licensedir}/%{name}/LICENSE cp -p \ %{buildroot}/opt/%{name}/LICENSE.electron.txt \ %{buildroot}/opt/%{name}/LICENSES.chromium.html \ %{buildroot}%{_licensedir}/%{name}/ rm -f %{buildroot}/opt/%{name}/LICENSE.electron.txt \ %{buildroot}/opt/%{name}/LICENSES.chromium.html # Wrapper that launches the bundled binary from its own directory so it can # locate its resources/ directory. mkdir -p %{buildroot}%{_bindir} cat > %{buildroot}%{_bindir}/%{name} <<'EOF' #!/bin/sh exec /opt/%{name}/%{name} "$@" EOF chmod 0755 %{buildroot}%{_bindir}/%{name} # Desktop entry (matches upstream: launch the binary directly via its path). mkdir -p %{buildroot}%{_datadir}/applications cat > %{buildroot}%{_datadir}/applications/%{name}.desktop <<'EOF' [Desktop Entry] Name=WinBoat Comment=Windows for Penguins Exec=/opt/%{name}/%{name} %U Icon=%{name} Terminal=false Type=Application StartupWMClass=WinBoat Categories=Utility; Keywords=windows;remote;rdp;wine; EOF # Icon. mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps install -pm 0644 icons/winboat_logo.svg \ %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %files %license %{_licensedir}/%{name}/LICENSE %license %{_licensedir}/%{name}/LICENSE.electron.txt %license %{_licensedir}/%{name}/LICENSES.chromium.html %attr(4755, root, root) /opt/%{name}/chrome-sandbox /opt/%{name}/ %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %changelog * Wed Aug 26 2026 WinBoat Maintainers - 0.9.0-1 - Build WinBoat from source (Bun + Go + electron-builder) for Fedora.