Vendor Neutral libGL
A new, vendor-neutral libGL implementation (colloquially "glvnd", pronounced "gee ell vend") has been developed to address several issues with OpenGL support on modern Linux systems.
- Name: Adam Jackson
- Email: firstname.lastname@example.org
- Release notes owner:
- Targeted release: Fedora 25
- Last updated: 2016-08-24
- Tracker bug: <will be assigned by the Wrangler>
libGL is the system library exposing the OpenGL and GLX APIs to applications. While Mesa's implementation of libGL is capable of loading different drivers for different devices, third-party drivers use a different internal interface and therefore need to replace the system libGL. This has been a long-standing source of bugs and user frustration.
glvnd addresses two of the major problems with the classic OpenGL driver model. First, a common dispatch layer is used, which is smart enough to dispatch GL and GLX requests to different vendor libraries depending on the driver used by the display server. Second, the GLX window system binding and desktop OpenGL interface are made available in independent libraries, meaning that (eventually) the desktop interface will be available to EGL setups (like wayland) without pulling in the X11 client libraries.
I've categorized this change as System Wide rather than Self-Contained, as OpenGL support is a critical-path system component across multiple products. However, the change itself is intended to be as self-contained as possible.
Benefit to Fedora
Users will have the ability to install Mesa and third-party GL drivers in parallel and have them actually work. This enables additional performance and functionality for hybrid GPU configurations (high-end laptops, for instance).
Developers can target the full "desktop" OpenGL API for non-X11 environments without requiring the X11 client libraries.
- Proposal owners
The X server has already been updated to support the GLX protocol extensions required for glvnd functionality.
The libglvnd package itself will need to be added to the distribution. Bug #1259486.
Mesa will need to be reconfigured at build time to build a glvnd backend intead of its own libGL.
- Other developers
Other Fedora developers do not need to do anything, at the moment. This may change eventually.
Several (probably most) packages say
BuildRequires: mesa-libGL-devel instead of
BuildRequires: pkgconfig(gl). For compatibility, the mesa-libGL-devel subpackage will continue to exist, and will Require the appropriate devel packages for libglvnd. At the moment the Mesa devel package contains most of what applications require for building; this will likely change in the future, but from the outside this transition should be transparent.
When the EGL interface for glvnd is finalized, applications and libraries may wish to update their build configuration to link against the split OpenGL library instead of the classic libGL, to reduce footprint for non-X11 configurations. This will be documented, once it exists and works.
External repositories that provide packages for third-party drivers will need to update their packaging.
- Release engineering
Once libglvnd is added to the distribution, no further intervention from release engineering should be required. glvnd will become the new provider of the libGL.so.1 soname instead of mesa-libGL.
- Policies and guidelines
The guidelines should document the preferred pkgconfig forms for BuildRequires.
- Trademark approval
N/A (not needed for this Change)
On upgrade, the mesa-libGL package will still exist, but will now supply the Mesa backend for libglvnd instead of libGL itself. Existing GL applications will need their dependency on libGL.so.1 satisfied, so dnf will install libglvnd to accomplish this (and mesa-libGL will Require it, just to be extra sure).
How To Test
This feature will be implicitly tested by other existing test paths. For example, as the Gnome desktop requires a working GL implementation, if Gnome works, then glvnd works. The feature is also tested by standard OpenGL testing, eg. piglit and other test suites.
Users of external repositories for third-party drivers may end up with a slightly different process for installing their driver; the hope and expectation is that this process will be simpler and easier.
As described above: libglvnd is added to the OS, Mesa is reconfigured to use it.
- Contingency mechanism: Mesa remains as the system libGL implementation; libglvnd is rebuilt to filter out the Provides for the library so as not to conflict.
- Contingency deadline: Beta freeze I suppose, although from a packaging standpoint the slowest part of the change is how long it takes to push through koji.
- Blocks release? No.
- Blocks product? No.
There should be some! Much of this depends on working out the interaction with external driver repositories, and will change as glvnd upstream matures.