Linux-libre
# Linux-libre

Linux-libre es un proyecto que publica y mantiene versiones modificadas del núcleo Linux a las que se les ha quitado todo el software que no incluye código fuente, así como el código fuente ofuscado o el que esté publicado mediante licencias privativas. Las partes que no tienen código fuente son llamadas blobs binarios y corresponden a firmware privativo.

Estos fragmentos privativos o firmwares incluidos en Linux sirven para inicializar los dispositivos, o aplicarles parches que solventan fallas del hardware que no pudieron ser corregidas antes de ser puestos a disposición de los usuarios. El firmware es cargado en el dispositivo por el controlador, formando parte de este y por consiguiente del núcleo. Es conocido que dichos firmwares contienen vulnerabilidades que pueden afectar a Linux pese a usar controladores libres, como es el caso del Intel Management Engine. En algunos casos sin el firmware no es posible hacer funcionar el dispositivo, quedando este inutilizado. Esto lleva a que hay menor cantidad de hardware compatible con Linux-libre que con Linux. Al hablar de dispositivos se incluye también la CPU de la computadora. Esto significa que las computadoras pueden quedar totalmente inservibles si su microprocesador también requiere de un firmware corrector para funcionar adecuadamente.

Linux-libre es el núcleo recomendado por la Free Software Foundation y una pieza principal de las distribuciones GNU totalmente libres. Linux-libre es mantenido y publicado por la Fundación Software Libre América Latina (FSFLA).

Existen proyectos para realizar implementaciones libres de dichos firmwares como libreboot, encargado de implementar BIOS y UEFI para las placas base de los computadores siempre que sea posible.

## Eliminación de firmware privativo

El proceso de limpieza se logra mediante el uso de un script llamado deblob-main. Este script está inspirado en el que se utiliza para gNewSense. Jeff Moe le realizó modificaciones posteriores para cubrir ciertos requisitos para su utilización con la distribución BLAG Linux and GNU. Existe también otro script llamado deblob-check, que se utiliza para verificar si un archivo fuente del núcleo, un parche o un archivo de fuentes comprimido aún contiene software sospechoso de ser privativo.

### Desventajas

La eliminación de controladores y firmwares privativos del núcleo imposibilita el uso de Linux-libre con el hardware que los necesite. En los casos en los que sea posible, se incluye controladores libres como sustitutos. Entre otros, las tarjetas de sonido, de vídeo, de red y de red inalámbrica quedan sin servicio sin un firmware y controlador disponibles.

Desgraciadamente, aun teniendo controladores libres, éstos a menudo requieren que los fabricantes de dispositivos hardware publiquen los firmwares necesarios para poder inicializar sus dispositivos. Sin estos firmwares no pueden funcionar. También existe la posibilidad de que requieran ser firmados digitalmente, por lo que no es posible realizar un firmware propio mediante ingeniería inversa y cargarlo en el chip, ya que este repudiará cualquier binario sin firmar. Adicionalmente las compañías pueden poner restricciones de distribución del firmware por lo que tampoco puede ser incluido en Linux ni en ningún paquete adicional hecho por la distribución, al poder ser considerado parte integrante de un controlador privativo por parte del fabricante del dispositivo. Este tipo de restricciones entorpecen el desarrollo de controladores libres además de dejar el dispositivo inhabilitado. Estos dispositivos nunca serán compatibles con Linux-libre, salvo que el código fuente de dichos firmwares sea publicado y se permita a los desarrolladores de Linux-libre y a sus usuarios firmar los binarios generados a partir de dicho código fuente.

## Ejemplo de inclusión de firmware privativo en Linux

Los microprocesadores de AMD e Intel pueden cargar firmware para activar, desactivar o corregir funcionalidad del chip. Linux incluye soporte para ello así como el código privativo en archivos binarios. A la izquierda se puede ver un fragmento de código fuente del controlador de Linux que permite cargar el firmware de un microprocesador AMD durante el inicio del sistema. Esta rutina toma el archivo indicado por la rutina get_builtin_microcode o por la ruta indicada por la variable ucode_path mediante la rutina find_microcode_in_initrd. Este fragmento de código se usa cuando Linux detecta la CPU de la computadora y llama al controlador para que provea el firmware del microprocesador. El controlador se encarga de todas las gestiones necesarias: búsqueda del firmware e instalación en la CPU. Esta instalación de firmware ocurre también cuando la CPU sale de un estado durmiente (hibernación o suspensión). El firmware queda cacheado en memoria para cargarlo cuantas veces sea necesario.

Cambios en el firmware pueden requerir cambios en Linux. Por ejemplo, en los microprocesadores AMD Ryzen el tamaño máximo del firmware cambió con respecto a procesadores anteriores. Linux 4.12rc5 fue modificado para soportarlo. Los firmwares de los dispositivos suelen estar en el directorio /lib/firmware del sistema operativo. Las distribuciones GNU/Linux que no usan Linux-libre suelen incluir paquetes de software con blobs (firmwares) adicionales para, según sus términos, proveer la mejor experiencia de usuario posible, a expensas de usar código privativo.

## Distribuciones de GNU/Linux-libre

Las siguientes distribuciones de GNU utilizan o tienen disponible Linux-libre como su núcleo:

* Amagi
* Arch Linux
* BLAG Linux and GNU
* Canaima GNU/Linux
* ConnochaetOS
* Dragora
* Gentoo Linux
* gNewSense
* GNU Guix System
* GNUinOS
* Hyperbola GNU/Linux-libre
* Kongoni
* LibreCMC
* NeonatoX GNU/Linux
* Parabola GNU/Linux-libre
* ProteanOS
* PureOS
* RMS GNU/Linux-libre
* Tlamaki GNU/Linux
* Trisquel GNU/Linux
* Uruk GNU
* Ututo
* VenenuX GNU/Linux

Además, las siguientes distribuciones de GNU tienen planeado incluir Linux-libre como su núcleo:

* Dyne:bolic
* Musix GNU+Linux

### Disponibilidad para otras distribuciones de GNU

Los códigos fuente y paquetes precompilados reconocidas por el proyecto Linux-libre están disponibles en las respectivas páginas de las diferentes distribuciones o programadores individuales para los siguientes distribuciones de forma no oficial.

* Canaima GNU/Linux
* Fedora.
* Debian GNU/Linux
* Mandriva
* NixOS
* openSUSE
* Slackware
* Ubuntu.

## Versiones en tiempo real

El núcleo de Dyne:bolic posee la particularidad de haber sido compilado para trabajar en tiempo real, lo que le confiere un mejor desempeño para la edición multimedia. Asimismo, una versión precompilada con los parches de tiempo real de Andrew Morton está disponible en las versiones LTS de Trisquel GNU/Linux como descarga alternativa.

## Mascotas de Linux-libre

* Stux: Fue la primera mascota y es una fotografía de un pingüino limpio, colgado para que se seque después del lavado. Fue tomada por Lewis Laë, quien concedió a la FSFLA el permiso para utilizarla en su sitio; sin embargo, no está cubierta por una licencia libre. Se realizó entonces un llamado a dibujantes y diseñadores gráficos para crear una mascota que muestre la libertad obtenida por el pingüino, pues Stux, aunque limpio, sigue estando preso.

Las mascotas que surgieron del llamado y que se muestran en el sitio del proyecto Linux-libre son:

* Freetz: Dibujado por Burnaron, representa un pingüino libre que acaba de salir de la ducha, publicado en dos versiones: mapa de bits y gráfico vectorial.
* Lux: Dibujado por Guillaume Pasquet, representa el santo pingüino libre (con alas de ángel y aureola), realizado sobre la base de Tux (de Larry Ewing), mascota oficial del núcleo Linux estándar.
   * Gnu levitador y Lux: Es una composición realizada por Alexandre Oliva del gnu levitador, uno de los logos del proyecto GNU, que toca la flauta para liberar a Lux, haciéndolo levitar fuera de la jaula en donde estaba prisionero. Fue publicada en dos versiones: mapa de bits y gráfico vectorial.
* Freedo: Es la actual mascota oficial del proyecto Linux-libre. Es una versión modificada de Freetz realizada por Rubén Rodríguez Pérez. Existe también una alternativa en gris para impresión creada por Fernando.
   * Freedo con GNU: Alexander Oliva también creó una combinación de Freedo con el logo de GNU, creando así un logo que puede ser usado para mostrarse en el arranque del núcleo.
