We released the stable version of our 25.2 series as 25.2.0 on Jun 21, 2026. For the announcement, please see the discussion thread.
The internal architecture of glamor_egl was significantly refactored: xf86-specific code was split out, DRI3 was decoupled from gbm, and a dumb gbm backend was added. This enables support for proprietary Nvidia drivers v470+ for EGL initialization, GL context creation, GLX, and DRI3 — with faster and simpler DRI3 paths and improved Nvidia detection overall.
References:
The kdrive subsystem received extensive improvements: multi-screen support, DRI3/glamor, X-Video through glamor, evdev input autodetection, VT switching, and threaded input. Key handling was improved with proper scancodes for Delete/Keypad Delete and the KdKeyCodeToKeySym function was ported to xkb. The fbdev variant gained modesetting via RandR with split framebuffer modesetting. The ephyr variant gained a dummy refresh rate through RandR for Proton >= 8 compatibility.
References:
The Xfbdev server now supports X-Video through glamor (works with Nvidia 390+), GLX through glamor (Nvidia 470+), and DRI3 through glamor (Nvidia 470+). Various new command-line arguments for configuration were added.
The virtual framebuffer X server now supports DRI3/glamor and GLX through glamor.
Fully ported to GBM bo wrapper, with cursor rotation/reflection fixes, DRI device selection, XRGB8888 for 24-bit front bo, and support for more cursor sizes on legacy probe.
DRI3 now returns version 1.4 and frees formats/modifiers cache at closeScreen.
- Coreboot DRM / VESA DRM / EFI DRM driver support added
- Intel DDX restricted to pre-gen3 hardware (#1817)
-
-verbosegeneric CLI option added - XDG Base Dir Spec 0.8 support
- SingleDriver server flag
- Config file split for Nvidia modules (#2166)
- New
-Dgbmmeson build option - New EDID parsing entry point
- Module version macros (
XF86_MODULE_*) - xf86: ported patch from Xorg to enable all I/O ports (fixes vesa driver segfault)
- Xext: dpms entrypoints refactored to DIX/DDX split
- Xephyr:
-nameand-titleCLI options
This release includes approximately 976 commits since 25.1.0 with many important bug fixes:
- xkb: Multiple OOB/off-by-one fixes, memory leak in ProcXkbGetKbdByName, locked/latched indicator desync
- Xi: Gesture grab type check, off-by-one in UpdateDeviceState, keycodes > 255 fix, FTBS on *BSD, missing free in AddInputDevice(), zero device/pointer/state reply buffers, NULL pointer dereference in ProcXIChangeCursor
- modesetting: VRAM/resource leak (#1809), unaligned pixmap check, OOB read clamp, vmware cursor pitch quirks (#1816), recursive unflip, spam fix (#1202), byte-swap ARGB cursor uploads on big-endian (#2889)
- present: Memory leaks, byte swapping, revert problematic check_flip change
- glx: Negative size in FeedbackBuffer/SelectBuffer, memory leak in DestroyPixmap, null deref
- cursor: AllocARGBCursor leak/double-free
- render: Multiple memory leaks on error paths
- Xext/sync: Use-after-free in miSyncTriggerFence()
- Xext/shm: Fix ShmGetImage()
- Xext/damage: Protect against NULL screen priv/funcs, fix missing include of windowstr.h
- record: Parentheses around macro argument symbols
- xfree86: Zero gamma ramp reply padding in vidmode
- randr: Byte swaps, SetScreenSize transformation check (#2159), primaryOutput delete, request size check
- dix: Infinite loop on server teardown, null ptr deref in doListFontsAndAliases, inttype mismatches (#683), zero padding in ProcQueryColors reply
- os/auth: Error paths on /dev/urandom, switch to getrandom(), sha1 with Nettle 4.0, MUSL compat (#2890)
- os/log: Fix syslog identification, handle NULL string argument (#2883)
- dri2: Deduplicate attachments in do_get_buffer (#2885) (prevents OOB/crash)
- glamor: Modifier handling fixes, error path cleanup (#2910)
- rootless: Protect alpha channel for Render operations (#2907)
- xwin: Multiwindow mode focus handling, WM_ACTIVE fix (#2903), realloc failure catch (#2915), prevent sprintf overflow in glxWinErrorMessage
- xquartz: Fix remaining non-portable code (#2832)
- meson: Fix features requiring >= 1.0.0 (#2946), fix boolean option value type (#2947)
Long-standing issues resolved:
- X server crash at exit with radeon and modesetting drivers (#1848)
- Invisible windows with compositing (amdgpu/modesetting) (#2653)
- modesetting+nouveau failure (#2645)
- Crash in virt-manager with virtio (#1740)
- Crash via XPresentPixmap backed by non-aligned XShmPixmap strides (#1754)
- Crash on suspend/resume with Nvidia (#1761)
- Mouse drifting at 1000Hz (#1723)
- Xephyr segfault on ProcXIQueryDevice (#1782)
- Blackscreen at login (#2750)
- Mesa 26.0.4 compat (#2152)
- PRIME render offload issues (#2146)
- amdgpu undefined symbol (#1755)
- CI: parallel driver builds, Ubuntu apt caching action, Cygwin mirror fixes, signed-off check, driver builds restructured
- CI: Arch build job switched to callmetango's archlinux-build-package-action (#2954)
- CI: job for automatically restarting jobs on transient failure with automatic cleanup
- CI: retry-transient-failed: clean up old jobs
- CI: added Alpine Linux build job
- meson:
-Dgbmoption, xorg-sdk-only install, separate Xephyr/Xfbdev options, lower libdrm requirement - Test suite: backport new pytest-based test suite (pyxtest) from X.Org (#2909)
- treewide: declare variables where needed, replace DDXPoint by xPoint, use X_REQUEST_* / X_REPLY_FIELD_* macros, fix missing includes of
<assert.h> - xfree86: SDK headers moved to
include/, dropped legacy ifdefs, parser cleanup - kdrive: replace __uid_t/__gid_t by standard types, small cleanups to Xfbdev/Xvfb (#2837)
- dri2: moved to Xext/ for all X servers, devprivates access macros
- Toplevel extensions moved into Xext/: glx, randr, render, record, composite, present, dri3, xkb, Xi, xfixes, pseudoramiX
- Existing Xext/ extensions reorganized into their own subdirectories: xres, xtest, shape, saver, sync, security, geext, xcmisc, bigreq, xf86bigfont, dbe, panoramiX, shm, dpms, Xv, xselinux
- Xext: dpms entrypoints refactored for DIX/DDX, composite drop ancient unused debug code
- Xext: shape EventType resource by devPrivate
- os: unexport SeatId, move to dix settings, drop CLIENTIDS ifdef, rename
__size_assert()to__SIZE_ASSERT() - include: extnsionst.h: drop unnecessary includes
- meson: replace explicit -Wall with warning_level=1 in default_options
- xnest: no longer needs DISABLE_EXT_DPMS
- xf86: drop no longer needed entries from default driver list for Intel (#2908)
-
doc/CODE_OVERVIEW.mdadded for new contributors - Xfbdev man page, Xvfb man page updates, Xephyr man page updates
- xfree86 man: SingleDriver flag documented
- COPYING: major cleanup — added missing license texts (BSD-2, BSD-3, ISC, MIT variants, NVIDIA/Khronos), dropped copyright/license notices for removed code, updated copyright dates/holders
- README.md: update Matrix space address, one year of XLibre announcement
-
module_abi_tag=xlibre-25(no bump needed) - ABI_VIDEODRV = 28.0, ABI_XINPUT = 26.0, ABI_EXTENSION = 11.0 (stable)
See the release issue for the full checklist: Release 25.2 (summer solstice 2026) #2953