The 6.14.0 release of Framework Mono is now available.
This is the first release of Framework Mono from its new home at Winehq.
It includes work from the past 5 years that was never included in a
stable release because no stable branch had been created in that time.
Highlights are native support for ARM64 on macOS and many improvements
to windows forms for X11.
The current set of supported platforms is:
* Linux: x86[3], amd64[1], arm64[3]
* macOS: amd64[2], arm64[2]
* Windows: x86[3], amd64[3]
[1] Tested manually and automatically through GitLab CI.
[2] Tested manually only, no CI implemented yet.
[3] No testing process yet.
Linux armv5te is known to be broken, but a work-around is possible by
disabling float optimizations. I am hoping to fix that in the near future.
Binary packages are not currently available. The source is available at
https://dl.winehq.org/mono/sources/mono/mono-6.14.0.tar.xz
There has also been a release of libgdiplus, version 6.2, with source
code available at
https://dl.winehq.org/mono/sources/libgdiplus/libgdiplus-6.2.tar.gz,
which did not get its own announcement at the time.
Since this is the first release at Winehq, I wanted to give a detailed
report on where this project is and what my priorities are. I'm
including that below.
# What's New in 6.14.0
* Native support for macOS on ARM. Cis-compilation on ARM macOS is now
assumed to be compiling for macOS, not cross-compiling for iOS.
* System.Windows.Forms:
* Fixed various resource leaks on X11.
* Redesigned Clipboard and Drag And Drop implementation on X11.
* Stability improvements on X11.
* Improved support for generated COM interfaces.
* Fixed some common cases where processes would hang on exit.
* Added Georgian translation.
* Many warning fixes. The Linux amd64 build no longer warns when
compiling the C portion of the codebase, and this is enforced for new
changes via CI.
* Many bug fixes.
# A Note on Terminology
There are at least 3 different related projects using the name Mono:
* Framework Mono is the project previously hosted at
https://github.com/mono/mono, which was then simply called Mono. I have
made this change to distinguish it from "monovm" and "Wine Mono", which
are different projects. Framework Mono is a cross-platform runtime
compatible with .NET Framework.
* "monovm" is a separate fork of the Mono runtime that's part of modern
.NET and can be used instead of CoreCLR.
* "Wine Mono" is a downstream distribution based on Framework Mono that
is used in Wine to replace .NET Framework.
There are also at least 2 different related .NET projects using 3
different names:
* .NET Framework is a proprietary Windows component that supports
cross-platform executable code using an object-oriented model.
* .NET Core was an open-source project supporting many of the same
languages and APIs as .NET Framework but mostly incompatible with it.
.NET Core was renamed to ".NET" when version 5 was released. I call it
"modern .NET" to distinguish it from .NET Framework.
# My Goals
For those not aware, in February of 2024, I made a fork of Framework
Mono at Winehq (https://gitlab.winehq.org/mono/mono/-/tree/main). In
August, Winehq took over the project officially, with me as maintainer,
and this fork became the project's official home
(https://github.com/mono/mono/issues/21796).
I approach this project with very different motivation and resources
from the previous team. I am not trying to sell it to anyone as a
development platform. I do not have a dedicated team for this effort. My
employer is supportive, but I have other responsibilities, and I've
found that for my own mental health I have to switch frequently between
different projects.
I mention this because I think it's important for people to understand
where I'm coming from, so they can get some idea of why I prioritize the
things I do, and why certain things are missing.
My main goal is to keep Mono working the way it has been, on desktop
platforms. For a project of this complexity, that takes consistent
effort, because other software it needs to interact with is updating,
and sometimes those updates will break things. Personally, I use Mono to
run KeePass natively on Linux, and as a target platform for a program I
am developing called Xalia.
I want to provide a space for people who want to contribute. I don't
like watching contributions get lost simply because no one is there to
review them, which was a frequent occurrence on GitHub.
Selfishly for my employer, I want Wine Mono to have a functioning
upstream. I have to continue working on Wine Mono to improve its
compatibility with Windows. Wine Mono is a fork of cross-platform code
designed only to work on a single implementation of a single platform.
The longer I keep to that narrow focus, without anyone working on the
other platforms, the worse that codebase will get. I believe that
maintaining code for multiple platforms makes it cleaner, and this is
worth it even for Wine Mono alone.
# What we lost in the Winehq Migration
## Clarity for Users and Contributors
The announcement in August was confusing and still lacks visibility.
People regularly show up on GitHub and file issues and pull requests
without realizing the project has moved. I do keep an eye on these, and
I respond or transfer contributions where appropriate, but it's not
ideal. GitHub doesn't have the latest version of the code, at least not
at the old URL (I have created an official mirror at
https://github.com/wine-mono/mono), so they may duplicate effort or
write changes that conflict with the latest version. Archiving the
repository was suggested as a solution, but I worry that contributions
would be lost if people can't immediately file them.
There doesn't seem to be any way to add a banner to the top of the
project page. Redirects are only possible by transferring the repository
to another organization on GitHub, and I can't do that because of
concerns about protecting the data currently on that repository. Those
concerns are also the reason I can't mirror updates to the original
repository on GitHub.
Anyway, if you want to get the latest development version of the source
code, or file an issue or merge request, use this link:
https://gitlab.winehq.org/mono/mono
## Official Binaries
The infrastructure used to build binaries for Mono was not transferred
to Winehq (and I doubt we could maintain it if it had been). For us to
supply binaries, someone needs to recreate that on Winehq's
infrastructure (probably GitLab jobs). I haven't been able to do that yet.
It'd be really nice for macOS in particular because there haven't been
any ARM binaries released yet.
## Platform Support
Mono supported a lot of different platforms and CPU architectures. I
have neither the knowledge, time, nor hardware to support all of them. I
figure Web Assembly, Android, and iOS are already covered by modern
.NET, and in Mono they lack the specific advantage of binary
compatibility with .NET Framework. Therefore, I am focusing on the most
common desktop platforms and the CPU architectures that could run Mono.
(Notably, I believe Windows on ARM would be worth supporting, but Mono
hasn't yet been ported to it, and this would likely be a non-trivial
effort that I don't currently have the resources for.)
I don't plan to intentionally break the other targets, but I also cannot
currently test them, so they may unintentionally break. If someone has a
use case for some other target, and is able to maintain it (or at least
add CI support so I have a way to tell when it's working), then I'd be
open to supporting it. In particular, the Linux armv5te platform is
broken, and I know that someone is depending on it, so I am hoping to
fix it and add support in the future.
## Testing and Continuous Integration
The old Mono GitHub had CI for a dizzying array of platforms and
configurations. On Winehq GitLab, our CI currently supports amd64 Linux
and no other platforms. I would really like to have CI for all the
supported CPU/operating system combinations. I'd intended to get it done
before this release, but that ended up taking so much of my time that I
had to just set it aside for a while. I'm hoping to get back to it soon.
## Crash Reporting (MERP)
The Crash Reporting (MERP) feature was causing test failures on macOS. I
have been advised by the previous maintainers that this feature was
probably only used by Microsoft for their own projects, and that flaws
in the approach made it not worth maintaining. Microsoft has, of course,
moved on, and I couldn't find any indication of anyone else using this.
It also required an external reporting tool that is proprietary to
Microsoft. It's likely possible for a third party to create their own
implementation, but again, I couldn't find any indication that anyone
had done this.
Specifically, MERP did crash reporting in a manner similar to WER
(Windows Error Reporting). Its major design flaw is that it attempted to
produce crash reports from inside the process that had crashed. If a
process crashed, it's likely that the state is corrupted, and this
corruption would often cause MERP to fail to produce a report. To
mitigate this, a complex "breadcrumbs" system was implemented in MERP so
that, if it fails to gather crash information for a report, it can at
least report that it failed to gather the crash information, but such
reports do not help with understanding either the original crash or the
MERP failure. Making this work properly would require a redesign using
an external process that monitors an application for crashes and handles
crash reporting.
The "Mono.Runtime" methods that configure MERP and check for crashes are
now no-ops. Related methods that query information outside of a crash
throw PlatformNotSupportedException.
# My Current Priorities
## Fix armv5te Platform
See https://gitlab.winehq.org/mono/mono/-/issues/7. Since there is a
work-around available, I'm hoping for a simple solution by detecting the
platform capabilities. It may also be possible to add this platform to
CI using QEMU.
## Update Cryptography
Mono uses BoringSSL for its cryptography. It was forked in 2016, and
since then it has never been updated from upstream. The fork contains
hacks that remove a dependency on the Go programming language.
My understanding is that updating simply isn't practical. Some people
have apparently had success with resetting to the newest version, but
I've since been told that only rebuilds work, not clean builds, so
there's no telling what kind of strange hybrid that creates. It's no
longer practical to remove the Go dependency. Upstream also explicitly
recommends against any third party using BoringSSL, because they have no
guarantees of API or ABI stability.
I'm not an expert in computer security, but using an 8 year old fork of
a cryptography library that's impossible to update is, in my uneducated
opinion, very bad. I would like to replace BoringSSL with something
modern, and preferably dynamically linked so it can be more easily
updated, probably OpenSSL.
## Expand the CI
I would like to have CI for all the supported platforms. I'm hoping to
get back to this soon. See "Testing and Continuous Integration" above.
## Binaries for macOS and Windows
I understand compilation is a barrier for users of macOS and Windows
especially, and the old binary packages included more projects than just
Framework Mono itself. I feel that it makes sense to wait until after we
have CI though, as I'd prefer to have these packages built by CI.
Packaging is also more complex than building and testing these projects.
## Remove Dependencies on Old Hosting
We still depend on mono-project.com and github.com/mono for a lot of
things. I don't know how long those resources will continue to work, so
I would like to mirror them and ensure that the Framework Mono codebase
isn't using them.
The Wine development release 10.3 is now available.
What's new in this release:
- Clipboard support in the Wayland driver.
- Initial Vulkan video decoder support in WineD3D.
- Bundled Compiler-RT library for ARM builds.
- Header fixes for Winelib C++ support.
- More progress on the Bluetooth driver.
- Various bug fixes.
The source is available at <https://dl.winehq.org/wine/source/10.x/wine-10.3.tar.xz>
Binary packages for various distributions will be available
from the respective [download sites][1].
You will find documentation [here][2].
Wine is available thanks to the work of many people.
See the file [AUTHORS][3] for the complete list.
[1]: https://gitlab.winehq.org/wine/wine/-/wikis/Download
[2]: https://gitlab.winehq.org/wine/wine/-/wikis/Documentation
[3]: https://gitlab.winehq.org/wine/wine/-/raw/wine-10.3/AUTHORS
----------------------------------------------------------------
### Bugs fixed in 10.3 (total 18):
- #3930 Miles Sound System (WAIL32.DLL) SuspendThread() deadlock in WINMM callback (silent black screen on HOMM startup)
- #8532 JawsEditor 2.5/3.0 reports "Invalid imagesize" on startup ('IPicture::SaveAsFile' method too stubby/incorrect)
- #38879 wbemprox fill_videocontroller calls are expensive
- #40523 legrand xlpro3 400 : unable to insert a pictogram
- #41427 [Game Maker Studio - Android] subst.exe is not implemented
- #45119 Multiple applications from Google sandbox-attacksurface-analysis-tools v1.1.x (targeting native API) need 'ntdll.NtGetNextProcess' implementation
- #50337 Roland Zenology Pro (VST3 plugin) used with carla-bridge fails to save files
- #50929 Silver Chains (GOG) crashes and start dumping memory in console
- #51121 HeidiSQL 11.0.0.5919 shows a blinking black screen and crashes without virtual desktop
- #52094 IDA Pro 7.6 crashes when loading idapython3.dll
- #56695 Unreal Engine game checks for a specific VC runtime regkey
- #57323 Windows 7 Card Games crash on start
- #57849 Multiple games: sleep accuracy is affected by mouse movement speed
- #57850 Reolink fails to load dll: err:module:import_dll Loading library libvips-42.dll
- #57854 Steam.exe fails to start (hangs upon loading) in Wine-10.2
- #57881 Wine10.2 Noble does not open Quicken 2004, qw.exe file
- #57899 R-Link 2 Toolbox crash
- #57903 kernel32:loader - test_export_forwarder_dep_chain fails on Windows 7
### Changes since 10.2:
```
Alexander Morozov (1):
wineusb.sys: Add support for URB_FUNCTION_VENDOR_ENDPOINT.
Alexandre Julliard (32):
ntdll: Fix pointer access in read_image_directory().
tomcrypt: Import code from upstream libtomcrypt version 1.18.2.
tomcrypt: Import code from upstream libtommath version 1.1.0.
bcrypt: Use the bundled tomcrypt library for hash algorithms.
ntdll: Use the bundled tomcrypt for the crc32 implementation.
rsaenh: Split encrypt and decrypt implementation functions.
rsaenh: Use the bundled tomcrypt to replace the local copy.
configure: Check that the 32- and 64-bit builds are using the same libdir.
ntdll: Add some missing Zw exports.
apisetschema: Add some new apisets, and old ones for recently added dlls.
dataexchange: Don't create an empty import lib.
makefiles: Import winecrt0 by default even with -nodefaultlibs.
tools: Avoid const strarray pointers in all functions.
include: Fix some invalid array definitions in PDB structures.
makefiles: Add support for assembly source files.
makefiles: Add support for optionally installing external libs.
libs: Import code from upstream compiler-rt version 8.0.1.
makefiles: Link to compiler-rt for builds in MSVC mode.
profapi: Don't create an empty importlib.
winedump: Fix dumping of empty values in version resources.
make_unicode: Generate the PostScript builtin font metrics.
wineps: Remove the old font generation code.
wineps: Move the generated glyph list to a separate glyphs.c file.
wineps: Update the glyph list to a more recent version.
wineps: Generate all core fonts metrics into a single file.
wineps: Reduce the size of the stored core fonts metrics data.
png: Import upstream release 1.6.47.
setupapi: Create fake dlls for missing dlls only if explicitly requested.
include: Import mmreg.h instead of duplicating definitions.
winegcc: PE targets always use msvcrt mode, remove redundant checks.
winegcc: Use -nodefaultlibs also for the linker tests.
winegcc: Merge the utility functions into the main file.
Alexandros Frantzis (8):
winewayland: Implement zwlr_data_control_device_v1 initialization.
winewayland: Support copying text from win32 clipboard to native apps.
winewayland: Generalize support for exporting clipboard formats.
winewayland: Support exporting various clipboard formats.
winewayland: Support copying data from native clipboard to win32 apps.
winewayland: Normalize received MIME type strings.
winewayland: Present EGL surfaces opaquely.
winewayland: Treat fully transparent cursors as hidden.
Alistair Leslie-Hughes (6):
include: Add Get/SetValue for gdiplus Color class.
include: Keep the same header order as SDK in gdiplus.h.
include: Add gdiplusbase.h.
include: Add a few sal.h defines.
include: Add stscanf_s define.
vbscript: Correct resource text for VBSE_PARAMETER_NOT_OPTIONAL.
Arkadiusz Hiler (1):
krnl386: Silence a warning in GetSystemDirectory16().
Attila Fidan (2):
winewayland: Update locked pointer position hint.
winewayland: Implement SetCursorPos via pointer lock.
Bernhard Kölbl (1):
wine.inf: Add VC runtime version key.
Bernhard Übelacker (11):
comctl32/tests: Skip a few tests in non-english locale.
user32/tests: Fix monitor dpi awareness test.
ntdll/tests: Skip FileFsFullSizeInformationEx test on older windows.
kernelbase/tests: Skip test if EnumSystemFirmwareTables is not available.
propsys/tests: Add broken for unexpected value in windows 7.
d2d1/tests: Adjust tolerance of a few float comparisons in windows 7.
ws2_32/tests: Allow WSAConnectByNameA test to fail with WSAEOPNOTSUPP.
propsys/tests: Fix check_PropVariantToBSTR2.
setupapi: Initialize the files member in SetupDuplicateDiskSpaceListW. (ASan).
setupapi/tests: Fix message of ok statement.
kernel32/tests: Add broken in test_IdnToNameprepUnicode.
Brendan McGrath (24):
mp3dmod/tests: Add tests for selecting an invalid stream.
mp3dmod: Check for invalid stream.
mp3dmod/tests: Add tests for GetInputCurrentType.
mp3dmod/tests: Add tests for GetOutputCurrentType.
mp3dmod: Implement GetInputCurrentType.
mp3dmod: Implement GetOutputCurrentType.
mp3dmod: Fix leak of previous outtype.
mfplat/tests: Add additional MFCreateWaveFormatExFromMFMediaType tests.
mfplat: Allow MF_MT_USER_DATA to be missing for all subtypes.
winedmo: Call avformat_find_stream_info for the mp3 format.
mp3dmod: Return S_OK in Allocate/Free Resources.
mp3dmod/tests: Add test for 32-bit sample size.
mp3dmod: Add support for 32-bit sample size.
mp3dmod/tests: Test different output sample rates.
mp3dmod: Return error if requested output format values don't agree.
mp3dmod: Only allow 1/2 and 1/4 subsampling.
mp3dmod/tests: Add test for nChannels = 0 on input.
mp3dmod: Ensure nChannels is greater than zero on input.
mf/tests: Test different length user_data against aac decoder.
winegstreamer: Validate the value of cbSize in aac decoder.
winegstreamer: Expand GST_ELEMENT_REGISTER* defines.
wined3d: Interpret Y'CbCr values as being from the reduced range.
mp3dmod: Implement an IMFTransform interface.
mfsrcsnk: Register the MP3 Byte Stream Handler class.
Brendan Shanks (9):
include: Add D3DKMT_WDDM_*_CAPS.
winemac: Remove pre-macOS 10.12 workarounds.
winemac: Always use notifications to detect window dragging.
winecoreaudio: Remove pre-macOS 10.12 workaround.
winegcc: Rename TOOL_ enum constants.
tools: Use _NSGetExecutablePath to implement get_bindir on macOS.
server: Use _NSGetExecutablePath to implement get_nls_dir on macOS.
loader: Use _NSGetExecutablePath to implement get_self_exe on macOS.
user32: Use the correct DPI in AdjustWindowRect(Ex) when DPI virtualization is active.
Charlotte Pabst (1):
winex11.drv: Weaken filter_event conditions for some events.
Connor McAdams (11):
d3dx9/tests: Add some more tests for saving surfaces as targa files.
d3dx9/tests: Add a test for saving a surface as D3DXIFF_DIB.
d3dx9/tests: Add tests for saving surfaces to non-DDS files.
d3dx9: Add TGA prefix to targa specific defines.
d3dx9: Add basic support for saving surfaces to targa files.
d3dx9: Add support for selecting a replacement pixel format when saving pixels to a file.
d3dx9: Add support for saving PNG files in d3dx_save_pixels_to_memory().
d3dx9: Add support for saving JPG files in d3dx_save_pixels_to_memory().
d3dx9: Add support for saving BMP files in d3dx_save_pixels_to_memory().
d3dx9: Add support for saving paletted pixel formats in d3dx_pixels_save_wic().
d3dx9: Add support for saving DIB files in d3dx_save_pixels_to_memory().
Conor McCarthy (4):
ntdll/tests: Test NtQueryVolumeInformationFile() with FileFsFullSizeInformationEx.
kernel32/tests: Test GetDiskSpaceInformationA().
ntdll: Handle FileFsFullSizeInformationEx in NtQueryVolumeInformationFile().
kernelbase: Implement GetDiskSpaceInformationA/W().
Daniel Lehman (3):
dwrite: Fix spelling for Sundanese.
xml2: Import upstream release 2.12.9.
xml2: Import upstream release 2.12.10.
Dmitry Timoshkov (7):
oleaut32/tests: Add some tests for loading and saving EMF using IPicture interface.
oleaut32: Add support for loading and saving EMF to IPicture interface.
oleaut32: Implement a better stub for IPicture::SaveAsFile.
wbemprox: Add support for Win32_PhysicalMemoryArray.
windowscodecs: Make support for WICBitmapTransformRotate270 more explicit.
kernel32: SuspendThread() in Win9x mode should return 0 for current thread.
advapi32: Add CreateProcessWithLogonW() semi-stub.
Elizabeth Figura (27):
d3dx9/tests: Define D3DX_SDK_VERSION=36 for d3dx9_36.
d3dx9/tests: Test implicit truncation warnings.
vkd3d: Import vkd3d-utils.
d3dcompiler: Use D3DPreprocess() from vkd3d-utils.
d3dcompiler: Use D3DCompile2VKD3D() from vkd3d-utils.
d3dx9: Reimplement D3DXCompileShader() for versions before 42.
d3dx9: Link versions 42 and 43 to the corresponding d3dcompiler DLL.
wined3d: Use a separate format value for d3d10+ NV12.
wined3d: Separate a wined3d_texture_vk_upload_plane() helper.
wined3d: Separate a wined3d_texture_vk_download_plane() helper.
wined3d: Implement planar Vulkan uploads.
wined3d: Implement planar Vulkan downloads.
wined3d: Implement planar Vulkan blits.
wined3d: Enable KHR_sampler_ycbcr_conversion.
wined3d: Implement planar NV12 in the Vulkan renderer.
d3d11/tests: Extend NV12 tests.
setupapi/tests: Test disk space list APIs.
setupapi: Get rid of the DISKSPACELIST typedef.
setupapi: Implement SetupAddToDiskSpaceList().
setupapi: Correctly implement SetupQuerySpaceRequiredOnDrive().
d3d11: Implement ID3D11VideoDevice::GetVideoDecoderProfile[Count]().
wined3d: Introduce a Vulkan decoder backend.
d3d11: Create a wined3d_decoder object backing the d3d11 decoder object.
wined3d: Look for a video decode queue.
wined3d: Create a Vulkan video session backing the wined3d_decoder_vk.
d3d9/tests: Expand the YUV blit tests a bit.
ddraw/tests: Port yuv_layout_test() from d3d9.
Eric Pouech (4):
findstr/tests: Add test for default findstr regex vs text search mode.
findstr: Set default search mode to regex.
findstr/tests: Always set text/regex search mode in tests.
cmd: Open file in 'TYPE' with more sharing attributes.
Esme Povirk (4):
gdiplus: Stub GdipGetEffectParameters.
gdiplus/tests: Add tests for effect parameters.
gdiplus: Split effect parameter size into helper function.
gdiplus: Store parameters on effect objects.
Etaash Mathamsetty (2):
ntdll: Implement NtGetNextProcess.
ntdll/tests: Add NtGetNextProcess tests.
Eugene McArdle (2):
ntdll/tests: Test updated NtQueryDirectoryFile mask reset behaviour.
ntdll: Invalidate cached data in NtQueryDirectoryFile when mask is changed.
Floris Renaud (1):
po: Update Dutch translation.
Giovanni Mascellani (8):
dxgi: Submit Vulkan presentation as soon as possible.
dxgi: Set the frame latency even when increasing the frame latency.
dxgi: Do not bias the frame latency fence.
dxgi: Directly signal the frame latency fence.
dxgi: Remove the frame latency fence.
dxgi: Make the frame latency waitable a semaphore.
dxgi: Wait on the frame latency semaphore when the client doesn't do it.
dxgi/tests: Use an explicit frame latency waitable when testing the back buffer index.
Hajo Nils Krabbenhöft (1):
d2d1: Update DC target surface with current HDC contents on BeginDraw().
Hans Leidekker (7):
subst: Add basic implementation.
win32u: Also set DriverVersion for software devices such as llvmpipe.
wbemprox: Don't use DXGI adapter values for Win32_SoundDevice.
wbemprox: Get Win32_VideoController values from the registry.
wmic: Treat VT_I4 values as unsigned.
wbemprox: Fix format string.
wbemprox/tests: Avoid test failures on Windows 7.
Haoyang Chen (2):
comctl32: Fix Alloc/HeapAlloc mismatches.
cryptnet: Uniform return value that is the same as _wfsopen.
Henri Verbeet (1):
wined3d: Handle a NULL "push_constants" buffer in glsl_fragment_pipe_alpha_test_func().
Jacek Caban (13):
winegcc: Don't include host include paths when compiling with MSVCRT.
include: Use inline function for DeleteFile.
include: Use wchar_t for platform types on PE targets.
include: Add UnsignedMultiply128 and _umul128 support.
include: Add ShiftRight128 and __shiftright128 support.
include: Use inline functions for CopyFile and MoveFile.
include: Use struct inheritance for MONITORINFOEX declaration in C++.
include: Add isnormal C++ declaration.
include: Introduce minwindef.h header file.
include: Introduce fibersapi.h header file.
include: Add missing d3d8types.h defines.
include: Introduce minwinbase.h header file.
include: Introduce sysinfoapi.h header file.
Jinoh Kang (10):
ntdll: Sink module dependency registration towards the end of the function in find_forwarded_export().
ntdll: Don't re-add a module dependency if it already exists.
ntdll: Register module dependency for export forwarders regardless of whether the dependency is already loaded.
ntdll: Properly track refcount on static imports of export forwarders.
ntdll: Eagerly call process_attach() on dynamic imports of export forwarders.
ntdll: Explicitly ignore dynamic (GetProcAddress) importers as relay/snoop user module.
ntdll: Properly track refcount on dynamic imports of export forwarders.
ntdll: Remove superflous NULL check for importer.
kernel32/tests: Fix thread handle leak in store_buffer_litmus_test.
kernel32/tests: Work around Windows 7 issuing DllNotification even when loading with DONT_RESOLVE_DLL_REFERENCES.
Louis Lenders (1):
ntdll: Silence the noisy FIXME in RtlGetCurrentProcessorNumberEx.
Mark Jansen (2):
version/tests: Add a test for an empty value in VerQueryValueW.
kernelbase: Fix VerQueryValueW with no data.
Mohamad Al-Jaf (1):
makecab: Add stub program.
Nikolay Sivov (24):
windowscodecs/gif: Store Image descriptor offset when reading GIF data.
windowscodecs/metadata: Add an option to initialize reader from a memory block.
windowscodecs/decoder: Separate metadata block reader to a reusable structure.
windowscodecs/decoder: Add support for metadata block reader at decoder level.
windowscodecs/decoder: Add support for IWICBitmapDecoder::CopyPalette() in common decoder.
windowscodecs: Use common decoder for GIF format.
windowscodecs/decoder: Reuse metadata readers instances.
windowscodecs/decoder: Implement metadata readers enumerator for the common decoder.
msxml3/tests: Remove tests that already run for msxml6.
msxml6/tests: Move some of the SAXXMLReader60 tests.
rtworkq: Fix private queue id mask check.
mfplat/tests: Run tests modifying process state in separate processes.
d2d1/tests: Add some tests for device context handling in the DC target.
include: Add some flags constants used in pipes API.
windowscodecs: Implement query strings enumerator.
windowscodecs/tests: Add some more tests for query enumeration.
windowscodecs/metadata: Do not decorate 'wstr' items with a type name in returned queries.
windowscodecs: Implement CreateQueryWriterFromReader().
windowscodecs/tests: Add some tests for stream position handling when nested readers are used.
windowscodecs/metadata: Restore original stream position on GetStream().
windowscodecs/metadata: Replicate original stream position when creating writer instances from readers.
windowscodecs/tests: Add some tests for metadata handler GetClassID().
windowscodecs/metadata: Implement GetClassID().
windowscodecs: Implement GetPreferredVendorGUID().
Paul Gofman (5):
ntdll: Add stub for RtlDeriveCapabilitySidsFromName().
ntdll/tests: Add tests for RtlDeriveCapabilitySidsFromName().
ntdll: Implement RtlDeriveCapabilitySidsFromName().
kernelbase: Implement DeriveCapabilitySidsFromName().
kernelbase/tests: Add test for DeriveCapabilitySidsFromName().
Piotr Caban (9):
msvcr120: Simplify feupdateenv implementation.
ole32: Mark property storage dirty in PropertyStorage_ConstructEmpty.
ole32: Mark property storage not dirty after it's saved.
ole32: Remove end label from PropertyStorage_WriteToStream.
ole32: Reset output stream when wrting property storage.
whoami: Return non-zero value on error.
whoami: Handle arguments starting with '/' and '-'.
whoami: Parse and validate all command line arguments.
whoami: Support format specifiers when handling /user argument.
Raphael Riemann (1):
kernelbase: Add WerRegisterCustomMetadata stub.
Rémi Bernon (29):
winevulkan: Generate function pointers for required funcs.
winevulkan: Enable the VK_EXT_headless_surface extension.
win32u: Pass a vulkan_instance pointer to vulkan_surface_create.
win32u: Use VK_EXT_headless_surface for nulldrv surface.
winex11: Initialize window managed flag in create_whole_window.
winex11: Request managed/embedded in a new window_set_managed helper.
winex11: Check managed window changes in WindowPosChanged.
winex11: Pass fullscreen flag to is_window_managed.
winewayland: Pass fullscreen flag to is_window_managed.
wined3d: Avoid double-free of swapchain surface on error.
include: Add a MB_CUR_MAX definition in ctype.h.
include: Add some _BitScanForward(64) declarations in intrin.h.
include: Fix InlineIsEqualGUID C++ warning.
include: Fix wmemchr C++ warning.
winetest: Avoid underflow when computing filtered output size.
win32u: Move OpenGL initialization to a separate source.
win32u: Move dibdrv OpenGL functions to opengl.c.
win32u: Move OSMesa OpenGL functions to opengl.c.
win32u: Remove unncessary OSMesa indirections.
win32u: Guard OpenGL function pointers initialization.
wineandroid: Remove now unnecessary wine_get_wgl_driver init guard.
winemac: Remove now unnecessary wine_get_wgl_driver init guard.
winex11: Remove now unnecessary wine_get_wgl_driver init guard.
winewayland: Remove now unnecessary wine_get_wgl_driver init guard.
include: Add IID_PPV_ARGS macro.
include: Add QueryDisplayConfig declaration.
include: Add d3d8 interface GUIDs.
include: Add D3D9 interface GUIDs.
include: Fix D3DDEVINFO_D3DRESOURCEMANAGER type name.
Sebastian Lackner (1):
oleaut32: Implement SaveAsFile for PICTYPE_ENHMETAFILE.
Tim Clem (1):
wbemprox: Add Manufacturer and Speed to Win32_PhysicalMemory.
Vadim Kazakov (1):
include: Add definition of NEGOSSP_NAME.
Vibhav Pant (15):
winebth.sys: Store known devices per radio from org.bluez.Device1 objects on BlueZ.
winebth.sys: Add a basic implementation for IOCTL_BTH_GET_DEVICE_INFO.
winebth.sys: Add connection related properties for remote devices.
winebth.sys: Queue a DEVICE_ADDED event on receiving InterfacesAdded for objects that implement org.bluez.Device1.
winebth.sys: Remove the corresponding device entry for Bluetooth radios on receiving InterfacesRemoved for org.bluez.Device1 objects.
winebth.sys: Use the correct DBus property name in IOCTL_WINEBTH_RADIO_SET_FLAG.
winebth.sys: Initially set numOfDevices to 0 in IOCTL_BTH_GET_DEVICE_INFO.
winebth.sys: Don't iterate over the remaining radios once a local device has been removed.
winebth.sys: Use the "Name" property of a BlueZ adapter for the local radio name.
winebth.sys: Use the "Trusted" property from BlueZ device objects to set BDIF_PERSONAL.
winebth.sys: Set the device class for remote devices from BlueZ's "Class" property.
winebth.sys: Only set the updated properties for local radios on BLUETOOTH_WATCHER_EVENT_TYPE_RADIO_PROPERTIES_CHANGED.
winebth.sys: Update properties for tracked remote devices on receiving PropertiesChanged for org.bluez.Device1 objects from BlueZ.
ws2_32: Implement WSAAddressToString() for Bluetooth (AF_BTH) addresses.
ws2_32/tests: Add tests for Bluetooth addresses for WSAStringToAddress().
William Horvath (2):
server: Use a high precision timespec directly for poll timeouts on supported platforms.
server: Use epoll_pwait2 for the main loop on Linux.
Yuxuan Shui (1):
winegstreamer: Avoid large buffer pushes in wg_transform.
Zhiyi Zhang (8):
imm32/tests: Test that the IME UI window shouldn't be above normal windows at creation.
imm32: Move the IME UI window to the bottom at creation.
d3d11/tests: Test that the fallback device window shouldn't be above normal windows at creation.
dxgi: Move the fallback device window to the bottom at creation.
winex11.drv: Allow MWM_FUNC_MAXIMIZE when WS_MAXIMIZE is present.
win32u: Use the normal window rectangle to find monitor when a window is minimized.
win32u: Remove an unused parameter.
win32u: Don't use the current mode in the registry if it's a detached mode.
Ziqing Hui (4):
mfreadwrite/tests: Move writer creation tests to test_sink_writer_create.
mfreadwrite/tests: Test getting transforms and media sinks from writer.
mfreadwrite/tests: Test AddStream and SetInputMediaType for writer.
mfreadwrite/tests: Test sample processing for writer.
```