Wine Reviews has release information and reviews of Windows applications and games running on Linux macOS and ChromeOS using Wine from Winehq.org Proton Lutris Q4Wine PlayOnLinux PlayOnMac WineBottler WineSkin WineTricks and Wine-Staging.
Lutris helps you install and play video games from all eras and from most
gaming systems. By leveraging and combining existing emulators, engine
re-implementations and compatibility layers, it gives you a central interface
to launch all your games.
The client can connect with existing services like Humble Bundle, GOG and Steam
to make your game libraries easily available. Game downloads and installations
are automated and can be modified through user made scripts.
Changelog:
2nd beta release for 0.5.13
Add support for Proton
Add drag and drop on the main window. Dropped files will be matched
No-Intro, Redump and TOSEC checksums.
Add support for ModDB links in installers (moddb python module required)
Added "Missing" sidebar option for games whose directory is missing
Re-style the configuration, preferences, installer and add-games windows
Group configuration options into sections
Added checkbox to stop asking for the launch config for a game
Added checkbox to sort installed games first
Support for launch-configs in shortcuts and the command line
Show platform badges on banners and cover-art
Installing games from setup files can now use different presets (Win98, 3DFX, ...)
Add filter field to runner list
Show game count in search bar
Workaround Humble Bundle authentication issues by allowing importing
cookies from Firefox
Valve has just published Proton 7.0-6 as the newest version of this
Wine-based software that powers Steam Play for running Windows games on
Linux. Proton 7.0-6 had been available in testing and release candidate
form since the end of last year while now has been promoted to stable.
With Proton 7.0-6 comes more Windows games that are playable under
Linux. The newly-supported titles include Gotham Knights, UNCHARTED:
Legacy of Thieves Collection, Heroes of the Dark, Super Arcade Racing,
Crazy Machines 3, King under the Mountain, NinNinDays2, and Mahjong
Ladies.
Proton 7.0-6 also fixes an Ubisoft Connect launcher failure, fixing a
texture issue on the menu areas on Quake III Arena, several Microsoft
Flight Simulator fixes, and a range of other game fixes. Proton 7.0-6
also ships with Wine Mono 7.4 and DXVK-NVAPI 0.6.
Now playable:
Gotham Knights
UNCHARTED: Legacy of Thieves Collection
Heroes of the Dark
Super Arcade Racing
Crazy Machines 3
King under the Mountain
NinNinDays2
雀姬 (Mahjong ladies)
Fix Ubisoft Connect launcher failure caused by launcher update.
Fix Septerra Core hanging on redistributables installation.
Fix Persona 5 Royal crashing when creating game save data.
Fix Vampire Survivors intermittent error message.
Fix Super House of Dead Ninjas, Enemy Mind, and Out There Somewhere frame hitching every few seconds.
Fix Zeepkist freezing when using controller.
Fix Overcooked! All You Can Eat being unable to add a second controller-using player.
Fix Quake III: Arena and Quake III: Team Arena displaying weird texture over the menu.
Fix the new EA launcher displaying a blank window.
Fix Marvel Snap not being able connect to online services.
Fix Microsoft Flight Simulator crashing during longer flights.
Fix Microsoft Flight Simulator not displaying live traffic.
Fix Microsoft Flight Simulator not starting after a recent game update.
Fix Microsoft Flight Simulator crashing when starting next to big cities.
Fix Sackboy: A Big Adventure failing to start the first time it's launched.
Fix Spyro Reignited Trilogy playing intro video in a wrong language.
Fix Jurassic World Evolution 2 bad performance with recent Proton versions.
Fix multiple monitor support in Project Cars 2 and Project Cars 3.
Fix Korean not being rendered correctly in Romance of the Three Kingdoms XIII launcher.
Fix multiple languages not rendering correctly in Sins of a Solar Empire: Rebellion.
Fix Lost Lands: Dark Overlord, Lost Lands: Dark Lord, Lost Lands:
Redemption, and Haunted Hotel: Silent Waters Collector's Edition
crashing when trying to set a wallpaper.
Fix video playback regression with Chronos: Before the Ashes.
Improve video playback with OUTRIDERS and ToGather: Island.
There will always be apps — mostly games — whose publishers won’t
port them to the Mac for financial or contractual reasons. Codeweavers’
CrossOver offers a simple, convenient way to run many of those apps. The
result isn’t as reliable or universal as other solutions, but it’s a
lot cheaper and easier, and with CrossOver’s helpful database of app
functionality and generous try-before-you-buy period, you can see
whether it’ll run the apps you want to use before you commit your
hard-earned cash.
CrossOver
translates Windows commands into Mac ones on the fly — like hiring an
interpreter to help you in a foreign country, rather than learning the
language yourself. It’s based on the open-source WINE project, but its
improvements to standard WINE make it a lot easier for everyday users to
successfully run.
CrossOver 22 is only available from Codeweavers' web site.
$74 gets you a full copy and a year’s worth of updates to the app. Once
that period elapses, you can still use the copy you already have as
long as you want to, but you won’t be able to download fresh updates.
You'll have a limited window of time after your subscription expires to
renew it for roughly $30.
You can also pay $494 for CrossOver Life, which removes the need for
annual renewals. The company tends to offer once-a-year discounts around
Black Friday, sometimes slashing the cost of a year's updates to as
little as $15.
After a quick installation, CrossOver does most of the hard work for
you. It sets up a “bottle” — a contained virtual environment — in which
you can install basic Windows or Linux underpinnings, plus any apps
you’d care to run. CrossOver builds in shortcuts to install popular apps
like Steam,
and it can seamlessly install apps from the Internet, from downloaded
ISO files, or from a physical disc, should you have an external drive.
You
can have multiple separate bottles for different apps, or put all the
apps you use in a single vessel. As with containerized software setups
like Docker,
this makes CrossOver easier and less stressful to use. In the unlikely
event that something goes horribly wrong inside a bottle, it won’t
affect your larger system. You can just delete the bottle and start
fresh.
Each
new version of CrossOver offers under-the-hood improvements to help all
apps in general and specific titles in particular run better. But
CrossOver 22’s biggest leap forward lies in its overhauled interface.
Previous
versions hid important toggles and features behind poorly designed
contextual menus. CrossOver 22 takes its design cues instead from the
Mac App Store, putting crucial options in full view. It’s easier than
ever to run apps you’ve already installed, or add new ones.
Codeweavers’
database of popular apps and their compatibility, maintained by
volunteer testers, is now more directly integrated into the app itself,
rather than requiring a separate visit to Codeweavers's web site. That
database isn’t comprehensive — some titles I’ve personally used under
CrossOver aren’t included — but it’s a good place to start when you’re
curious about whether a particular app will run there.
The path between original Windows code and successful Mac execution
isn’t always straight. For instance, Windows games use a set of tools
known as DirectX to enable 3D graphics. CrossOver has to pass those
commands through an open-source translator called DXVK, which maps them
to the open-source Vulkan 3D standard. These Vulkan commands must then
go through another interpreter, MoltenVK, to run under Apple’s own 3D toolkit, Metal.
Each of these handoffs eats up processing power and makes the
resulting games run slower and less reliably than they would if coded
for the Mac from the get-go.
The beefier your processing power,
the better performance you’ll get from CrossOver. Even though it’s an
Intel native app, it runs best on Apple silicon under Rosetta 2 emulation,
thanks to the sheer horsepower of the M1 and higher. (CrossOver plans
to eventually support Apple silicon, but Codeweavers says that
transition is likely years away.) Popular launcher apps like Steam, and
simpler 2D games like Guacamelee, ran without a hitch in my tests, but more sophisticated titles had various degrees of tradeoffs.
When I ran 2017’s Star Wars: Battlefront II on my stock M1 Mac Mini,
the game looked great. But depending on the game mode and the size and
type of the environments I found myself in, performance ranged from fast
and fluid to an unplayable crawl. I’ve seen YouTube videos of other
CrossOver users playing the game much more smoothly, even on levels that
choked my computer. If you want to game with CrossOver, having more
than 8GB RAM or something more powerful than a basic M1 will likely
serve you well.
Furthermore, Metal has different aims and
priorities than DirectX, trading some measure of tech sophistication for
the ability to run across MacOS, iOS, and tvOS. Even under Apple’s
recently announced Metal 3, there are just some things DirectX does for
which Metal lacks an easily translated equivalent.
I saw this firsthand playing Jedi: Fallen Order.
Though the game mostly ran smoothly barring some pauses for loading,
the world around my protagonist didn’t render right, presenting a mass
of flickering black triangles instead of realistic surroundings. I was
able to adapt and still enjoy the game, but if you’re looking for
absolute fidelity, consider this fair warning.
And even if
everything else goes swimmingly, there are some facets of Windows
software that just won’t work outside that platform, no matter what.
Barring some miracle in a future version, I’ll never know how well Star Wars: Squadrons
runs on CrossOver, because the anti-cheating software for its
multiplayer mode won’t cooperate, shutting down every attempt to install
the game.
ntel Macs can directly install Windows through Boot Camp, but this option isn't available on newer Apple Silicon-powered Macs.
Virtual machines like VMWare Fusion and Parallels Desktop
let Mac users run Windows and its apps. By emulating the entire Windows
operating system, they offer better compatibility with more kinds of
PC apps, especially games.
Both apps are Apple Silicon native and
can, with various degrees of workarounds, run Apple Silicon-friendly
ARM-based versions of Windows 11 (and their apps) natively. CrossOver
tops out at apps for Windows 10, and because of the engineering
complexities involved, Codeweavers says it won't offer a native Apple
Silicon version for several more years.
But Parallels and VMWare
each cost more than a year of CrossOver updates, and neither will work
without a copy of Windows itself. Even an older version of that can run
you as much as $140.
CrossOver 22 is impressive in its simplicity — at least in terms of how
easy it is to get select Windows applications up and running on macOS.
It's by no means perfect, and your mileage will vary dramatically
depending on the complexity of the applications you're looking to run,
not to mention the power of your Mac computer itself. But with prudent
use of the free trial to test your must-work apps, it's a great
opportunity to bridge the gap between Apple and Microsoft's computing
worlds.
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
The Wine development release 8.0-rc1 is now available.
This is the first release candidate for the upcoming Wine 8.0. It
marks the beginning of the yearly code freeze period. Please give this
release a good testing and report any issue that you find, to help us
make the final 8.0 as good as possible.
What's new in this release:
Bundled vkd3d upgraded to version 1.6.
Vulkan and OpenGL thunking optimizations.
More support for print processors.
Improved joystick control panel.
Long types printf format conversion finished.
Various bug fixes.
The source is available now.
Binary packages are in the process of being built, and will appear soon at their respective download locations.
Bugs fixed in 8.0-rc1 (total 52):
- #28290 shell32:shelllink - test_load_save() crashes randomly in Wine - #36681 ws2_32/tests/sock.c fails on gentoo without IPX support - #46649 Multiple applications need D3DXDisassembleShader() implementation (Tom Clancy's Rainbow Six: Vegas 2, The Void) - #48105 kernel32:console fails on Japanese and Chinese Windows - #51234 user32:clipboard test_ClipboardOwner() has a race condition with clipboard managers - #51456 oleaut32:typelib: test_CreateTypeLib(SYS_WIN32) fails in 64-bit Wine - #51457 The 32-bit version:install fails in 64-bit wineprefixes (now todo) - #51780 The user32:msg output is too big in Wine - #52507 user32:win has some spurious GetScrollInfo failures - #52875 riched20:editor fails with the UTF-8 code page - #52877 user32:msg - test_dbcs_wm_char() fails in Wine in the Japanese and Chinese locales - #52909 rpcrt4:ndr_marshall crashes on the latest Windows 8.1, 21H1 and 21H2 - #52910 mshtml:htmldoc fails on Windows with the UTF-8 codepage - #52965 kernel32:locale - test_GetLocaleInfoW() and test_invariant() fail on Windows in Hindi - #52980 conhost.exe:tty - test_tty_input() fails in most locales on Windows - #53183 shell32:shelllink - test_load_save() randomly fails to delete test.lnk in Wine - #53199 dinput:force_feedback - test_windows_gaming_input() sometimes has unexpected reference counts in Wine - #53207 user32:msg - test_button_messages() fails randomly in Windows and Wine - #53208 user32:msg - The SW_SHOWMINIMIZED test in test_messages() succeeds in Wine with fvwm - #53211 ddraw:ddraw1 has over 255 failures on the debian11 TestBot VMs - #53233 ddraw:ddraw1 - test_clear() has rare failures in Wine on the debian11 VM - #53240 dinput:device8 - test_sys_mouse() has some rare failures on the TestBot VMs - #53254 urlmon:url - test_URLDownloadToFile_abort() sometimes fails on Windows 7+ - #53327 Ragnarok Online bad performance - #53342 quartz:mpegaudio - The 64-bit test_streaming_events() times out on fg-deb64 - #53530 mshtml:htmldoc - test_editing_mode(TRUE, TRUE) sometimes fails - #53568 16bit applications refuse to start wine 7.15+ - #53646 Multiple installers crash in user32 (Drakan, Star Wars, Colin McRae, X-COM, etc.) - #53678 vbscript can not compile CaseClausules that do not use a colon - #53684 ntdll:info is broken on Windows 8 to 10 1709 in the GitLab WineTest builds - #53686 The 64-bit kernel32:console is broken on Windows in the GitLab WineTest builds - #53783 vbscript can not compile private const expressions - #53814 TMUnlimiter 1.2.0.0 requires ini files with whitespace in the section to be parsed properly - #53895 ddraw:ddraw1, ddraw:ddraw2, ddraw:ddraw4, ddraw:ddraw7 - test_cursor_clipping() fails on dual screen setups in Wine - #53927 script56.chm help file pages not functioning properly due to wine missing beforeprint and afterprint html events - #53950 dup2 error returns ENFILE instead of EBADF - #53964 Redim should fail on fixed arrays - #53966 NCryptExportKey is not implemented - #53968 NCryptSignHash is not implemented - #53971 postgresql installer 9.3 needs support for Username in WScript.Network - #53972 BCryptSignHash does not support BCRYPT_PAD_PSS - #53987 Regression in print handling in Framemaker 8 - #53996 MDB Viewer Plus: can not open database - #53999 JGlossator crashes - #54009 Wine segfaults on startup on macOS 12 and 13 - #54012 kernel32:heap - The 64-bit test_GlobalAlloc() fails on Windows 7 - #54043 Studio One Professional 5 crash on launch with an unimplemented function USER32.dll.RegisterSuspendResumeNotification - #54057 prints do not work in any application - #54075 wldap32:parse - test_ldap_paged_search() sometimes gets LDAP_SERVER_DOWN in Wine, crashes - #54087 mshtml:events sometimes gets a failure in Protocol_Continue() on Windows - #54098 winhttp:notification fails and times out systematically in Wine - #54111 Unable to run "make install" after "makedep: Add a helper function to skip spaces in strings."
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
The Wine development release 7.21 is now available.
What's new in this release:
OpenGL library converted to PE.
Support for multi-architecture PE builds.
More preparation work for Vulkan 32-on-64 support.
Support for creating import libraries without dlltool.
Locale data updates.
Various bug fixes.
The source is available now.
Binary packages are in the process of being built, and will appear soon at their respective download locations.
Bugs fixed in 7.21 (total 25): - #29974 StarBurn 13 crashes on disabling skins - #51418 fotoBiz X - Fatal error on startup - #51779 Visual Studio msvsmon fails to bind server socket in child processes - #52467 Kaseya Live Connect 9.5.0.28 management software sub-component crashes - #53081 Retina Mode broken since 7f7f9fa22c5cbe629e79a54257d5bd21403e80db - #53100 Euphoria: freezes every second while controllers are plugged in - #53153 SetWindowPos() incorrectly computes exposure region of parent window with WS_EX_COMPOSITED - #53484 dxgi:dxgi times out on the debiant VM - #53590 GetFileInformationByHandleEx() not fully implemented causing boost::directory_iterator failures with boost v1.79 and newer - #53606 First intro stops on last frame in multiple games (Darksiders Genesis, The Medium) - #53617 Imaris fails at exit with error, and keeps a process running. - #53631 Multiple 64-bit applications have issues with dialogs (DipTrace, foobar2000 installer) - #53676 vbscript can not exec_script - invalid number of arguments for Randomize - #53738 Cherry MIDI sequencer cannot read files with a path including CJK characters - #53749 Hotel Giant 2: black screen after changing resolution or enabling anti-aliasing - #53768 Winfile crashes due to unimplemented user32.dll.DragObject - #53798 Port Royale 2: incomplete text rendering - #53849 Apiset DLLs broken in non-PE builds - #53856 Wine 7.20 installs some windows files to the wrong location - #53859 Hades shows black screen at Vulkan mode - #53861 Non-PE builds fail after "makefiles: Add support for multiple PE architectures." - #53872 Adobe Reader XI crash opening settings in Protected Mode - #53879 Gothic 1 doesn't launch (msdbi.dll failed to initialize) - #53888 vbscript does not allow Mid on non VT_BSTR - #53893 ws2_32:sock - test_WSASocket() gets an unexpected raw protocol name in French on Windows
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
The Wine development release 7.0.1 is now available.
What's new in this release:
Various bug fixes
Translation updates
The source is available now.
Binary packages are in the process of being built, and will appear soon at their respective download locations.
Bugs fixed in 7.0.1 (total 32):
- #12732 Nota Bene crashes on install - #44202 undname.c fails to parse symbols with rvalue-reference semantics '&&' - #45916 x64dbg fails to load debuggee, needs ThreadScheduler_ScheduleTask - #50352 Maximum sockets per process is set very low - #50370 Gothic 1 doesn't start correctly when screen resolution of the game matches display resolution - #50433 'MsiBreak' custom action debugging aid should use custom action's name from 'CustomAction' table (currently uses 'Target' field) - #50869 Killing Wine process in Wine 6.5 doesn't terminate the application because of the new use of start.exe - #51163 WinOffice Pro 5.3 stops after splashscreen, needs WMI class SoftwareLicensingProduct - #51619 advapi32:registry fails in Wine because French & German timezone name translations are too long - #51900 regression: REAPER scrollbars flash between themed and non-themed - #52163 postgresql-9.3 installer expects scrrun:filesys_GetTempName to return filename with TMP suffix - #52298 Opening PPT with Freeoffice Presentations crashes on unimplemented function ole32.dll.OleConvertIStorageToOLESTREAMEx - #52426 BCryptSignHash mishandles empty arguments - #52434 Light Blue theme has rendering errors in tree views - #52436 In Light Blue theme, checkable toggle buttons (BS_AUTOCHECKBOX) look unchecked when hovered - #52446 Normal dlls with native subsystem id are no longer processed when importing system dlls with uppercase names - #52476 QuickLOAD (VB5 app) input value is changed by factor 10 - #52494 shell32 progman_dde tests crash if run immediately after prefix creation - #52510 alt:V mod for Grand Theft Auto V fails due to missing concrt140._Byte_reverse_table@details@Concurrency@@3QBEB - #52562 advapi32:registry fails in Wine because some French timezone name translations are too long - #52581 Internet MIDI crashes with Light Blue theme enabled - #52583 ApiSetView does not display export ordinals correctly - #52616 SteelSeries GG installer crashes on unimplemented function setupapi.dll.SetupQueryInfVersionInformationW - #52618 32-bit EXEs do not launch from build dir on macOS 10.14 in WOW64 - #52626 MahjongSoul needs unimplemented function combase.dll.RoSetErrorReportingFlags - #52667 DTS Master Audio Suite can't select save file location when wine's "Light" theme is used - #52679 Anno 1602 / 1602 A.D. graphics too dark / black - #52704 FreeHand 9 demo: invalid handle exception (0xc0000008) when attaching uxtheme.dll - #52787 Invalid function prototype for "RegisterUserApiHook" when compiling for C++ - #52953 GuiPy crashes on unimplemented function xmllite.dll.CreateXmlReaderInputWithEncodingCodePage - #53034 Lazarus: menu text disappears under mouse if light theme is enabled - #53430 urlmon:url fails due to unexpected redirection
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
Lutris helps you install and play video games from all eras and from most
gaming systems. By leveraging and combining existing emulators, engine
re-implementations and compatibility layers, it gives you a central interface
to launch all your games.
The client can connect with existing services like Humble Bundle, GOG and Steam
to make your game libraries easily available. Game downloads and installations
are automated and can be modified through user made scripts.
CrossOver is a commercial compatibility layer by CodeWeavers, based on the Wine project,
which aims to run popular Windows software on Unix-based operating
systems. CodeWeavers released the first beta of CrossOver for Chrome OS three years ago, and now it's finally ready for the masses.
CrossOver 20 was released today as the first version that officially
supports Chrome OS. It comes configured to run thousands of popular
Windows applications, including World of Warcraft, Steam, Quicken, GOG
Galaxy, Microsoft Office, and others. Unlike the Parallels-based VM that Google is working on, CrossOver translates Windows API calls as needed, rather than emulating the entire operating system.
The Chrome OS version now runs on top of the Linux container, instead
of running as an Android application like earlier betas did.
CodeWeavers said in a blog post, "We feel that providing CrossOver using
this route provides a superior user experience." However, this does
mean that older Chromebooks without support for Linux apps won't be able
to use the newer version.
CrossOver is paid software with three packages available.
You can buy the current version for $39.95, and a Pro version with free
software upgrades for a year (plus discounts on future releases) and
additional customer support is available for $59.95. Finally, if you
think you'll use CrossOver until the heat death of the universe, a
lifetime support option is available for $494.00.
CrossOver® 20 for macOS and Linux has arrived! Additionally, Chrome OS joins its cousins, macOS and Linux, in bringing a smooth Windows application experience with CrossOver 20.
Across All Platforms CrossOver 20 includes Wine 5.0 (with over 3,400 improvements) and the ability to rate applications within the CrossOver UI.
Mac The macOS version offers support for macOS 11, including Apple Silicon. The macOS version also includes major improvements to support for games, including 32 bit games that are no longer available for the Mac, DirectX11 and 12 games and the Steam client.
Linux The Linux version undertook a thorough review of Linux distribution support, with an effort to integrate cleanly with all modern distributions and support for CrossOver to upgrade itself.
Chrome OS Our CrossOver Chrome OS product shares about 99% of its DNA with our CrossOver Linux product. Our initial Chrome OS product was built on Android, because Google provided support for Android applications. However, since then, Google has provided support for Linux applications. We feel that providing CrossOver using this route provides a superior user experience. Using Google’s Linux container support, CrossOver enables a Chromebook to run various Window applications as if they were native and without requiring a Windows operating system. Not only does it integrate directly with the Chrome OS shelf, it also works in offline mode as well as it does in online mode.
It’s not just cosmetic... Yes! We have a new look. The completely reimagined corporate branding and its sub-brands, CrossOverTM, PortJumpTM and ExecModeTM reveal the evolution of the company over the past 14 years, while maintaining our ongoing commitment to the open-source community and its talent.
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
Your antivirus program may report that some PlayOnMac .exe files
contain malware. Don't be alarmed! This is a false positive due to the
fact that these .exe may interact with emulated Windows system registry
and that could be considered harmful behavior for some antivirus
programs. These .exe are safe to use, especially on macOS which do not
use registry. If you encounter false positive, we really advise you to
report it to your antivirus software company. Even the commercial
version of Wine (Codeweavers) or ports relying on wine have the same
issue.
CodeWeavers just released CrossOver 19.0.0 for both macOS and Linux!
The capstone of CrossOver 19 is the new ability to run 32 bit Windows applications within a 64 bit process. This enables us to support 32 bit Windows applications on the new macOS release, Catalina, which removed all support for 32 applications in October.
This has been a remarkably difficult challenge, and I appreciate everyone's patience with us as we strove to make this happen. I particularly want to call out and celebrate the work of Ken Thomases, the senior developer at CodeWeavers who has worked tirelessly on this for the past year and a half.
In addition to that change, CrossOver’s core technology Wine has been updated to bring much of the developments of the past year to all of our users on both Mac and Linux. These changes include over 5,000 individual improvements, all of which will act together to improve the end user experience with CrossOver.
We have improved installation compatibility with recent Linux distributions and also taken the step of upgrading CrossOver to rely on Python 3...
Putty for Mac
$15.00
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
Wine development release 4.12.1 is now available for Linux FreeBSD and macOS
The Wine development release 4.12.1 is now available.
What's new in this release:
Fixes for broken 64-bit prefix initialization.
The source is available now.
Binary packages are in the process of being built, and will appear soon at their respective download locations.
Bugs fixed in 4.12.1 (total 5):
46473 Settlers IV History Edition 47403 ALT+TAB results in a sticky ALT in the application when switching back 47464 64-bit WINEPREFIX creation/update fails with Wine 4.12 (wineboot crashes after building as PE file) 47467 WINEPREFIX creation/update: setupapi fails to register several dlls after building as PE file starting with Wine 4.12 47468 LINE 5.x launcher crashes on startup
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
Wine development release 4.12 is now available for Linux FreeBSD and macOS
The Wine development release 4.12 is now available.
What's new in this release:
Still more DLLs are built as PE files by default.
Support for Plug & Play device drivers.
Better support for the Visual Studio remote debugger.
More support for enumerating display devices.
Various bug fixes.
The source is available now.
Binary packages are in the process of being built, and will appear soon at their respective download locations.
Bugs fixed in 4.12 (total 27):
18490 Multiple games fail to set pixel format on D3D device context created on desktop window (Empire: Total War, Napoleon: Total War, Utopia City) 21378 lego digital designer crashes on scrolling 27576 RT Se7en Lite installer hangs 31260 Tomb Raider 4 Broken Lighting 31737 Need For Speed Hot Pursuit (2010): Gamepad is not configured 34978 Many applications need a EnumDisplayDevicesW implementation for multi-monitor environment support (DisplayFusion, Turbo Tax 2012, WPF 4.x .NET apps, CEFv3 apps, VS Code < 1.16.0) 35413 err:module:import_dll Library libgcc_s_sjlj-1.dll not found needed by mono-2.0 36061 winedbg crash dialog shows a leak in imm32 37709 All Qt5 based applications have broken menu/combos positioning in multiple monitor setup due to GetMonitorInfo() returning the same hard-coded device name for all monitors 38421 Windows Media Player 9 & 10: mp3 sound plays too fast 41608 Golden Krone Hotel fails to launch (InitializeProcThreadAttributeList is a stub) 42374 Hardwood Solitaire can not connect to his server 45656 Acronis Storage Filter Management Driver 'fltsrv.sys' crashes on unimplemented function 'ntoskrnl.exe.KeBugCheckEx' in 'CrashOnError' mode 47013 winebus.sys: hidraw_set_feature_report buffer too small for some devices in SteelSeries Engine 47014 Multiple kernel drivers need 'ntoskrnl.exe.ExInitializePagedLookasideList' implementation (Norton 360/Symantec Eraser Control Driver) 47017 Symantec Eraser Control Driver 'eeCtrl64.sys' (Norton 360) crashes on unimplemented function ntoskrnl.exe.IoGetStackLimits 47340 Adobe Acrobat Reader DC crashes on startup with corefonts installed 47352 Levelhead: Can't connect to game's network 47367 Some WPF 4.x apps from Windows 10 SDK (10.0.17763.x) spam console with fixme:d3d:wined3d_driver_info_init Unhandled OS version 6.3, reporting Win 8. (WinVer set to 'Windows 8.1') 47385 Overwatch crashes on unimplemented function mfreadwrite.dll.MFCreateSinkWriterFromURL 47392 Drakensang Online crashes when exiting fullscreen 47399 Mozart 11-13 crashes on startup 47410 Regression in 4.10, Dune 2000 installer crashes in winevdm 47418 Quickbooks 2018 installer crashes on Validating Install 47424 DataTransferLength in SCSI_PASS_THROUGH and SCSI_PASS_THROUGH_DIRECT *must* have return value 47431 Multiple applications and games show too high CPU usage and UI slowness/lag with wine-4.11-84-g074abfe097 (EnumDisplayMonitors implementation uses expensive registry accesses) 47443 compile error: undefined reference to `clock_gettime'
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
Wine development release 4.11 is now available for Linux FreeBSD and macOS
The Wine development release 4.11 is now available.
What's new in this release:
Updated version of the Mono engine, including Windows.Forms.
More DLLs are built as PE files by default.
Faster implementation of Slim Reader/Writer locks on Linux.
Initial support for enumerating display devices.
Various bug fixes.
The source is available now.
Binary packages are in the process of being built, and will appear soon at their respective download locations.
Bugs fixed in 4.11 (total 17):
8848 SWAT4 Areas that should be in shadow and people are rendered solid black 22253 Horizontal scrolling with the mouse wheel does not work in list views 24211 ispq crashes on 'create account' with devenum enabled and without native qcap 28153 AutoIt v3.x @DesktopRefresh macro returns 0 (device caps VREFRESH hard-coded to 0) 30822 Max Payne 3 not running 34687 Port Royale 2 crashes on startup (SymGetLineFromAddr() returns unix-style path for source file) 34741 Catzilla 1.0 doesn't work: EAccess violation 34742 Catzilla 1.0 doesn't allow to use any display resolutions other than 576p 35477 'epsilon' 64K demo/intro by mercury crashes on start up 39071 7-Zip 15.06 looks broken after being minimized 39337 Legacy of Kain: Soul Reaver crashes at intro video when being run in desktop resolution > 640x480 45218 Fallout 4 Script Extender fails to allocate trampoline buffers 47164 .NET Framework 4.0 installer fails when Wine is compiled with GCC 9.1.1 47167 Chromium Embedded Framework (CEF) applications display no content when wine is compiled with gcc-9 47327 Japanese texts are overlapped in notepad when using bitmap font. 47371 Nero CoverDesigner doesn't install - missing support for BCRYPT_RSA_SIGN_ALGORITHM 47378 ole32: native build (without-mingw) is broken
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
On Tuesday (March 26, 2019), Valve released Proton 4.2, a new update to their Steam Play
compatibility layer based on Wine 4.2. The previous major version of Proton was
based on Wine 3.16.
As with CodeWeavers's own projects, the strong preference for work going
into Proton is to also get the changes into upstream Wine. There are many benefits
to this. First, all Wine users will benefit from these fixes, whether they are
end users of Wine itself, CrossOver users, or users of any other Wine fork.
There are also benefits for the maintainers of Proton. For example, upstreaming
patches helps prevent regressions, thanks to Wine's extensive test suite; it
lowers the maintenance burden, as there are fewer changes to move between Wine
versions; it ensures code quality, since patches to Wine are reviewed by the
Wine community; and it widens the pool of users to test, since Wine is used in
many, many places other than Proton.
Proton 3.16-8 has 380 commits on top of Wine 3.16. After rebasing onto Wine
4.2, there are 214 commits. That means that 166 patches from the 3.16 branch
have either been upstreamed, or are otherwise no longer needed going forward.
In addition, a lot of work we have done for Wine 4.2 never got pulled back into
Proton 3.16.
Let's take a look at how upstream Wine has improved thanks to Valve's
sponsored work on Wine. Below is a list of changes to upstream Wine that were
made in order to improve games running in Proton.
Wine development release 4.5 is now available for Linux FreeBSD and macOS
The Wine development release 4.5 is now available.
What's new in this release:
Support for Vulkan 1.1.
Better support for kernel objects in device drivers.
Still more Media Foundation APIs implemented.
Support for SVG elements in MSHTML.
Fixes for case conversion troubles in Turkish locale.
Various bug fixes.
The source is available now.
Binary packages are in the process of being built, and will appear soon at their respective download locations.
Bugs fixed in 4.5 (total 30):
19098 Regedit randomly crashes when deleting registry keys 23455 FileAlyzer 1.6.0.4, Affinity-installer-1.6.5.123 can't load PE images (needs imagehlp.ImageLoad and imagehlp.ImageUnload implementation) 26445 URLDownloadToFileW does not support FTP URLs 38087 Settlers III: mouse not working on start screen and menu (after fixing raw input bug 33479) 38801 Settlers Heritage of Kings crashes when loading a map 41591 Solidworks 2016 installer needs ADVAPI32.dll.RegLoadAppKeyW 45322 League Of Legends installer on tr_TR.UTF-8: unknown color "systemhighlight" 45429 Inno Setup v5.x based game-installers using 'wintb' plugin fail with: 'Runtime error 229 at
' (Win7+ ITaskbarList3 ThumbBar/Thumbnail semi-stubs needed) 45497 Biamp Systems Nexia v3.3: Button labels missing in DSP controls 45998 64-bit FACEIT Anti-cheat client claims "Your system is out of date, you are missing important Windows updates!" (needs 'wintrust.CryptCATAdminAcquireContext2' stub) 46115 Cursor in unity games moving down and to the right one pixel on any mouse interaction 46222 Star Citizen hang on splash screen 46643 Belarc Advisor Computer Inventory 9.0 crashes on unimplemented function advapi32.dll.AuditQuerySystemPolicy with WinVer >= Windows Vista 46807 The Sims hangs when opening menus 46812 PS4 Remote Play installer 2.8.x fails, claims 'You need the Media Feature Pack' (MsiGetDatabaseState is called from a custom action) 46830 Gaea 1.0.x installer stops: err:msi:ITERATE_Actions Execution halted, action L"WixSchedInternetShortcuts" returned 1603 (MsiViewGetErrorA/W() needs to be RPC-compatible) 46833 Multiple application installers fail with err:msi:ITERATE_Actions Execution halted, action L"" returned 1603 (iTunes 12.9.3.3, Dameware Mini Remote Control 10.x) 46845 Freelancer: character glitches in cutscenes after loading a saved game 46846 msi x64 installer does not display splash and other texts like a license agreement 46848 PTC Mathcad Prime 3.0 Web installer crashes on unimplemented function api-ms-win-crt-convert-l1-1-0.dll.wctrans 46851 Can't input Japanese text after updating to 4.4. 46881 Power World Simulator installer needs unimplemented function msi.dll.MsiSourceListForceResolutionW 46885 Multiple applications fail to install with wine-4.4-114-g15f852015a+, reporting err:msi:ITERATE_Actions Execution halted, action L"BindImage" returned 1615 (MS Office 2007, AstroToaster 2.x. MS .NET Framework 4.x) 46892 redefinition of typedef ‘UUID’ 46894 SIMATIC WinCC V15.1 Runtime installer (.NET 4.0) fails in CoreLib::GetPhysicalMemoryAmountWmi() (missing 'DeviceLocator' property of 'Win32_PhysicalMemory' WMI class) 46895 SIMATIC WinCC V15.1 Runtime installer (.NET 4.0) fails due to missing 'OperatingSystemSKU' property of 'Win32_OperatingSystem' WMI class 46906 SIMATIC WinCC V15.1 Runtime installer: SeCon tool 'SeCon_Win32.exe' crashes due to hnetcfg 'INetFwRules::get__NewEnum' not initializing out parameter 46907 msi crashes in RemoveFiles action for a broken msi 46908 Support msvcp mtx_init 'mtx_try' flag (0x2) to create a mutex object that supports test and return 46909 Missing (black) textures in Black & White
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
Wine stable release 4.1 is now available for Linux FreeBSD Android and macOS
What's new in this release:
Support for NT kernel spinlocks.
Better glyph positioning in DirectWrite.
More accurate reporting of CPU information.
Context handle fixes in the IDL compiler.
Preloader fixes on macOS.
Various bug fixes.
The source is available now.
Binary packages are in the process of being built, and will appear soon at their respective download locations.
Bugs fixed in 4.1 (total 30):
11070 importpfx fails, needs PFXImportCertStore implementation
33456 D3DXMatrixTransformation: Broken calculation when scalingrotation and scaling is used
38274 White water in Heroes VI (DXTn volume textures)
38558 cmd.exe bundled with Windows XP messed up when using FOR /F
39663 GOG Galaxy client 1.x hangs or reports 'Something went wrong during DeelevateStrategy' error in Win7 mode (GOG Galaxy service needs wtsapi32.WTSQueryUserToken implementation)
39890 Orcish Inn fails to start with exception System.NotImplementedException
40441 Chicken tournament crashes when loading texture
42491 wine builds are not reproducible (widl needs initializization of datatype2 in add_typedef_typeinfo)
43252 IcmpSendEcho doesn't work with a ReplySize<56 br=""> 43322 Regression in Test Drive Unlimited 2, visual artifacts 44469 Multiple apps using Windows 10 v1507+ UCRT crash due to multiple missing api-ms-win-crt-private-l1-1-0.dll._o__xxx stubs/forwards (Win10 DISM pkgmgr.exe, MS DirectX Shader Compiler) 44941 Bioshock Remastered doesn't start in windowed mode 45326 Multiple 64-bit kernel drivers crash on unimplemented function ntoskrnl.exe.__C_specific_handler (NoxPlayer 6.x, MTA:SA 1.5.x) 45447 [World of Tanks] Borderless window broken since 1.0.2 46137 NI Kontakt 5 crashes on unimplemented function msvcp140.dll.?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W56>
<56 br="">@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z 46298 Middle-earth: Shadow of War (steam appid 356190) crashes on launch 46303 Warcraft 3: Reign of Chaos (Czech language) can't be installed from CD 46453 The Testament of Sherlock Holmes crashes while loading level with builtin d3dx9_43 46465 Visual Studio 2015 crashes on unimplemented function msvcp140.dll._Equivalent 46469 Only the first XInput controller is detected in wine 4.0 46479 64-bit mono crashes in RtlAddGrowableFunctionTable 46482 Gas Guzzlers Combat Carnage crashes when changing screen resolution 46485 PBM_STEPIT crashes with division by zero when MinVal == MaxVal == 0 46488 Diablo 2 LoD: Direct3D regression: Unhandled exception: Access_violation (c0000005) 46489 ClrMamePro crashes on update attempt 46494 64bit WinMerge crash after clicking "About WinMerge" 46499 Multiple games crash in GetRawInputData when exiting(House Party, Murderous Pursuits, ICEY) 46520 Kindred Spirits on the Roof crashes 46536 Empire Earth (GOG version) main menu rendering is broken 46569 ToDoList 7.1 : fails to launch after WINE upgrade to 4.0 version56>
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
Wine stable release 4.0 is now available for Linux FreeBSD Android and macOS
The Wine team is proud to announce that the stable release Wine 4.0 is now available.
This release represents a year of development effort and over 6,000
individual changes. It contains a large number of improvements that are
listed in the release notes below. The main highlights are:
Vulkan support.
Direct3D 12 support.
Game controllers support.
High-DPI support on Android.
The source is available now.
Binary packages are in the process of being built, and will appear soon at their respective download locations.
What's new in Wine 4.0
======================
*** Direct3D
- Initial support for Direct3D 12 is implemented. Direct3D 12 support
requires the vkd3d library, and a Vulkan-capable graphics card.
- The Multi-Threaded Command Stream feature is enabled by default.
- OpenGL core contexts are always used by default when available. In
the previous release, these were already used by default for
Direct3D 10 and 11 applications on AMD and Intel graphics
cards. That has been extended to all graphics cards, and all
versions of Direct3D before 12.
- Among others, the following notable Direct3D 10 and 11 features are
implemented:
- Multi-sample textures and views, as well as multi-sample resolves.
- Per-sample fragment shading.
- Support for 1D textures.
- Draws without render target views or depth/stencil views.
- Multiple viewports and scissor rectangles per draw.
- Depth clipping control.
- Depth bias clamping.
- Stream output without geometry shaders.
- Several more capability queries.
- Several more resource formats.
- The "depth bias clamping" feature mentioned above requires the
ARB_polygon_offset_clamp/EXT_polygon_offset_clamp OpenGL
extension. All Direct3D 10+ capable hardware should be able to
support that extension, but it has come to our attention that some
NVIDIA "Legacy Drivers" do not. We encourage affected users to
explore whether the Free Software Nouveau drivers meet their needs.
- Several Direct3D 11 interfaces have been updated to version 11.2,
and several DXGI interfaces have been update to version 1.6. This
allows applications requiring those newer interfaces to start
working.
- The first steps towards more fine-grained locking in the Direct3D
implementation have been taken. This will be an ongoing effort to
take better advantage of modern high core count CPUs.
- Support for using the correct swap interval is implemented, for both
DXGI and DirectDraw applications.
- Application-configurable frame latency is implemented for Direct3D
9Ex and DXGI applications.
- S3TC-compressed 3D textures are supported. S3TC-compressed 2D
textures were already supported, provided the OpenGL drivers
supported them.
- When the ARB_query_buffer_object OpenGL extension is available,
query results can be polled with lower latency, resulting in a
modest performance improvement in specific cases.
- Validation of Direct3D 8 and 9 resource pool and usage restrictions,
as well as blit restrictions, has been improved.
- The Direct3D graphics card database recognizes more graphics cards.
- New HKEY_CURRENT_USER\Software\Wine\Direct3D registry keys:
- "MultisampleTextures" (REG_DWORD)
Enable (0x1, default) or disable (0x0) support for multi-sample
textures.
- "Renderer" (REG_SZ)
The backend API to target. Possible values are "gl" (default) for
OpenGL and "gdi" for GDI.
- Deprecated HKEY_CURRENT_USER\Software\Wine\Direct3D registry key:
- "DirectDrawRenderer"
This has been superseded by the "Renderer" setting above.
- Removed HKEY_CURRENT_USER\Software\Wine\Direct3D registry key:
- "StrictDrawOrdering"
This feature was previously deprecated in favor of the
multi-threaded command stream feature, and has been completely
removed.
*** Graphics
- A complete Vulkan driver is implemented, using the host Vulkan
libraries under X11, or MoltenVK on macOS.
- A builtin vulkan-1 loader is provided as an alternative to the SDK
loader.
- Icons in PNG format are supported, enabling loading high-resolution
256x256 icons.
- The standard icons include a 256x256 version to take advantage of
the PNG support.
- Many Direct2D interfaces have been updated to version 1.2.
- New HKEY_CURRENT_USER\Software\Wine\Direct2D registry key:
- "max_version_factory" (REG_DWORD)
Limit the interface version of the ID2D1Factory interface to the
specified version. 0x0 for ID2D1Factory, 0x1 for ID2D1Factory1,
etc. By default there is no limit.
- Using an ARGB visual as default X11 visual is supported.
- The old 16-bit DIB.DRV driver is implemented using the DIB engine.
- Polygon drawing in the DIB engine is much faster for large polygons.
- A0, A1 and A2 paper sizes are supported for generic printers.
- Arrows are supported in GdiPlus.
*** Kernel
- Support for running DOS binaries under Wine is removed. When
execution of a DOS binary is requested, an external DOSBox instance
is launched. This doesn't apply to Win16 binaries, which are still
supported internally.
- All the CPU control and debug registers can be accessed by kernel
drivers, including on 64-bit.
- Events, semaphores, mutexes and timers are implemented in kernel
mode for device drivers.
- The WaitOnAddress synchronization primitives are supported.
- Reported processor information correctly distinguishes logical and
physical CPU cores to support hyper-threading.
- Detailed BIOS information can be queried on Linux platforms.
- The various debugger APIs support manipulating a 32-bit Wow64
process from a 64-bit process context.
- Application settings, compatibility information and execution levels
are recognized in application manifests.
- The various file I/O completion modes are implemented.
- Debug registers are supported on NetBSD.
*** User interface
- The infrastructure for setting DPI awareness and scaling of non
DPI-aware applications is implemented. However, actual scaling of
window contents is only supported on Android at this point.
Scaling is disabled by default and can be enabled by setting the
"DpiScalingVer" value under HKEY_CURRENT_USER\Control Panel\Desktop.
- Window class redirection is supported, enabling support of Common
Controls version 6 features for standard USER controls like buttons.
- The standard USER controls Button, Listbox, Combobox, Edit and
Static support version 6 features, including theming.
- The standard Task Dialog is implemented, including support for
icons, hyperlinks, progress bars, and various other UI elements.
- Cue banners are supported in version 6 of the Edit control.
*** Desktop integration
- Exporting MIME-type file associations to the native desktop can be
disabled with a checkbox under the Desktop Integration tab in
winecfg. It can be configured programmatically by setting the
"Enable" value under
HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations.
- The File Dialog can display file properties like size, times and
attributes.
- The File Dialog optionally shows the Places toolbar on the left-hand
side.
- The shell folder Public is used instead of AllUsersProfile to follow
the behavior of recent Windows versions.
- The shell File Browser supports keyboard shortcuts to rename (F2
key) and delete (Delete key) shell folders.
- Many standard icons are added to the Shell library.
- Shell Autocompletion is supported.
- In desktop mode the taskbar won't be displayed on top of fullscreen
windows.
- Additional names are provided for standard cursors to better match
existing X11 cursor themes.
*** Input devices
- HID game controllers are supported in the XInput and Raw Input APIs.
- An SDL driver is implemented to make SDL game controllers
available through the HID interface.
*** Internet and networking
- JScript has an EcmaScript compliant mode, which supports a number of
features not available in legacy mode.
- JavaScript property accessors are supported.
- HTML style object is rewritten to support standard-compliant mode.
- HTML documents respect X-UA-Compatible HTTP header, allowing web
pages to request specific compatibility mode. The
HKEY_CURRENT_USER\Software\Wine\MSHTML\CompatMode key may be used to
override the requested mode.
- MSHTML supports non-HTML elements, allowing limited SVG support.
- A number of new HTML APIs are supported.
- The proxy server can be configured through the Internet Control
Panel applet.
- Stream I/O is implemented in WebServices.
- The Web Services on Devices API (WSDAPI) is implemented, including
sending and receiving the various message types.
- More system information is reported through WBEM, including CPU,
BIOS, video controller, and network adapter properties.
*** Cryptography
- Asymmetric encryption keys, as well as RSA and ECDSA signature
verification are supported.
- The GCM and ECB encryption chaining modes are supported.
- Optimal Asymmetric Encryption Padding (OAEP) is supported in RSA
encryption.
- A Kerberos security provider is implemented, supporting Kerberos
authentication.
- A selection dialog for public key certificates is implemented.
- If available, GnuTLS is used on macOS in preference to the
CommonCrypto framework.
*** Text and fonts
- Character tables are based on version 11.0.0 of the Unicode Standard.
- The new subpixel font rendering of FreeType >= 2.8.1 is supported.
- When a font face is missing, FontConfig is queried to provide
possible substitutions.
- The font selected in the console emulator properly scales with the
display DPI.
- Memory font resources are supported in DirectWrite.
- The builtin Wingdings font contains clock images.
*** Audio
- The Windows Media Player interfaces are implemented and support
media playback.
- An MP3 decoder is provided as DirectX Media Object.
*** macOS
- The preloader is implemented on macOS, for better address space
layout compatibility.
- The Command key can be mapped to Ctrl, by setting the
"LeftCommandIsCtrl" or "RightCommandIsCtrl" values under
HKEY_CURRENT_USER\Software\Wine\Mac Driver.
- The App Nap energy-saving feature is disabled by default in GUI
processes. It can be re-enabled by setting the "EnableAppNap" value
under HKEY_CURRENT_USER\Software\Wine\Mac Driver.
*** Android
- Setting the mouse cursor is supported using the APIs available in
Android >= 7.
- The new version of the Android graphics buffer allocator API is
supported, to enable graphics support on Android >= 8.
- Android x86-64 platforms are supported also in 64-bit mode, however
WoW64 mode is not supported yet in the WineHQ packages.
*** ARM platforms
- Stubless COM proxies are implemented on ARM.
- The Windows calling convention for variadic functions is supported
on ARM64.
- Exception handling and debugging is better supported on ARM64
platforms.
- The MinGW toolchain is supported for cross-compilation to ARM64.
*** Built-in applications
- The Ping program provides actual pinging functionality using
IcmpSendEcho.
- The SchTasks task scheduler program can create and delete tasks.
- The RegEdit registry editor has an improved hex editor for binary
values.
- FOR loops are properly handled in the Command Interpreter.
- The XCopy program supports the /k (keep attributes) option.
*** Internationalization
- The Japanese 106 keyboard is properly supported.
- Translation of timezone names is supported.
- There is a partial translation to the Sinhala language.
- More locales are supported in the Resource Compiler (wrc) and
Message Compiler (wmc).
*** Development tools
- winedbg supports debugging WoW64 processes.
- In gdb proxy mode, winedbg supports a --port option to specify the
port used to connect to gdb.
- winegcc uses better heuristics for finding the appropriate lib
directory for 32/64-bit cross-compiles.
- winegcc supports building native subsystem libraries.
- winegcc also looks for includes in the top-level include directory
of the installation prefix.
- winebuild supports a -mfpu option for specifying the FPU
architecture on ARM platforms.
- winedump supports dumping SLTG-format typelibs.
*** IDL compiler
- Application Configuration Files (ACF) are supported.
- Asynchronous interfaces are supported.
- Type and method serialization using encode/decode attributes is
supported.
- The defaultvalue() attribute is supported for pointer types.
- Generated files are always specific to the target platform. The
target can be specified the same way as with the other tools,
using the cpu-manufacturer-os platform specification.
- Nesting of pointers and arrays works correctly.
- Correct size and alignment are generated for encapsulated unions.
- The __int32 type is supported.
- The -robust command line option is recognized (but ignored) for
compatibility with the Microsoft IDL compiler.
- Multiple typelibs can be generated into a single resource file.
*** .NET
- 32-bit CIL-only .NET binaries are supported on 64-bit.
- The Mono engine is updated to version 4.7.5 with some upstream Mono
fixes.
*** RPC/COM
- The typelib marshaller is reimplemented. It generates format strings
and then uses the standard NDR marshalling routines; this way it
also works on 64-bit and ARM platforms.
*** Installers
- MSI custom actions run in a separate process, enabling proper
support for mixed 32/64-bit installers.
- Deferred installation actions are supported in MSI.
*** Build infrastructure
- The test framework supports building helper dlls inside a test, to
allow testing features that require loading an external library.
- The test framework supports testing Windows kernel drivers.
- It is possible to build and run a WoW64 tree from inside the Wine
source directory. Previously an out-of-tree build was required.
- A .editorconfig file is provided with the recommended indentation
parameters.
*** Miscellaneous
- The Task Scheduler service and APIs are implemented.
- The Windows Management Instrumentation service is implemented.
- The OPC Services (Open Packaging Conventions, used for Microsoft
Office XML files) library is implemented.
- The HKEY_PERFORMANCE_DATA magic registry key is partially
implemented.
*** New external dependencies
- The Vulkan library is used to implement the Vulkan graphics driver.
- The Vkd3d library is used to implement Direct3D 12 on top of Vulkan.
- The SDL library is used to support game controllers.
- The GSSAPI library is used to implement Kerberos authentication.
--
Alexandre Julliard
julliard@winehq.org
Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off CodeWeavers CrossOver+ today.
Andrew Eikum a CodeWeavers employee and Wine developer is writing a series of post to introduce people to Wine usage and development.
About This Guide
This is a series of guides intended to introduce software developers
to the Wine ecosystem. It will cover what Wine is, how to use Wine, how
to debug Wine, how to fix Wine, and what to do with your fix once you've
made it.
The guide will be published throughout January.
Part 1 describes what Wine is and provides a short description of various popular forks of Wine.
Part 2 describes Wine's build process.
Part 3 describes how to use Wine as a developer.
Part 4 describes how to debug Wine in general.
Part 5 describes Wine's source tree layout and how to edit the source.
Part 6 describes how you can send your work upstream.
If you recall from Part 1, there are many forks of Wine. Where your
fix belongs can vary depending on what fork of Wine you use, the nature
of the bug you fixed, and how you fixed it.
Choosing the right place to send your fix
The ideal place for your fix is in upstream Wine. This is the origin
point of all Wine forks. If you fix it in upstream Wine, then all users
of Wine will eventually benefit from your work as the various forks pull
in changes from upstream.
Sending your fix upstream should be the default choice for your work.
If none of the exceptions below apply, or if you're unsure where your
fix belongs, work with upstream first.
When upstream is the wrong choice
Your patch may be built on top of an existing patch in wine-staging. In that case, it should be sent to the wine-staging maintainers. If you, or they, think that the patch is ready to be sent upstream, then go ahead and do that instead.
If your patch fixes the issue, but you failed to fix the tests you
wrote, or your patch causes some other test failures, it may belong on
the bug tracker, or possibly in wine-staging.
If your patch provides a useful feature that upstream Wine is not interested in, it may belong in wine-staging.
If your patch is builds on a feature exclusive to some fork of Wine,
like Proton or CrossOver, it may belong in that fork and not upstream.
Work with the fork maintainers to determine if it's appropriate for
upstreaming.
Upstreaming your fix
Hopefully, your patch is going upstream. Wine's patch submission
process is done via email. Your patch should be sent in plain text to wine-devel@winehq.org. You should subscribe to this mailing list to avoid being placed into the moderation queue.
It is recommended to use git send-email to send the email through your mail server. You can also use git format-patch
and attach the resulting file in an email client. Be careful that your
mail client doesn't wrap, or otherwise corrupt, the attachment as if it
were a text document.
Patches that are sent upstream should have your Sign-off. This can be applied by Git automatically with the -s switch during git commit and/or git format-patch. You must use your real name in the Author field when submitting a patch.
If you are submitting a series of patches, try to limit yourself to
about four patches per submission. Your patches should be self-contained
anyway, so there is no harm in submitting them in several batches.
Smaller patch series are easier to review, and keep from cluttering up
the mailing list if you have to re-send the series with changes.
Receiving feedback
Wine has a patch status webpage
which will track the status of your patch. Your patch will be tested by
the Wine Test Bot to ensure any new tests pass on various Windows
versions. If the area of Wine changed by your patch has a maintainer, it
will be assigned to that person for review. If not, it will be reviewed
by the general community, or by the Wine maintainer.
Be patient, it may take a few days for your patches to receive
review. Wine reviewers try to reply to every patch within a week, but if
you don't get feedback you may send an email to wine-devel asking for a
review. Be sure you are subscribed to wine-devel, as some reviews may
be sent to that mailing list instead of directly back to the author.
If you received some suggestions, take those suggestions into account
and send a new version of the patch. Feedback from Wine reviewers
should not be seen as criticism or an attack. Wine is a very complicated
piece of software, and it has a high standard of code quality for
contributions. Rejections aren't made lightly—everyone wants
Wine to improve. Instead, understand that there are reasons for the
rejection, apply the suggestions, and resend the patch. If you do not
have the time or interest in making the requested changes, consider
sending your patch to wine-staging so some other person may take up the
patch in the future and try to get it upstream. Or, attach it to a
Bugzilla bug so it is not lost.
If your patch is accepted, then congratulations! You have just made Wine better. It's time to move on to the next bug.
Andrew Eikum a CodeWeavers employee and Wine developer is writing a series of post to introduce people to Wine usage and development.
About This Guide
This is a series of guides intended to introduce software developers
to the Wine ecosystem. It will cover what Wine is, how to use Wine, how
to debug Wine, how to fix Wine, and what to do with your fix once you've
made it.
The guide will be published throughout January.
Part 1 describes what Wine is and provides a short description of various popular forks of Wine.
Part 2 describes Wine's build process.
Part 3 describes how to use Wine as a developer.
Part 4 describes how to debug Wine in general.
Part 5 describes Wine's source tree layout and how to edit the source.
Part 6 describes how you can send your work upstream.
Once you've got some idea of what is causing the problem with your
application, it's time to go understand how those APIs are implemented
in Wine so you can fix it. You may also need to change Wine's code to
debug the application in the first place.
Search for existing bugs
Before digging into the source, it's always useful to first search for existing bugs. You can search Wine's Bugzilla
for your application, or for the symptoms you're seeing. As you begin
to debug your issue, you may find other search terms to try. If you find
a bug, you may find some useful analysis or work has already been done
for the issue.
You may also want to look through the Wine Staging patches,
especially once you have some idea of what the problem is. You may find
someone has already written a patch to fix this problem, but it isn't
ready to go upstream yet. You can pick up the torch and try to upstream
the work.
Wine source layout
Wine implements the Windows operating system, which is composed of
libraries, programs, and kernel functionality. You can find the code for
Wine's implementation of each of those components in dlls, programs, and server,
respectively. To give you some idea of how different components of Wine
work together, some important, core components are listed here.
dlls/ntdll – This is where many of the core OS APIs
are implemented, like file handling, thread creation and
synchronization, timing, and much more. Applications typically use kernel32 instead of ntdll directly.
dlls/kernel32 – This is the application-facing interface for the core ntdll APIs mentioned above.
dlls/user32 – This is where much of the Windows GUI handling lives, like window creation, message handling, terminal services, and so on.
dlls/winex11.drv and dlls/winemac.drv – These libraries map the Windows GUI interfaces, and some other platform-specific functions, to the native platform. user32 calls into these platform drivers.
dlls/d3d* and dlls/wined3d – These libraries implement the Direct3D graphics API on top of the platform's OpenGL implementation.
programs/services – This program manages background services, both those created by Wine and those provided by installed applications.
programs/wineboot – This program kicks off initial prefix creation and other tasks when a prefix is booted.
programs/winecfg – This is Wine's configuration program.
server – The Wine server implements all
cross-process functionality, including message routing, multi-process
synchronization primitives, registry handling, and much more. The Wine
server is always running if an application is running.
While debug channels are often named after the component in which they are declared (e.g. the dsound channel is declared in dlls/dsound), this is not always the case. You can use git grep to find the relevant debug trace line if it isn't obvious.
Writing tests
In most cases, your work should be driven by tests. Study the
documentation for the relevant APIs and write tests first to confirm
that Windows's implementation behaves how you expect it to. Then, change
Wine's source to pass the tests that you wrote.
Wine has an extensive suite of unit tests. The unit tests comprise
well over one million lines of code as of this writing. Any patch you
submit must pass all of these tests. Patches should contain more tests proving that the new behavior is correct.
In general, you should focus your work on what a real application
actually does. That is, you don't need to implement a bunch of unrelated
functionality if the application doesn't actually need it. You should
write tests to show how an application is using an API, and how Wine
fails to meet its expectations. Then fix Wine to also pass those tests
without breaking any existing tests. Any change to Wine has the
potential to break other applications. Simply passing tests that you
wrote is insufficient reason to change Wine.
You can find the tests for a given component in the tests subdirectory. For example, the tests for dsound live in dlls/dsound/tests. You will find .c files in that directory. The tests start in the START_TEST function and exercise the component being tested. The ok function demonstrates correct behavior. Again, "correct" is defined to mean "like Windows." For example:
Here you can see the return value from IDirectSound::CreateSoundBuffer is expected to be S_OK. If it is not S_OK, then the test will fail.
Your tests should demonstrate how your application behaves when
interacting with that API. Since you are fixing a bug in Wine's
implementation of the API, your tests should demonstrate that Wine will
fail without your fix. It isn't necessary, or even recommended, to fully
exercise all inputs to an API in the Wine tests. Instead, be thoughtful
about how your application might use the API given different inputs
from the user, and write tests that reflect those possibilities.
Your tests should be self-contained. They should initialize the
necessary functions, test the APIs, and then clean up before continuing.
If you need to create files on disk, create them in a temporary
location and/or clean them up afterwards. If your test may leave changes
to the system, expect to have to clean up after a previous run that
crashed, before you run your tests.
After you have written some tests, you need to verify that they pass when run on Windows. To do this locally, run make crosstest,
which will use your system's mingw-w64 compiler to build a Windows
executable. Run this executable on Windows in the command prompt to
verify Windows's behavior. If you do not have a Windows system or VM
available, you can upload your patch or test binary to the Wine Test Bot.
Once your tests pass on Windows, run them in Wine with make test.
If your tests meaningfully demonstrate a Wine bug, they should fail.
Now it is time to fix Wine to pass those tests, as well as all existing
tests.
Working with Wine's source
As you develop your fix, there are some rules you should know if you intend to send your work upstream.
For better or worse, Wine does not have a coding style standard and
likely never will. The rule is to try to match the surrounding code as
best as possible. Especially in older code, you will find a horrible
mish-mash of tabs and spaces and brace styles. Do your best to make the
code no worse than it was. However, extraneous changes are discouraged
as they make review difficult and looking up the source history in Git
more cumbersome. If you are changing a line, or even one line in a short
code block, it can be re-formatted to be less ugly than it was. But
don't reformat an entire function to fit some style, no matter how ugly
it is.
Wine only accepts code that adheres to the C89 standard, because some
compilers that Wine cares about don't support anything later. The three
most common snags here are that your code must declare its variables at
the top of the block, you cannot use //-style comments, and function declarations with no arguments must be declared with void arguments:
int some_function(void);
Resist the urge to gut an entire function or module and re-write it.
Small, discrete changes that can be easily understood are the right way
to fix Wine. Wine is more than two decades old. There is a lot of
hard-won knowledge in much of Wine's source, and throwing out all of
that history because it's easier than working in the existing code is
not likely to pass review.
Make your changes as obviously correct as possible. Unrelated changes
must be placed into their own commits. You should not introduce unused
code in an early patch, which begins to be used in a later patch.
Write your patches with the reviewer in mind. It may be unintuitive,
but understand that it is more important for your patch to be easy to
review than make Wine's code perfect. Reviewer time is one of Wine's
most valuable assets. Patches that are easier to review are more likely
to pass that review.
Be aware that some tests are "flaky." This is an unfortunate reality
of a system as complex as Wine. Ideally all tests would pass on all
Windows and Wine environments, but due to bugs, differing platform
behavior (especially window managers) and timing differences, they
don't. Most modules have well-written tests that should always pass.
Some, like the user32 messaging tests, and some audio and graphics
tests, fail with some frequency, even on Windows.