Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

Raven

A Windows your apps recognize.

Website and documentation

Raven runs Windows applications on Linux. You install them with their own installers, the same ones you would use on a PC, and they start: no virtual machine, no winetricks, no DLL overrides.

The program's code runs directly on your CPU, inside a sandbox where it cannot reach Linux. Every call it makes to the system is answered by Raven, which plays the part of the Windows kernel and its services: processes and threads, files, the registry, windows and input. Graphics go to Wayland and Vulkan, with DXVK and vkd3d-proton for Direct3D.

Requirements

  • Linux on x86_64
  • CMake 3.20 or newer, a C++20 compiler and Python 3.11 or newer
  • MinGW-w64 13 or newer for x86_64 and i686, to build the Windows test programs
  • To build the installer components: clang, widl, bison and patch
  • Optionally, OpenSSL for crypt32's certificate chains, Schannel, HTTPS and the CryptoAPI ciphers
  • For desktop applications: Wayland, xkbcommon, pixman, FreeType and Vulkan
  • Optionally, for the experimental X11 desktop: libxcb with its xkb, xfixes and xinput extensions, and xkbcommon-x11

On Fedora these are:

sudo dnf install cmake gcc-c++ clang python3 bison patch wine-devel mingw64-gcc mingw64-gcc-c++ mingw32-gcc mingw32-gcc-c++ \
    wayland-devel libxkbcommon-devel pixman-devel freetype-devel vulkan-loader-devel vulkan-headers openssl-devel

The tested setup also uses libpng 1.6.59, a CPU build of Skia with the Liberation fonts, DXVK and vkd3d-proton; the scripts/provision-*.py tools download the pinned versions.

Installation

Raven is built from source for now:

git clone https://github.com/mirkobrombin/raven.git
cd raven
cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build -j2

Then run an installer, or any program:

export RAVEN_PREFIX="$HOME/.local/share/raven/my-app"
build/native/raven --run-process --execution=native --timeout-ms=600000 --desktop=wayland setup.exe

This minimal build runs console programs and simple windows. Installers and most desktop programs also need the common controls, the shell dialogs and the installer services, which Raven builds from its own sources and, for the installer services, pinned upstream libraries, for both 64-bit and 32-bit programs. Without them a program stops at its first call into them, such as InitCommonControls:

python3 scripts/provision-rtl.py --output components/rtl
python3 scripts/provision-controls.py --output components/controls
python3 scripts/provision-controls.py --arch x86 --output components/controls32
python3 scripts/provision-installer.py --output components/installer
python3 scripts/provision-installer.py --arch x86 --output components/installer32
python3 scripts/provision-graphics.py --destination components/graphics
python3 scripts/provision-roots.py --output components/roots
python3 scripts/provision-text.py --output components/text
cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DRAVEN_RTL_COMPONENT_PATH=$PWD/components/rtl/raven-rtl.dll \
    -DRAVEN_CONTROLS_COMPONENT_DIR=$PWD/components/controls -DRAVEN_CONTROLS32_COMPONENT_DIR=$PWD/components/controls32 \
    -DRAVEN_INSTALLER_COMPONENT_DIR=$PWD/components/installer -DRAVEN_INSTALLER32_COMPONENT_DIR=$PWD/components/installer32 \
    -DRAVEN_DXVK_PE64_DIR=$PWD/components/graphics/dxvk/pe64 -DRAVEN_DXVK_PE32_DIR=$PWD/components/graphics/dxvk/pe32 \
    -DRAVEN_VKD3D_PE64_DIR=$PWD/components/graphics/vkd3d-proton/pe64 \
    -DRAVEN_ROOT_CERTIFICATE_DIRECTORY=$PWD/components/roots \
    -DRAVEN_SKIA_SOURCE=$PWD/components/text/skia -DRAVEN_SKIA_LIBRARY=$PWD/components/text/cpu-fonts/libskia.a \
    -DRAVEN_FONT_DIRECTORY=$PWD/components/text/fonts
cmake --build build -j2

DXVK and vkd3d-proton are only needed for Direct3D programs and games. The Microsoft root certificates let installers check the signatures of the packages they download, as setups built with WiX Burn and the .NET and Visual C++ redistributables do.

On an X11 session, --desktop=x11 takes the place of --desktop=wayland. The X11 desktop is experimental; -DRAVEN_DESKTOP_WAYLAND=OFF builds Raven without Wayland at all.

RAVEN_PREFIX is the Windows installation the program sees, with its own C: drive and registry; give each application its own. Raven takes a snapshot of the prefix before every installer, and build/native/raven --restore-prefix brings it back.

To run the tests:

ctest --test-dir build --output-on-failure -j1

Some tests need software Raven cannot redistribute; point RAVEN_MINESWEEPER, RAVEN_NETFX_INSTALLER, RAVEN_NETFX35_PACKAGE, RAVEN_XNA_INSTALLER and RAVEN_REDIST_DIRECTORY at your own copies, or those tests are skipped. Each component under native/upstream records where it comes from and its license.

What works today

AreaStatus
32 and 64-bit programsBoth, side by side in the same prefix
InstallersNSIS, Inno Setup and Windows Installer (MSI) packages, with custom actions, rollback and elevation
Visual C++ 2005 to 2022x86 and x64, alone or all together, reinstalled, older over newer
.NET Framework 4.8Installs from Microsoft's offline installer; console, WinForms and WPF programs run
.NET Framework 3.5Enabled from its package as Windows does; CLR 2.0 programs run
DirectX June 2010, XNA 4.0, OpenALInstall from their official redistributables
Direct3D 8 and 9Through DXVK, including 32-bit programs
Direct3D 11Through DXVK: every shader stage, compute, MSAA, deferred contexts
Direct3D 12Through vkd3d-proton, including ray tracing
Side-by-side assembliesManifests, WinSxS and activation contexts

Raven's own system libraries stay in charge even when an installer writes its own kernel32 or user32, while the redistributables an installer brings are the ones that load.

Tested applications

Each application is installed with its own installer into a fresh prefix and then started. Every stage that works adds 25%: install, start, main window, and a real workflow where one is automated.

ApplicationInstallStartMain windowWorkflowScore
Notepad++ 8.7.1yesyesyesediting100%
7-Zip 24.09 (EXE installer)yesyesyesnot automated yet75%
7-Zip 24.09 (MSI)yesyesyesnot automated yet75%
Audacity 3.6.4yesyesyesnot automated yet75%
KeePass 2.57yesyesnonot automated yet50%
VLC 3.0.21yesnononot automated yet25%
ClassiCube 1.3.8portableyesyessingleplayer75%
Minesweeperportableyesyesgameplay75%

KeePass needs the .NET Framework 4.8, which a fresh prefix does not have yet. The Notepad++ workflow saves a file, closes and reopens it, appends to it, uses the clipboard and switches theme. scripts/benchmark-app-matrix.py runs the whole table again.

Benchmarks

The same programs on the same machine, against Wine 11.0 and Soda 11.0-32-experimental.

Process completion time

Time until the main window appears

Direct3D 11 frame rate

ClassiCube 1.3.8, fixed seed 1, four alternating rounds:

RuntimeMedian FPSSamples (FPS)
Raven71.572, 73, 54, 71
Wine 11.063.065, 68, 61, 61
Soda 11.0-32 exp.63.064, 64, 61, 62

These replace the earlier ClassiCube series; its scene configuration was not verified against the retained samples. Raven uses its default execution mode.

ComponentValue
CPUIntel Core i7-13700H (14 cores, 20 threads, up to 5.0 GHz); 8 logical CPUs available to the benchmark environment
Memory31 GiB
KernelLinux 7.2.11
UserlandUbuntu 26.04.1 LTS
GraphicsMesa 26.0.8 lavapipe (software Vulkan), two rendering threads
Displaylabwc 0.9.3, headless, one isolated instance per run

The workloads: a program that exits at once, a SQLite query over eight million rows, a Direct3D 11 triangle checked pixel by pixel, 2,000 Direct3D 11 frames at 256 by 256, the time to the main window of Notepad++ and of the ClassiCube launcher, and ClassiCube 1.3.8 itself (Direct3D 11 build, world seed 1, 640 by 480, view distance 128, frames counted from the fifth to the fifteenth second after the world loads).

Every runtime starts from a copy of a prefix it initialised beforehand. Each workload runs three times and the charts show the median; ClassiCube runs four rounds alternating the runtimes, so a change in machine load weighs on both. The Soda Direct3D 11 triangle did not finish within its 600-second limit. Software Vulkan keeps the numbers reproducible anywhere; a hardware GPU raises them for every runtime.

The earlier chart data, with CPU time and memory, remains available; its ClassiCube entry is superseded by the table above. The scripts scripts/benchmark-wine.py, benchmark-apps.py, benchmark-frames.py and benchmark-classicube.py run these workloads. The ClassiCube runner groups trials by runtime; use separate one-trial runs to alternate runtimes.

License

Raven's Linux runtime is licensed under GPL-3.0-or-later. Its own guest adapters listed in LICENSES.json remain MIT-licensed. Imported and derived components keep their own licenses and notices (GPL, LGPL, MIT, BSD, libpng, Unicode and Skia). Earlier MIT grants remain valid.

LICENSES.md records the component boundaries and distribution requirements; packaging describes how to include the corresponding sources and notices with a build.

关于 About

A Windows your apps recognize.
cmakecompatibility-layercppcpp20desktop-applicationsdirect3ddirectxdxvkgaminginstallerlinuxpe-loaderptracevulkanwaylandwin32win32-apiwindowswindows-compatibilityx11

语言 Languages

C56.5%
C++36.5%
Python3.8%
CMake3.1%
Makefile0.0%
Assembly0.0%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
1158
Total Commits
峰值: 340次/周
Less
More

核心贡献者 Contributors