Free and open-source graphics device driver: Difference between revisions

Content deleted Content added
MOS:FIRSTABBReviation define-clarify before parenthetic WP:ABBR. WP:LINKs: update-standardize, needless underscores > spaces. WP:SLASH > WP:DASH.
 
(3 intermediate revisions by 3 users not shown)
Line 1:
{{Multiple issues|
{{Technical|date=November 2017}}
{{selfSelf-published|date=July 2021}}
}}
{{shortShort description|Software that controls computer-graphics hardware}}
 
[[File:Linux kernel and OpenGL video games.svg|thumb|300px|alt=Flowchart with Tux, the Linux penguin|Data and instructions are sent to the [[Graphicsgraphics processing unit|GPU]] (GPU) for processing. The rendered results are stored in a [[framebuffer]], whosewhich content is scanned by the [[display controller]] and sent to the screen.]]
A '''free and open-source graphics device driver''' is a [[software stack]] which controls computer-[[Graphics hardware|computer-graphics hardware]] and supports [[Rendering (computer graphics)|graphics-rendering]] [[application programming interfaceinterfaces ([[API]]s (APIs) and is released under a [[free and open-source software]] license. Graphics [[device driver]]s are written for specific hardware to work within a specific [[Kernel (operating system)|operating system kernel]] and to support a range of APIs used by applications to access the graphics hardware. They may also control output to the display if the [[display driver]] is part of the graphics hardware. Most free and open-source graphics device drivers are developed by the [[Mesa (computer graphics)|Mesa]] project. The driver is made up of a [[compiler]], a [[List of rendering APIs|rendering API]], and software which manages access to the graphics hardware.
 
Drivers without freely (and legally) -available [[source code]] are commonly known as ''binary drivers''. Binary drivers used in the context of [[operating systemssystem]]s that are prone to ongoing development and change (such as Linux) create problems for end users and [[Package (package management system)manager|package]] maintainers. These problems, which affect system stability, security and performance, are the main reason for the independent development of free and open-source drivers. When no [[technical documentation]] is available, an understanding of the underlying hardware is often gained by [[clean room design|clean-room reverse engineering]]. Based on this understanding, device drivers may be written and legally published under any [[software license]].
 
In rare cases, a manufacturer's driver source code is available on the Internet without a [[free license]]. This means that the code can be studied and altered for personal use, but the altered (and usually the original) source code cannot be freely distributed. Solutions to bugs in the driver cannot be easily shared in the form of modified versions of the driver. Therefore, the utility of such drivers is significantly reduced in comparison to free and open-source drivers.
Line 18:
[[File:Linux Graphics Stack 2013.svg|thumb|right|500px|alt=Flowchart; see caption|Illustration of the Linux graphics stack]]
 
There are objections to binary-only drivers based on copyright, security, reliability and development concerns. As part of a wider campaign against [[binary blob]]s, [[OpenBSD]] lead developer [[Theo de Raadt]] said that with a binary driver there is "no way to fix it when it breaks (and it will break)"; when a product which relies on binary drivers is declared to be [[end-of-life (product)|end-of-life]] by the manufacturer, it is effectively "broken forever."<ref name=opencon-2006>{{cite web|authorlast1=Theo de Raadt |first1=Theo |authorauthor1-link=Theo de Raadt|date=2006-12-03 |title=Open Documentation for Hardware|work=Presentation slides from OpenCON 2006|url=http://www.openbsd.org/papers/opencon06-docs/index.html|access-date=2007-02-01 }}</ref> The project has also stated that binary drivers<ref>{{cite web|url=https://stackoverflow.com/questions/8804204/what-does-binary-means-in-device-driver|title=What does "binary" means in device driver?|access-date=November 14, 2017}}</ref> "hide bugs and workarounds for bugs",<ref>{{cite web|url = http://www.openbsd.org/lyrics.html#39|title = 3.9: "Blob!"|access-date = 2007-02-12|publisher=OpenBSD}}</ref> an observation which has been somewhat vindicated by flaws found in binary drivers (including an [[Exploit (computer security)|exploit]]able [[Software bug|bug]] in Nvidia's 3D drivers discovered in October 2006 by [[Rapid7]]). It is speculated that the bug has existed since 2004; Nvidia has denied this, asserting that the issue was only communicated to them in July 2006 and the 2004 bug was a bug in X.Org (not in Nvidia's driver).<ref>{{cite web|url=http://Nvidia.custhelp.com/cgi-bin/Nvidia.cfg/php/enduser/std_adp.php?p_faqid=1971|title=Linux - How does the Rapid7 Advisory R7-0025 affect the NVIDIA Unix driver?}}</ref>
 
Binary drivers often do not work with current versions of open-source software, and rarely support development snapshots of open-source software; it is usually not directly possible for a developer to use Nvidia's or ATI's proprietary drivers with a development snapshot of an X server or a development snapshot of the Linux kernel. Features like [[kernel mode-setting]] cannot be added to binary drivers by anyone but the vendors, which prevents their inclusion if the vendor lacks capacity or interest.
 
In the [[Linux kernel]] development community, [[Linus Torvalds]] has made strong statements on the issue of binary-only modules: "I ''refuse'' to even consider tying my hands over some binary-only module ... I want people to know that when they use binary-only modules, it's ''their'' problem".<ref>{{cite web|url=https://lwn.net/1999/0211/a/lt-binary.html|title=a/lt-binary}}</ref> Another kernel developer, [[Greg Kroah-Hartman]], has said that a binary-only kernel module does not comply with the kernel's license (the [[GNU General Public License]]); it "just violates the GPL due to fun things like derivative works and linking and other stuff."<ref>{{cite web|url=http://www.kroah.com/log/linux/ols_2006_keynote.html|title=Myths, Lies, and Truths about the Linux kernel|first=Greg|last=Kroah-Hartman|publisher=linux kernel monkey log}}</ref> Writer and computer scientist [[Peter Gutmann (computer scientist)|Peter Gutmann]] has expressed concern that the [[digital rights management]] scheme in Microsoft's [[Windows Vista]] operating system may limit the availability of the documentation required to write open drivers, since it "requires that the operational details of the device be kept confidential."<ref name=vista-cost>{{cite journal |authorlast1=Gutmann |first1=Peter Gutmann|date=2006-12-26 |title=A Cost Analysis of Windows Vista Content Protection|url=http://www.cs.auckland.ac.nz/~pgut001/pubs/vista_cost.html#oss|access-date=2007-01-28 |authorauthor1-link=Peter Gutmann (computer scientist) }}</ref>
 
In the case of binary drivers, there are objections due to [[free software]] philosophy, software quality and [[computer insecurity|security]] concerns.<ref>[https://lwn.net/Articles/195351/ Linux Weekly News, Aug 14, 2006: ''X.org, distributors, and proprietary modules'']</ref> In 2006, [[Greg Kroah-Hartman]] concluded that:
 
<blockquote>"{{Blockquote|Closed source Linux kernel modules are illegal. That's it, it is very simple. I've had the misfortune of talking to a lot of different IP lawyers over the years about this topic, and every one that I've talked to all agree that there is no way that anyone can create a Linux kernel module, today, that can be closed source. It just violates the [[GNU General Public License|GPL]] due to fun things like [[derivative works]] and [[Linker (computing)|linking]]."<ref>{{cite web|url=http://www.kroah.com/log/linux/ols_2006_keynote.html|last1=Kroah-Hartman |first1=Greg|author1-link=Greg Kroah-Hartman|year=2006 |publisher=[[Linux Symposium]]|title=Myths, Lies, and Truths about the Linux kernel}}</ref>}}
<ref>{{cite web|url=http://www.kroah.com/log/linux/ols_2006_keynote.html|author=Greg Kroah-Hartman|publisher=[[Linux Symposium]]|title=Myths, Lies, and Truths about the Linux kernel|year=2006}}</ref></blockquote>
 
The Linux kernel has never maintained a stable in-kernel [[application binary interface]].<ref>{{cite web|url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |title=The Linux Kernel Driver Interface |access-date=2014-03-04 |url-status=dead |archive-url=https://archive.today/20131104101751/https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |archive-date=2013-11-04 }}</ref> There are also concerns that proprietary drivers may contain [[Backdoor (computing)|backdoor]]s, like the one found in [[Samsung Galaxy]]-series modem drivers.<ref>{{cite web|url=http://redmine.replicant.us/projects/replicant/wiki/SamsungGalaxyBackdoor|title=SamsungGalaxyBackdoor|date=2014-02-04}}</ref>
 
=== {{anchor|From a hardware developer's perspective}}Hardware developer's view ===
Line 40 ⟶ 39:
The mobile sector presents a different situation. The functional blocks (the [[application-specific integrated circuit]] display driver, 2D and 3D acceleration and video decoding and encoding) are separate [[semiconductor intellectual property]] (SIP) blocks on the chip, since hardware devices vary substantially; some [[portable media player]]s require a display driver that accelerates video decoding, but does not require 3D acceleration. The development goal is not only raw 3D performance, but system integration, power consumption and 2D capabilities. There is also an approach which abandons the traditional method ([[Analog television|Vsync]]) of updating the display and makes better use of [[sample and hold]] technology to lower power consumption.
 
During the second quarter of 2013 79.3% of [[smartphone]]s sold worldwide were running a version of [[Android (operating system)|Android]],<ref>{{cite web | url = https://techcrunch.com/2013/08/07/android-nears-80-market-share-in-global-smartphone-shipments-as-ios-and-blackberry-share-slides-per-idc/ | title = Android Nears 80% Market Share In Global Smartphone Shipments, As iOS And BlackBerry Share Slides, Per IDC| date = 7 August 2013}}</ref> and the Linux kernel dominates smartphones. Hardware developers have an incentive to deliver Linux drivers for their hardware but, due to competition, no incentive to make these drivers free and open-source. Additional problems are the Android-specific augmentations to the Linux kernel which have not been accepted in [[BitTorrent (software)|mainline]], such as the [[Atomic Display Framework]] (ADF).<ref>{{cite web |url=https://lwn.net/Articles/565422/ |title=Atomic Display Framework}}</ref> ADF is a feature of 3.10 AOSP kernels which provides a [[Direct Rendering Manager#DMA Buffer Sharing and PRIME|dma-buf]]-centric framework between Android's hwcomposer [[HAL (software)|HAL]] and the kernel driver. ADF significantly overlaps with the [[Direct Rendering Manager|DRM]]-[[Mode setting|KMS]] framework. ADF has not been accepted into mainline, but a different set of solutions addressing the same problems (known as [[atomic mode setting]]) is under development. Projects such as [[Hybris (software)|libhybris]] harness Android device drivers to run on Linux platforms other than Android.
 
== Software architecture ==
Line 81 ⟶ 80:
*Radeonsi supports all [[Graphics Core Next]]-based GPUs: [[Radeon HD 7000 series|HD 7000]], [[Radeon HD 8000 series|HD 8000]] and [[AMD Radeon Rx 200 series|Rx 200]] (Southern Islands, Sea Islands and Volcanic Islands).
 
An up-to-date feature matrix is available,<ref>{{cite web|url=http://xorg.freedesktop.org/wiki/RadeonFeature|title=Radeon Feature|access-date=15 November 2017}}</ref> and there is support for [[Video Coding Engine]]<ref name="VCE">{{cite web |url=http://lists.freedesktop.org/archives/mesa-dev/2014-February/053203.html |title=initial VCE support in Linux kernel and in the Mesa driver|date=4 February 2014 }}</ref> and [[Unified Video Decoder]].<ref>{{cite web |url=http://lists.freedesktop.org/archives/dri-devel/2014-February/054159.html |title=drm-next-3.15 Feb 18|date=18 February 2014 }}</ref><ref>{{cite web |url=http://lists.freedesktop.org/archives/dri-devel/2014-March/054999.html |title=drm-next-3.15 Mar 04|date=4 March 2014 }}</ref> The free and open-source Radeon graphics device drivers are not reverse-engineered, but are based on documentation released by AMD without the requirement to sign a [[non-disclosure agreement]] (NDA).<ref>{{cite web |url=http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/ |title=AMD Developer Guides |url-status=dead |archive-url=https://web.archive.org/web/20130716090237/http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/ |archive-date=2013-07-16 }}</ref><ref>{{cite web |url=http://www.x.org/docs/AMD/ |title=Documentation provided by AMD}}</ref><ref>{{cite web |url=http://www.botchco.com/agd5f/?p=58 |title=AMD 3D Documentation list |url-status=dead |archive-url=https://web.archive.org/web/20131007021913/http://www.botchco.com/agd5f/?p=58 |archive-date=2013-10-07 }}</ref> Documentation began to be gradually released in 2007.<ref>{{cite web |url = https://lwn.net/Articles/248227/ | title = AMD to open up graphics specs |publisher=[[LWN.net]] |date=2007-09-05 |access-date=2014-07-15}}</ref><ref>{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=NjA0Ng |title=AMD: GPU Specifications Without NDAs! |date=2007-09-10 |access-date=2014-07-15}}</ref><ref>{{cite web|url=http://airlied.livejournal.com/50613.html |title=AMD hand me specs on a CD |authorlast1=David Airlie |first1=David |date=2007-09-13 |access-date=2014-07-15 |url-status=dead |archive-url=https://web.archive.org/web/20121022064328/http://airlied.livejournal.com/50613.html |archive-date=2012-10-22 }}</ref>
 
In addition to providing the necessary documentation, AMD employees contribute code to support their hardware and features.<ref name="VCE" />
Line 93 ⟶ 92:
The release of the new AMDGPU kernel module and stack was announced on the dri-devel mailing list in April 2015.<ref>{{cite web|url=http://lists.freedesktop.org/archives/dri-devel/2015-April/081501.html |title=Initial AMDGPU driver release |date=2015-04-20 |access-date=2016-04-26}}</ref> Although AMDGPU only officially supports [[Graphics Core Next|''GCN'']] 1.2 and later graphics cards,<ref>{{cite web|title=AMD Moves Forward With Unified Linux Driver Strategy, New Kernel Driver|url=https://www.phoronix.com/scan.php?page=article&item=amd_bordeaux_strategy&num=1|website=Phoronix}}</ref> experimental support for GCN 1.0 and 1.1 graphics cards (which are only officially supported by the Radeon driver) may be enabled via a kernel parameter.<ref>{{cite web|title=AMDGPU driver documentation|url=https://dri.freedesktop.org/docs/drm/gpu/amdgpu.html|website=Freedesktop.org}}</ref><ref>{{cite web|title=AMD Unleashes Initial AMDGPU Driver Support For GCN 1.0 / Southern Islands GPUs|url=https://www.phoronix.com/scan.php?page=news_item&px=AMDGPU-SI-Experimental-Code|website=Phoronix}}</ref> A separate [[Direct Rendering Manager|libdrm]], libdrm-amdgpu, has been included since libdrm 2.4.63.<ref>{{cite web |url=https://lwn.net/Articles/654542/ |title=libdrm 2.4.63 |date=2015-08-14}}</ref>
 
The radeonsi 3D code mentioned in the previousprior Radeon paragraph is also used with amdgpu; the 3D driver has back ends for both radeon and amdgpu.
 
=== {{anchor|History of nouveau}}Nvidia ===
Line 100 ⟶ 99:
[[Nvidia]]'s proprietary driver, [[Nvidia GeForce driver]] for [[GeForce]], is available for [[Windows]] [[x86]]/[[x86-64]], [[Linux]] x86/x86-64/[[ARM architecture|ARM]], [[Mac OS X Leopard|OS X 10.5]] and later, [[Solaris (operating system)|Solaris]] x86/x86-64 and [[FreeBSD]] x86/x86-64. A current version can be downloaded from the Internet, and some Linux distributions contain it in their repositories. The 4 October 2013 [[Software release life cycle|beta]] Nvidia GeForce driver 331.13 supports the [[EGL (API)|EGL]] interface, enabling support for [[Wayland (display server protocol)|Wayland]] in conjunction with this driver.<ref>{{cite web|url=http://www.nvidia.com/object/linux-display-amd64-331.13-driver.html |title=Support for EGL on 32-bit platforms |date=2013-10-04 |access-date=2014-07-15}}</ref><ref>{{cite web |url=https://www.archlinux.org/packages/multilib/x86_64/lib32-nvidia-utils/files/ |title=lib32-nvidia-utils 340.24-1 File List |date=2014-07-15}}</ref>
 
Nvidia's free and open-source driver is named nv.<ref>{{cite web|url=http://xorg.freedesktop.org/wiki/nv|title=X.org nv driver page|date=2013-05-20}}</ref> It is limited (supporting only 2D acceleration), and [[Matthew Garrett]], [[Dirk Hohndel]] and others have called its source code confusing.<ref>{{cite web |url=http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/hw/xfree86/vga256/drivers/nv/Attic/README.RIVATNT.diff?r1=1.1.2.2&r2=1.1.2.3&hideattic=0&only_with_tag=xf-3_3_3 |title=Patch by Dirk Hohndel |date=1998-11-18 |access-date=2014-07-15 |quote=... opposed to such obfuscated code. We do not regard this as free software according to our standards |url-status=dead |archive-url=https://web.archive.org/web/20140201173132/http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/hw/xfree86/vga256/drivers/nv/Attic/README.RIVATNT.diff?r1=1.1.2.2&r2=1.1.2.3&hideattic=0&only_with_tag=xf-3_3_3 |archive-date=2014-02-01 }}</ref><ref>{{cite web |url=http://phd.mupuf.org/files/xdc2011_slides.pdf |title=Nouveau: The community & past, current and future developments |date=2011-09-13 |access-date=2014-07-15}}</ref><ref name=killing-kittens>{{cite conference |authorlast1=Airlie |first1=David M. Airlie |date=2006-07-19 |title=Open Source Graphic Drivers&mdash;: They Don't Kill Kittens |book-title=Proceedings of the Linux Symposium Volume One |___location=[[Ottawa]], Ontario, Canada |url=http://www.linuxsymposium.org/2006/linuxsymposium_procv1.pdf |access-date=2007-01-28 |url-status=dead |archive-url=https://web.archive.org/web/20070208084233/http://www.linuxsymposium.org/2006/linuxsymposium_procv1.pdf |archive-date=2007-02-08 }}</ref> Nvidia decided to deprecate nv, not adding support for [[GeForce 400 series|Fermi]] or later GPUs and [[DisplayPort]], in March 2010.<ref>{{cite web |url=https://www.phoronix.com/scan.php?page=article&item=nvidia_kills_nv&num=1 |title=Nvidia deprecates "NV" |publisher=[[Phoronix]] |date=2010-03-26}}</ref>
 
In December 2009, Nvidia announced they would not support free graphics initiatives.<ref name="NvidiaNouveau">{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=NzgwNQ |title=Nvidia's Response To Recent Nouveau Work |publisher=[[Phoronix]] |date=2009-12-14}}</ref> On 23 September 2013, the company announced that they would release some documentation of their GPUs.<ref>{{cite web |url=http://lists.freedesktop.org/archives/nouveau/2013-September/014480.html |title=Nvidia offers to release public documentation on certain aspects of their GPUs |date=2013-09-23 |access-date=2013-09-24}}</ref>
 
Nouveau is based almost entirely on information gained through [[reverse engineering]]. This project aims to produce 3D acceleration for X.Org/[[Wayland (display server protocol)|Wayland]] using [[Gallium3D]].<ref>{{cite web |url=http://nouveau.freedesktop.org/wiki/ |title=Nouveau: Accelerated Open Source driver for nVidia cards |access-date=2006-08-10 |archive-date=2014-07-23 |archive-url=https://web.archive.org/web/20140723185723/http://nouveau.freedesktop.org/wiki/ |url-status=dead }}</ref> On March 26, 2012, Nouveau's [[Direct Rendering Manager|DRM]] component was marked stable and promoted from the staging area of the Linux kernel.<ref>{{cite web | url=https://lwn.net/Articles/488338/ |title=The Nouveau driver graduates from staging |publisher=[[LWN.net]] |date=2012-03-23}}</ref> Nouveau supports [[Tesla (microarchitecture)|Tesla]]- (and earlier), [[Fermi (microarchitecture)|Fermi]]-, [[Kepler (microarchitecture)|Kepler]]- and [[Maxwell (microarchitecture)|Maxwell]]-based GPUs.<ref>{{cite web |url=http://nouveau.freedesktop.org/wiki/CodeNames/ |title=Engineering names for Nvidia}}</ref> On 31 January 2014, Nvidia employee Alexandre Courbot committed an extensive patch set which adds initial support for the GK20A ([[Tegra K1]]) to Nouveau.<ref>{{cite web |url=http://lists.freedesktop.org/archives/dri-devel/2014-January/053028.html |title=drm/nouveau: initial support for GK20A (Tegra K1) |date=2014-01-31}}</ref> In June 2014, Codethink reportedly ran a [[Wayland (display server protocol)|Wayland]]-based [[Weston (software)|Weston]] [[display server#Wayland|compositor]] with [[Linux kernel]] 3.15, using [[EGL (API)|EGL]] and a "100% open-source graphics driver stack" on a [[Tegra K1]].<ref>{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=MTcxODc |title=Codethink Gets The NVIDIA Jetson TK1 Running With Linux 3.15, Wayland |date=2014-06-12 |work=[[Phoronix]]}}</ref> A feature matrix is available.<ref>{{cite web|url=http://nouveau.freedesktop.org/wiki/FeatureMatrix|title=Nouveau Driver Feature Matrix|access-date=16 November 2017}}</ref> In July 2014, Nouveau was unable to outperform the Nvidia GeForce driver due to missing re-clocking support. Tegra-re is a project which is working to reverse-engineer nVidia's [[Very long instruction word|VLIW]]-based [[Tegra]] series of GPUs that predate Tegra K1.<ref>{{cite web|url=https://github.com/kusma/tegra-re|title=Tegra-re|website=[[GitHub]]|access-date=16 November 2017}}</ref>
 
Nvidia distributes proprietary device drivers for Tegra through OEMs and as part of its Linux for Tegra (formerly L4T) development kit.<ref>{{cite web|url=https://developer.nvidia.com/linux-tegra|title=Linux For Tegra Archive|date=30 January 2014|access-date=16 November 2017}}</ref> Nvidia and a partner, [[Avionic Design]], were working on submitting Grate (free and open-source drivers for Tegra) upstream of the mainline Linux kernel in April 2012.<ref>{{cite mailing list
|url=http://lists.freedesktop.org/archives/dri-devel/2012-April/021833.html
|title=[RFC 0/4] Add NVIDIA Tegra DRM support
|date=2012-04-20 |access-date=2012-08-21
|mailing-list=dri-devel
|last=Mayo |first=Jon }}</ref><ref>{{cite web
|url=https://www.phoronix.com/scan.php?page=news_item&px=MTA4NjA
|title=A NVIDIA Tegra 2 DRM/KMS Driver Tips Up
|authorlast1=Larabel, |first1=Michael |author1-link=Michael Larabel |date=2012-04-11
|publisher=Phoronix Media |access-date=2012-08-21}}</ref>
The company's co-founder and CEO laid out the Tegra processor roadmap with Ubuntu Unity at the 2013 [[GPU Technology Conference]].<ref>{{cite web|url=https://www.youtube.com/watch?v=8kIQWWJs_po&t=9m35s |archive-url=https://ghostarchive.org/varchive/youtube/20211221/8kIQWWJs_po |archive-date=2021-12-21 |url-status=live|title=GTC 2013: NVIDIA's Tegra Roadmap (6 of 11) |date=19 March 2013 |publisher=YouTube |access-date=2013-07-10}}{{cbignore}}</ref>
 
Nvidia's Unified Memory driver (nvidia-uvm.ko), which implements memory management for Pascal and Volta GPUs on Linux, is MIT licensed. The source code is available in the Nvidia Linux driver downloads on systems that support nvidia-uvm.ko.
 
In May 2022, Nvidia announced a new initiative and policy to open source its [[GPU]] [[Loadable Kernel Module]]s with dual [[GPL]]/[[MIT licenseLicense]], but only new models at [[Software_release_life_cycleSoftware release life cycle#Alpha|alpha]] quality. But said "These changes are for the kernel modules, while the user-mode components are untouched. The user-mode remains closed source and is published with prebuilt binaries in the driver and the CUDA toolkit."<ref>{{cite web |url=https://developer.nvidia.com/blog/nvidia-releases-open-source-gpu-kernel-modules/|title=NVIDIA Releases Open-Source GPU Kernel Modules |date=2022-05-19 |access-date=2022-06-07}}</ref> The open source driver has since been upgraded to production status and is now officially recommended for the [[GeForce RTX 20 series|RTX 20]] series and later GPUs.<ref>{{Cite web |title=NVIDIA 560 Linux Driver Beta Released - Defaults To Open GPU Kernel Modules |url=https://www.phoronix.com/news/NVIDIA-560.28.03-Beta-Linux |access-date=2025-04-04 |website=www.phoronix.com |language=en}}</ref><ref>{{Cite web |title=NVIDIA Promotes Their Open-Source GPU Kernel Driver Support |url=https://www.phoronix.com/news/NVIDIA-Transitions-OSS-KMD |access-date=2025-04-04 |website=www.phoronix.com |language=en}}</ref> [[Blackwell (microarchitecture)|Blackwell]] ([[GeForce RTX 50 series|RTX 50]] generation) and later NVIDIA GPU architectures are only supported by the open driver.<ref>{{Cite web |title=Chapter 44. Open Linux Kernel Modules |url=https://download.nvidia.com/XFree86/Linux-x86_64/565.77/README/kernel_open.html |access-date=2025-05-10 |website=download.nvidia.com}}</ref>
 
=== Intel ===
{{See also|List of Intel graphics processing units|Intel GMA#Linux|Intel Graphics Technology}}
 
[[Intel]] has a history of producing (or commissioning) open-source drivers for its graphics chips, with the exception of their [[Intel GMA#PowerVR GPU based|PowerVR-based]] chips.<ref name="ubuntugamer">[https://web.archive.org/web/20110113115606/http://www.ubuntugamer.com/2011/01/ubuntu-graphics-driver-overview/ An overview of graphic card manufacturers and how well they work with Ubuntu] Ubuntu Gamer, January 10, 2011 (Article by Luke Benstead); ([http://xtrabuntu.blogspot.com/2011/02/overview-of-graphic-card-manufacturers.html copy of the article])</ref> Their 2D X.Org driver is called xf86-video-intel. The kernel mode-setting driver in the Linux kernel does not use the [[video BIOS]] for switching [[display resolution|video modes]]; since some BIOSes have a limited range of modes, this provides more reliable access to those supported by Intel video adapters.
 
The company worked on optimizing their free [[Linux]] drivers for performance approaching their [[Microsoft Windows|Windows]] counterparts, especially on [[Sandy Bridge]] and newer hardware where performance optimizations have allowed the Intel driver to outperform their proprietary Windows drivers in certain tasks, in 2011.<ref>{{cite web
|url = https://www.phoronix.com/scan.php?page=news_item&px=OTIzNQ
|title = More Performance Comes Out Of Intel Linux SNB
|publisher = [[Phoronix]]
|date = 2011-03-22
|access-date = 2011-03-23
}}</ref><ref>{{cite web
|url = https://www.phoronix.com/scan.php?page=article&item=intel_llc_caching&num=1
|title = Intel Sandy Bridge Performance Goes Up Again
|publisher = [[Phoronix]]
|date = 2011-03-31
|access-date = 2011-03-31
}}</ref><ref>{{cite web
|url = https://www.phoronix.com/scan.php?page=article&item=intel_snbsds_compare&num=1
|title = Intel SNB Linux Driver Can Out Run Windows Driver
|publisher = [[Phoronix]]
|date = 2011-05-23
|access-date = 2011-05-23
}}</ref> Some of the performance enhancements may also benefit users of older hardware.<ref>{{cite web
|url = https://www.phoronix.com/vr.php?view=16049
|title = A Historical Look At Intel Ironlake Graphics Performance
|publisher = [[Phoronix]]
|date = 2011-05-25
|access-date = 2011-05-25
}}</ref>
 
Line 162 ⟶ 160:
 
=== {{anchor|ARM|Arm}}Arm Ltd ===
[[Arm (company)|Arm Ltd]] is a [[semiconductor fabrication plant|fab]]less semiconductor company which licenses [[semiconductor intellectual property core]]s. Although they are known for the licensing the [[ARM architecture family|ARM instruction set]] and [[List of ARM microprocessor cores|CPUs]] based on it, they also develop and license the [[Mali (GPU)|Mali series]] of GPUs, and more recently Imortalis GPUs that support ray-tracing. On January 21, 2012, [[Phoronix]] reported that [[Luc Verhaegen]] was driving a reverse-engineering attempt aimed at the Arm Mali series of GPUs (specifically, the Mali-200 and Mali-400 versions). The reverse-engineering project, known as Lima, was presented at [[FOSDEM]] on February 4, 2012.<ref>{{cite web|url=https://www.youtube.com/watch?v=MvRJ_8K8baI |archive-url=https://ghostarchive.org/varchive/youtube/20211221/MvRJ_8K8baI |archive-date=2021-12-21 |url-status=live|title=Phoronix.com - FOSDEM 2012 - Open-Source ARM Mali|last=phoronix|date=6 February 2012|via=YouTube}}{{cbignore}}</ref><ref>[https://www.phoronix.com/scan.php?page=article&item=arm_mali_reverse Phoronix, Jan 21 2012: ''An Open-Source, Reverse-Engineered Mali GPU Driver'']</ref> On February 2, 2013, Verhaegen demonstrated [[Quake III Arena]] in timedemo mode, running on top of the Lima driver.<ref>{{cite web|url=http://libv.livejournal.com/23886.html |title=Quake 3 Arena timedemo on top of the lima driver! |url-status=dead |archive-url=https://web.archive.org/web/20130209235426/http://libv.livejournal.com/23886.html |archive-date=2013-02-09 }}</ref> In May 2018, a Lima developer posted the driver for inclusion in the Linux kernel.<ref>{{cite web|url=https://lwn.net/Articles/755084/|title=Lima DRM driver [LWN.net]|website=lwn.net}}</ref> As of May 2019, the Lima driver is part of the mainline Linux kernel.<ref>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/gpu/drm/lima?id=a1d2a6339961efc078208dc3b2f006e9e9a8e119 drm/lima: driver for ARM Mali4xx GPUs}]</ref>
 
Panfrost is a reverse-engineered driver effort for Mali Txxx (Midgard) and Gxx (Bifrost) GPUs. [https://xdc2018.x.org/slides/Panfrost-XDC_2018.pdf Introducing Panfrost] talk was presented at X.Org Developer's Conference 2018. As of May 2019, the Panfrost driver is part of the mainline Linux kernel.<ref>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/gpu/drm/panfrost?id=f3ba91228e8e917e5bd6c4b72bfe846933d17370 drm/panfrost: Add initial panfrost driver]</ref>
 
ARM has indicated no intention of providing support for their graphics acceleration hardware licensed under a free and open-source license. However, ARM employees sent patches for the Linux kernel to support their ARM HDLCD [[display controller]] and Mali DP500, DP550 and DP650 SIP blocks in December 2015 and April 2016.<ref>{{cite web |url=https://lwn.net/Articles/667575/ |title=drm: Add support for the ARM HDLCD display controller |publisher=[[Linux kernel mailing list]] |date=2015-12-11}}</ref><ref>{{cite web |url=http://lkml.iu.edu/hypermail/linux/kernel/1604.0/00503.html |title=Initial support for ARM Mali Display Controller |publisher=[[Linux kernel mailing list]] |date=2016-04-01}}</ref>
 
=== Imagination Technologies ===
[[Imagination Technologies]] is a fabless semiconductor company which develops and licenses [[semiconductor intellectual property core]]s, among which are the [[PowerVR]] GPUs. Intel has manufactured a number of [[Comparison of Intel graphics processing units#PowerVR based|PowerVR-based]] GPUs. PowerVR GPUs are widely used in mobile [[Systemsystem on a chip|SoCs]] (SoC) devices. Due to its wide use in embedded devices, the [[Free Software Foundation]] has put reverse-engineering of the PowerVR driver on its high-priority project list.<ref>[http://www.fsf.org/campaigns/priority-projects/#powervr Free Software Foundation, Apr 25, 2005: ''High Priority Free Software Projects'']</ref> As of March 2022, Imagination has [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15243 provided a FOSS driver] for its [https://blog.imaginationtech.com/new-powervr-series6xt-gpus-go-rogue-ces-2014/ Rogue architecture-based PowerVR GX6250 from 2014], and its more recent A-Series architecture-based AXE-1-16M and [https://blog.imaginationtech.com/img-b-series-multi-core-revolution/ BXS-4-64 GPUs].<ref>{{Cite web |title=Imagination Tech Publishes Open-Source PowerVR Vulkan Driver For Mesa |url=https://www.phoronix.com/scan.php?page=news_item&px=Open-Source-PowerVR-Vulkan |access-date=2022-04-19 |website=www.phoronix.com |language=en}}</ref>
 
=== Vivante ===
Line 181 ⟶ 179:
[[Qualcomm]] develops the [[Adreno]] (formerly ATI [[Imageon]]) mobile GPU series, and includes it as part of their [[Snapdragon (system on chip)|Snapdragon mobile SoC series]]. [[Phoronix]] and [[Slashdot]] reported in 2012 that Rob Clark, inspired by the Lima driver, was working on reverse-engineering drivers for the Adreno GPU series.<ref>{{cite web
|url=https://www.phoronix.com/scan.php?page=article&item=qualcomm_freedreno
|title=An Open-Source Graphics Driver Forfor Snapdragon
|authorlast1=Larabel |first1=Michael |author1-link=Michael Larabel
|date=14 April 2012
|publisher=Phoronix
Line 188 ⟶ 186:
|url=http://linux.slashdot.org/story/12/04/14/219230/open-source-qualcomm-gpu-driver-published
|title=Open-Source Qualcomm GPU Driver Published
|authorauthor1=Soulskill
|date=14 April 2012
|publisher=Slashdot
Line 194 ⟶ 192:
|url=http://bloggingthemonkey.blogspot.se/2012/04/fighting-back-against-binary-blobs.html
|title=Fighting back against binary blobs!
|authorlast1=Rob Clark |first1=Rob
|date=14 April 2012
|publisher=Linaro
|access-date=15 April 2012}}</ref> The driver code was published on [[Gitorious]] "freedreno",<ref>[https://gitorious.org/freedreno/ Freedreno, 15 April 2012] {{webarchive|url=https://web.archive.org/web/20121024233408/https://gitorious.org/freedreno/ |date=24 October 2012 }}</ref>
and has been moved to Mesa.<ref>{{cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=MTMyNTE|title=Mesa/Gallium3D Gets Its First ARM SoC GPU Driver - Phoronix}}</ref><ref>{{cite web |url=http://lists.freedesktop.org/archives/mesa-commit/2013-March/042190.html |title = Mesa (master): r600g: add Richland APU pci ids| date=15 March 2013 }}</ref> In 2012, a working shader assembler was completed;<ref>{{cite web
| url=http://bloggingthemonkey.blogspot.se/2012/07/freedreno-update-first-renders-shader.html
| title=freedreno update: first renders shader assembler!
|last1=Clark author|first1=Rob Clark
| date=29 July 2012
| access-date=16 August 2012}}</ref>
demonstration versions were developed for [[texture mapping]]<ref>{{cite web
| url=http://bloggingthemonkey.blogspot.se/2012/08/textured-cube-fullscreen.html
| title=textured cube (fullscreen!)
|last1=Clark author|first1=Rob Clark
| date=5 August 2012
| access-date=16 August 2012}}</ref> and [[phong shading]],<ref>{{cite web
| url=http://bloggingthemonkey.blogspot.se/2012/08/open-source-lolscat.html
| title=Open Source lolscat!
|last1=Clark author|first1=Rob Clark
| date=15 August 2012
| access-date=16 August 2012}}</ref> using the reverse-engineered shader compiler.
Clark demonstrated Freedreno running desktop compositing, the [[XBMC]] media player and [[Quake III Arena]] at [[FOSDEM]] on February 2, 2013.<ref>{{cite web |url=https://archive.fosdem.org/2013/schedule/event/operating_systems_open_arm_gpu/ |title=Open ARM GPU drivers – Freedreno |publisher=[[FOSDEM]] |date=2013-02-02 |access-date=2014-07-15}}</ref>
 
In August 2013, the kernel component of freedreno (MSM driver) was accepted into mainline and is available in Linux kernel 3.12 and later.<ref>{{cite web | url=http://cgit.freedesktop.org/~airlied/linux/commit/?id=e906d7bdd3b63ffac8b91f2f05c450775de95ef6 | title=Merge the MSM driver from Rob Clark | work=[[kernel.org]] | date=2013-08-28 | access-date=2014-06-04}}</ref> The [[Device Dependent X|DDX driver]] gained support for server-managed [[file descriptor]]s requiring [[X.Org Server]] version 1.16 and above in July 2014.<ref>{{cite web |url=http://lists.freedesktop.org/archives/xorg/2014-July/056748.html |title=xf86-video-freedreno 1.2.0 |publisher=[[freedesktop.org]] |date=2014-07-14}}</ref> In January 2016, the Mesa Gallium3D-style driver gained support for Adreno 430;<ref>{{cite web |url=http://cgit.freedesktop.org/mesa/mesa/commit/?id=13b87e02b979b86872e1872b8cb325d376d05cc5 |title=Add support for adreno 430|access-date=15 November 2017}}</ref> in November of that year, the driver added support for the Adreno 500 series.<ref>{{cite web |url=https://cgit.freedesktop.org/mesa/mesa/commit/?id=946cf4eb6846767306a221eec7d0f82d20dfb6b5 |title=Index Mesa-Mesa|access-date=15 November 2017}}</ref> Freedreno can be used on devices such as [[96Boards|96Boards Dragonboard 410c]] and [[Nexus 7 (2013)]] in traditional Linux distributions (like [[Debian]] and [[Fedora (operating system)|Fedora]]) and on [[Android (operating system)|Android]].
 
=== Broadcom ===
{{See also|VideoCore}}
[[File:Mesa_layers_of_crap_2016.svg|thumb|alt=Software diagram|The Mesa driver for VideoCore4, VC4, was written from scratch by Broadcom's Eric Anholt.<ref>{{cite web|url=http://anholt.livejournal.com/44239.html?nojs=1 |title=New Job at Broadcom |authorlast1=Anholt, |first1=Eric |date=2014-06-17 |url-status=dead |archive-url=https://web.archive.org/web/20150407031941/http://anholt.livejournal.com/44239.html?nojs=1 |archive-date=2015-04-07 }}</ref>]]
 
[[Broadcom]] develops and designs the [[VideoCore]] GPU series as part of their [[System on a chip|SoCs]]. Since it is used by the [[Raspberry Pi]], there has been considerable interest in a FOSS driver for VideoCore.<ref>{{cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=MTA1MTc|title=Phoronix on the Raspberry Pi GPU}}</ref> The Raspberry Pi Foundation, in co-operation with Broadcom, announced on October 24, 2012, that they open-sourced "all the ARM (CPU) code that drives the GPU".{{citation needed|date=November 2017}} However, the announcement was misleading; according to the author of the reverse-engineered Lima driver, the newly open-sourced components only allowed message-passing between the ARM CPU and VideoCore but offered little insight into Videocore and little additional programability.<ref>{{cite web|url=https://www.raspberrypi.org/blog/open-source-arm-userspace/#comment-34981|title=Open Source ARM userland - Raspberry Pi|date=24 October 2012}}</ref> The Videocore GPU runs an [[Real-time operating system|RTOS]] which handles the processing; video acceleration is done with RTOS firmware coded for its proprietary GPU, and the firmware was not open-sourced on that date.<ref>{{cite web|url=http://www.raspberrypi.org/archives/2221|title=Open Source ARM userland - Raspberry Pi|date=24 October 2012|access-date=1 November 2012|archive-date=30 October 2012|archive-url=https://web.archive.org/web/20121030180058/http://www.raspberrypi.org/archives/2221|url-status=dead}}</ref> Since there was neither a [[toolchain]] targeting the proprietary GPU nor a documented [[instruction set]], no advantage could be taken if the firmware source code became available. The Videocoreiv project<ref>{{cite web|url=https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV---BCM2835-Overview|title=hermanhermitage/videocoreiv|website=[[GitHub]]}}</ref> attempted to document the VideoCore GPUs.
Line 228 ⟶ 226:
 
=== Other vendors ===
Although [[Silicon Integrated Systems]] and [[VIA Technologies]] have expressed limited interest in open-source drivers, both have released source code which has been integrated into [[X.Org Server|X.Org]] by FOSS developers.<ref name=killing-kittens/> In July 2008, VIA opened documentation of their products to improve its image in the Linux and open-source communities.<ref>{{cite web | url = https://www.phoronix.com/scan.php?page=news_item&px=NjYyMg | title = VIA Publishes Three Programming Guides | author last1=Larabel |first1=Michael Larabel | authorauthor1-link = Michael Larabel | work = Phoronix | date = 2008-07-26 | access-date = 2008-08-04}}</ref> The company has failed to work with the open-source community to provide documentation and a working [[Direct Rendering Manager|DRM]] driver, leaving expectations of Linux support unfulfilled.<ref>{{cite web | url = https://www.phoronix.com/scan.php?page=article&item=via_2010_roadmap&num=1 | title = VIA's Linux TODO List... Maybe Look Forward To 2011? |last1=Larabel author |first1= Michael Larabel | authorauthor1-link = Michael Larabel | work = Phoronix | date = 2009-11-21 | access-date = 2009-12-30}}</ref> On January 6, 2011, it was announced that VIA was no longer interested in supporting free graphics initiatives.<ref>[https://www.phoronix.com/scan.php?page=news_item&px=ODk4Nw VIA's Open Linux Graphics Driver Has Been Defenestrated] [[Phoronix]], January 06, 2011 (Articlearticle by [[Michael Larabel]])</ref>
 
[[DisplayLink]] announced an open-source project, Libdlo,<ref>{{cite web|url=https://libdlo.freedesktop.org/wiki/|title=Libdlo|access-date=16 November 2017}}</ref> with the goal of bringing support for their [[USB graphics]] technology to [[Linux]] and other platforms. Its code is available under the [[GNU Lesser General Public License|LGPL]] license,<ref>{{cite press release |title=DisplayLink Releases Linux Source Code for its USB Graphics Processors |url=http://www.displaylink.com/news/news150509.htm |publisher=DisplayLink |date=2009-05-15 |access-date=2009-05-15}}</ref> but it has not been integrated into an [[X.Org Server|X.Org]] driver. DisplayLink graphics support is available through the kernel udlfb driver (with fbdev) in mainline and udl/drm driver, which in March 2012 was only available in the drm-next tree.
 
Non-hardware-related vendors may also assist free graphics initiatives. [[Red Hat]] has two full-time employees (David Airlie and Jérôme Glisse) working on Radeon software,<ref>[https://www.phoronix.com/scan.php?page=news_item&px=ODg5Nw AMD's Hiring Another Open-Source Driver Developer] [[Phoronix]], December 11, 2010 (Articlearticle by [[Michael Larabel]])</ref> and the [[Fedora Project]] sponsors a Fedora Graphics Test Week event before the launch of their new [[Fedora (operating system)|Linux distribution]] versions to test free graphics drivers.<ref>[https://www.phoronix.com/scan.php?page=news_item&px=OTEyMQ It's Fedora Graphics Test Week] [[Phoronix]], February 22, 2011 (Articlearticle by [[Michael Larabel]])</ref> Other companies which have provided development or support include [[Novell]] and [[VMware]].
 
== Open hardware projects ==
Line 243 ⟶ 241:
The Nyuzi,<ref>{{cite web|url=https://github.com/jbush001/NyuziProcessor/|title=Nyuzi is an experimental GPGPU processor|website=[[GitHub]]|date=June 2021}}</ref> an experimental GPGPU processor, includes a synthesizable hardware design written in [[System Verilog]], an instruction set emulator, an [[LLVM]]-based C-C++ compiler, software libraries and tests and explores parallel software and hardware. It can run on a Terasic DE2-115 [[field-programmable gate array]] board.<ref>{{cite web|url=https://github.com/jbush001/NyuziProcessor/wiki/SOC-Test-Environment|title=SOC Test Environment|website=[[GitHub]]}}</ref><ref>{{cite web|url=https://github.com/jbush001/NyuziProcessor/tree/master/hardware/fpga/de2-115|title=Running on Terasic DE2-115 FPGA board|website=[[GitHub]]}}</ref>
 
If a project uses FPGAs, it generally has a partially (or completely) closed-source toolchain. There are currently a couple of open-source toolchains available, however, for Lattice-based FPGAs (notably for iCE40 and ECP5 boards) which utilize Project IceStorm,<ref>{{cite web|url=http://www.clifford.at/icestorm/|title=Project IceStorm Homepage|date=21 January 2022 }}</ref> and Trellis,<ref>{{cite web|url=https://github.com/SymbiFlow/prjtrellis|title=Project Trellis Repository|website=[[GitHub]]|date=30 May 2021}}</ref> respectively. There is also a larger, ongoing effort to create the "GCC of FPGAs" called SymbiFlow<ref>{{cite web|url=https://symbiflow.github.io/|title=SymbiFlow Homepage}}</ref> which includes the aforementioned FPGA toolchains as well as an early-stage open-source toolchain for Xilinx-based FPGAs.
 
== See also ==
Line 254 ⟶ 252:
 
== References ==
{{Reflist|30em}}
 
== External links ==
{{Wikibooks|Open Source}}
* [http://www.intellinuxgraphics.com/ Linux graphics drivers from Intel]
* [http://howtouselinux.net/best-graphics-card-for-linux/ Best Graphics Card For Linux] {{Webarchive|url=https://web.archive.org/web/20170325043742/http://howtouselinux.net/best-graphics-card-for-linux/ |date=2017-03-25 }}
* [http://www.nvidia.com/object/unix.html NVIDIA's Unix drivers portal page]
* [http://wacco.mveas.com/ Project VGA]
* [http://lists.freedesktop.org/archives/mesa-dev/2013-July/041900.html Direct3D 9 state tracker on Gallium3D]
* [http://cgit.freedesktop.org/mesa/mesa/commit/?id=92617aeac109481258f0c3863d09c1b8903d438b d3d1x: add new Direct3D 10/11 COM state tracker for Gallium]
* {{GitHub|freedreno}}
* [https://github.com/freedreno/freedreno/wiki Freedreno homepage]
* [https://archive.fosdem.org/2013/schedule/event/freedreno/ Freedreno/Gallium update]
* [http://www.phoronix-test-suite.com/ Phoronix Test Suite]