From Fedora Project Wiki
(skeleton)
 
Line 3: Line 3:
 
== Summary ==
 
== Summary ==
  
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.
+
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.
 
 
A new, vendor-neutral libGL implementation (colloquially "glvnd") has been developed to address this problem.
 
 
 
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.
 
  
 
== Owner ==
 
== Owner ==
Line 36: Line 32:
 
== Detailed Description ==
 
== Detailed Description ==
  
...
+
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 ==
 
== Benefit to Fedora ==
Line 45: Line 45:
  
 
== Scope ==
 
== Scope ==
* Proposal owners:
+
* 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. Mesa will need to be reconfigured at build time to build a glvnd backend intead of its own libGL.
 
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. Mesa will need to be reconfigured at build time to build a glvnd backend intead of its own libGL.
  
All of the above is essentially done, and simply needs change approval.
+
* Other developers
  
* Other developers:
+
Other Fedora developers do not need to do anything, at the moment. This may change eventually.
  
Other Fedora developers do not *need* to do anything, though there are some changes they may wish to make.
+
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.
  
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.
+
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.
 
External repositories that provide packages for third-party drivers will need to update their packaging.
  
* Release engineering:
+
* 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.
 
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.
  
* [[Fedora_Program_Management/ReleaseBlocking/Fedora{{FedoraVersionNumber|next}}|List of deliverables]]: No change.
+
* [[Fedora_Program_Management/ReleaseBlocking/Fedora{{FedoraVersionNumber|next}}|List of deliverables]]
 +
 
 +
No change.
 +
 
 +
* Policies and guidelines
  
* Policies and guidelines:
+
The guidelines should document the preferred pkgconfig forms for BuildRequires.
  
The guidelines should document the preferred pkgconfig forms for BuildRequires.
+
* Trademark approval
  
* Trademark approval: N/A (not needed for this Change)
+
N/A (not needed for this Change)
  
 
== Upgrade/compatibility impact ==
 
== Upgrade/compatibility impact ==
  
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.
+
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 ==
 
== How To Test ==
Line 85: Line 89:
 
== Dependencies ==
 
== Dependencies ==
  
As described above: libglvnd is added to the OS, mesa is reconfigured to use it.
+
As described above: libglvnd is added to the OS, Mesa is reconfigured to use it.
  
 
== Contingency Plan ==
 
== Contingency Plan ==
Line 96: Line 100:
 
== Documentation ==
 
== Documentation ==
  
...
+
There should be some! Much of this depends on working out the interaction with external driver repositories, and will change as glvnd upstream matures.
  
 
== Release Notes ==
 
== Release Notes ==
  
...
+
As above.
  
 
<!-- The Fedora Release Notes inform end-users about what is new in the release.  Examples of past release notes are here: http://docs.fedoraproject.org/release-notes/ -->
 
<!-- The Fedora Release Notes inform end-users about what is new in the release.  Examples of past release notes are here: http://docs.fedoraproject.org/release-notes/ -->

Revision as of 20:25, 22 August 2016

Vendor Neutral libGL

Summary

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.

Owner

Current status

  • Targeted release: Fedora 25
  • Last updated: 2016-08-22
  • Tracker bug: <will be assigned by the Wrangler>

Detailed Description

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.

Scope

  • 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. 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.

No change.

  • Policies and guidelines

The guidelines should document the preferred pkgconfig forms for BuildRequires.

  • Trademark approval

N/A (not needed for this Change)

Upgrade/compatibility impact

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.

User Experience

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.

Dependencies

As described above: libglvnd is added to the OS, Mesa is reconfigured to use it.

Contingency Plan

  • 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.

Documentation

There should be some! Much of this depends on working out the interaction with external driver repositories, and will change as glvnd upstream matures.

Release Notes

As above.