# Controlador de dispositiu gràfic gratuït i de codi obert

Un controlador de dispositiu gràfic gratuït i de codi obert és una pila de programari que controla el maquinari de gràfics per ordinador i admet interfícies de programació d'aplicacions (API) de representació de gràfics i es publica sota una llicència de programari lliure i de codi obert. Els controladors de dispositius gràfics s'escriuen perquè un maquinari específic funcioni dins d'un nucli de sistema operatiu específic i per donar suport a una sèrie d'API utilitzades per les aplicacions per accedir al maquinari gràfic. També poden controlar la sortida a la pantalla si el controlador de la pantalla forma part del maquinari gràfic. La majoria dels controladors de dispositius gràfics gratuïts i de codi obert són desenvolupats pel projecte Mesa. El controlador està format per un compilador, una API de renderització i programari que gestiona l'accés al maquinari gràfic.
Els controladors sense codi font disponible lliurement (i legalment) es coneixen habitualment com a controladors binaris. Els controladors binaris utilitzats en el context de sistemes operatius que són propensos a un desenvolupament i canvi continus (com Linux) creen problemes per als usuaris finals i els mantenedors de paquets. Aquests problemes, que afecten l'estabilitat, la seguretat i el rendiment del sistema, són la raó principal del desenvolupament independent de controladors gratuïts i de codi obert. Quan no hi ha documentació tècnica disponible, sovint s'obté una comprensió del maquinari subjacent mitjançant l'enginyeria inversa de la sala blanca. D'acord amb aquesta comprensió, els controladors de dispositiu es poden escriure i publicar legalment sota qualsevol llicència de programari.
En casos rars, el codi font del controlador d'un fabricant està disponible a Internet sense una llicència gratuïta. Això vol dir que el codi es pot estudiar i modificar per a ús personal, però el codi font alterat (i normalment l'original) no es pot distribuir lliurement. Les solucions als errors del controlador no es poden compartir fàcilment en forma de versions modificades del controlador. Per tant, la utilitat d'aquests controladors es redueix significativament en comparació amb els controladors gratuïts i de codi obert.

## Problemes amb els controladors propietaris
### Vista del desenvolupador de programari

Hi ha objeccions als controladors només binaris basats en problemes de copyright, seguretat, fiabilitat i desenvolupament. Com a part d'una campanya més àmplia contra els blobs binaris, el desenvolupador principal d'OpenBSD Theo de Raadt va dir que amb un controlador binari "no hi ha manera d'arreglar-lo quan es trenca (i es trencarà)"; quan el fabricant declara que un producte que es basa en controladors binaris està al final de la seva vida útil, "es trenca per sempre". El projecte també ha afirmat que els controladors binaris "amaguen errors i solucions per als errors", una observació que ha estat una mica reivindicada per defectes trobats en els controladors binaris (incloent un error explotable en els controladors 3D de Nvidia descobert a Octubre de 2006 per Rapid7). S'especula que l'error existeix des del 2004; Nvidia ho ha negat, afirmant que el problema només se'ls va comunicar el juliol de 2006 i que l'error de 2004 era un error a X.Org (no al controlador de Nvidia).

### Vista del desenvolupador de maquinari

Quan aplicacions com un motor de jocs en 3D o un programari de gràfics per ordinador en 3D desvien els càlculs de la CPU a la GPU, solen utilitzar una API de propòsit especial com OpenGL o Direct3D i no aborden directament el maquinari. Com que tota la traducció (des de les trucades a l'API fins als codis operatius de la GPU) la fa el controlador del dispositiu, conté coneixements especialitzats i és un objecte d'optimització. A causa de la història de la rigidesa del desenvolupament de controladors propietaris, hi ha hagut un augment recent en el nombre de controladors de dispositius recolzats per la comunitat per a GPU d'escriptori i mòbils. Les organitzacions de maquinari lliure i obert com FOSSi, LowRISC i altres també es beneficiaran del desenvolupament d'un estàndard de maquinari gràfic obert. Això proporcionaria als fabricants d'ordinadors, aficionats i similars una plataforma completa i lliure de drets d'autor amb la qual desenvolupar maquinari informàtic i dispositius relacionats.

## Arquitectura del programari

Els controladors gratuïts i de codi obert els desenvolupen principalment a i per a Linux els desenvolupadors del nucli de Linux, els entusiastes de la programació de tercers i els empleats d'empreses com Advanced Micro Devices. Cada conductor té cinc parts:
* Un DRM de component del nucli de Linux.
* Un controlador KMS del component del nucli de Linux (el controlador del controlador de pantalla).
* Un component d'espai d'usuari libDRM (una biblioteca d'embolcall per a trucades al sistema DRM, que només hauria d'utilitzar Mesa 3D).
* Un component d'espai d'usuari de Mesa 3D. Aquest component és específic del maquinari; s'executa a la CPU i tradueix les ordres OpenGL, per exemple, en codi màquina per a la GPU. Com que el controlador del dispositiu està dividit, la classificació és possible. Mesa 3D és l'única implementació gratuïta i de codi obert d'OpenGL, OpenGL ES, OpenVG, GLX, EGL i OpenCL. El juliol de 2014, la majoria dels components es conformaven amb les especificacions Gallium3D. Un rastrejador d'estats completament funcional per a la versió 9 de Direct3D està escrit en C, i un rastrejador sense manteniment per a les versions 10 i 11 de Direct3D està escrit en C++. Wine té la versió 9 de Direct3D. Un altre component Wine tradueix les trucades de Direct3D en trucades OpenGL, treballant amb OpenGL.
* Device Dependent X (DDX), un altre controlador de dispositiu gràfic 2D per al servidor X.Org
El DRM és específic del nucli. En general, un controlador VESA està disponible per a qualsevol sistema operatiu. El controlador VESA admet la majoria de targetes gràfiques sense acceleració i amb resolucions de visualització limitades a un conjunt programat a la BIOS de vídeo pel fabricant.

## Referències

* ↑ Error: hi ha arxiuurl o arxiudata, però calen tots dos paràmetres.Theo de Raadt. «[Theo de Raadt Open Documentation for Hardware]» (en anglès). Presentation slides from OpenCON 2006, 03-12-2006. [Consulta: 1r febrer 2007].
* ↑ «What does "binary" means in device driver?» (en anglès). [Consulta: 14 novembre 2017].
* ↑ «3.9: "Blob!"» (en anglès). OpenBSD. [Consulta: 12 febrer 2007].
* ↑ «Linux - How does the Rapid7 Advisory R7-0025 affect the NVIDIA Unix driver?» (en anglès).
* ↑ «Index of /doc/Documentation/fb/» (en anglès). [Consulta: 15 novembre 2017].