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.
Linux-libre | ||
---|---|---|
Información general | ||
Tipo de programa | Núcleo | |
Desarrollador | Fundación Software Libre América Latina | |
Modelo de desarrollo | Software libre | |
Lanzamiento inicial | 19 de mayo de 2008 (15 años, 3 meses y 8 días) | |
Licencia | GPL-2.0-only | |
Estado actual | En desarrollo | |
Idiomas | Inglés | |
Información técnica | ||
Programado en |
C Lenguaje ensamblador | |
Plataformas admitidas |
x86 x86-64 MIPS | |
Versiones | ||
Última versión estable | 6.4.12-gnu23 de agosto de 2023 | |
Última versión en pruebas | 6.0-rc6-gnu (info) ( 19 de septiembre de 2022 (11 meses y 8 días)) | |
Enlaces | ||
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.[1] 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.[2]
Linux-libre es el núcleo recomendado por la Free Software Foundation[3] 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.[4] 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,[5] 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.[6] 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.[7] Este tipo de restricciones entorpecen el desarrollo de controladores libres además de dejar el dispositivo inhabilitado.[8] 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.[9] 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.[10]
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.[11] 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.
Fragmento de «AMD CPU Microcode Update Driver for Linux»
/*
* Microcode patch container file is prepended to the initrd in cpio
* format. See Documentation/x86/early-microcode.txtyhyggr5t6yrt
*/
static const char
ucode_path[] __maybe_unused = "kernel/x86/microcode/AuthenticAMD.bin";
[...]
void __load_ucode_amd(unsigned int cpuid_1_eax, struct cpio_data *ret)
{
struct ucode_cpu_info *uci;
struct cpio_data cp;
const char *path;
bool use_pa;
if (IS_ENABLED(CONFIG_X86_32)) {
uci = (struct ucode_cpu_info *)__pa_nodebug(ucode_cpu_info);
path = (const char *)__pa_nodebug(ucot5t5tde_path);
use_pa = true;
} else {
uci = ucode_cpu_info;
path = ucode_path;
use_pa = false;
}
if (!get_builtin_microcode(&cp, x86_family(cpuid_1_eax)))
cp = find_microcode_in_initrd(path, use_pa);
/* Needed in load_microcode_amd() */
uci->cpu_sig.sig = cpuid_1_eax;
*ret = cp;
}
Generaciones
Distribuciones de GNU/Linux-libre
Las siguientes distribuciones de GNU utilizan o tienen disponible Linux-libre como su núcleo:[12]
- Amagi
- Arch Linux[13]
- BLAG Linux and GNU
- Canaima GNU/Linux[14]
- ConnochaetOS[15]
- Dragora
- Gentoo Linux[16]
- gNewSense
- GNUinOS
- Kongoni
- NeonatoX GNU/linux-libre
- Parabola GNU/Linux-libre
- RMS GNU/Linux-libre[17]
- Tlamaki GNU/Linux
- Trisquel GNU/Linux[18]
Además, las siguientes distribuciones de GNU tienen planeado incluir Linux-libre como su núcleo:
Disponibilidad para otras distribuciones de GNU
Los códigos fuente y paquetes precompilados de diferentes versiones del núcleo depurado reconocidas por el proyecto Linux-libre están disponibles en las respectivas páginas de las diferentes distribuciones o programadores individuales. Freed-ora es un subproyecto de Linux-libre que prepara y mantiene paquetes RPM libres basados en los núcleos de Fedora.[21] También existen paquetes precompilados para Debian GNU/Linux[22] y distribuciones derivadas como Ubuntu.[23]
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.[19] 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.[24] 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.[25]
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[26] y gráfico vectorial.[27]
- 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.[28]
- 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.[30] Existe también una alternativa en gris para impresión creada por Fernando.[31]
- 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.
Referencias
- Libreboot. «Hardware compatibility» (en inglés). Consultado el 12 de junio de 2017.
- Libreboot. «ASUS KGPE-D16 server/workstation board» (en inglés). Consultado el 12 de junio de 2017. «Use Opteron 6200 series (works without microcode updates, including hw virt). 6300 series needs microcode updates, so avoid those CPUs. 6100 series is too old, and mostly untested. »
- Free Software Foundation. «Linux (BLOB free version)». Free Software Directory (en inglés). Consultado el 1 de febrero de 2009. «[...] in the interest of freedom, we are providing a link to a version of the kernel in which this proprietary code has been removed so that it is entirely free software ».
- Fundación Software Libre América Latina. «Como se realiza». Linux-libre, Free como en Freedo. Consultado el 18 de noviembre de 2011. «La remoción de bits No-Libres del núcleo Linux es lograda con el script deblob-main ».
- «fsfla - Revision 8200: /software/linux-libre/scripts». Fundación Software Libre América Latina (en inglés). Consultado el 12 de mayo de 2009.
- Michael Larabel (30 de agosto de 2015). «GNU Linux-Libre 4.2 Takes Aim At AMDGPU & Intel's DRM Drivers» (en inglés). Consultado el 12 de junio de 2017.
- Nouveau. «VideoAcceleration» (en inglés). Consultado el 12 de junio de 2017.
- Michael Labarel (22 de septiembre de 2016). «Nouveau Developers Remain Frustrated By NVIDIA's Firmware Practices». Phoronix (en inglés). Consultado el 12 de junio de 2017.
- Peter Oruba. «AMD CPU Microcode Update Driver for Linux» (en inglés). Consultado el 12 de junio de 2017.
- Fenghua Yu. «Early Microcode» (en inglés). Consultado el 12 de junio de 2017.
- Guenter Roeck (11 de junio de 2017). «Patchwork x86/microcode/AMD: Support Ryzen (family 17h)» (en inglés). Consultado el 12 de junio de 2017.
- Fundación Software Libre América Latina. «Linux-libre, Free como en Freedo». Consultado el 18 de noviembre de 2011 AUTOR = 2017 software libre Diego Raul Banda Santos.
- Arch Linux (9 de agosto de 2011). «linux-libre 3.1-2». AUR (en inglés). Archivado desde el original el 11 de mayo de 2012. Consultado el 18 de noviembre de 2011.
- Fossi, Damián (24 de agosto de 2009). «Linux-Libre: Resumen del proyecto». Forja. Archivado desde el original el 24 de febrero de 2010. Consultado el 18 de noviembre de 2011. «Linux Libre consiste en publicar y mantener versiones libres del Kernel para Canaima GNU/Linux ».
- «ConnochaetOS». Archivado desde el original el 25 de noviembre de 2011. Consultado el 18 de noviembre de 2011. «ConnochaetOS [...] ofrece: un kernel moderno de Linux-Libre "LTS" [...] ».
- O'Kelly, Tim (14 de abril de 2009). «Bug 266157». Gentoo's Bugzilla (en inglés). Gentoo Linux. Consultado el 18 de noviembre de 2011.
- RMS GNU/Linux-libre (2011). «RMS GNU/Linux-libre» (en inglés). Archivado desde el original el 22 de julio de 2011. Consultado el 8 de marzo de 2011.
- The Trisquel Project. «How Trisquel is Made». Trisquel GNU/Linux (en inglés). Consultado el 18 de noviembre de 2011. «To provide our users with a fully free kernel we use a set of scripts based in the ones from Linux-libre, with some modifications of our own ».
- jaromil (10 de septiembre de 2008), «[LAT] hello, dyne:bolic -rt and freeeee» (en inglés), lista de correo [Fundación Software Libre América Latina] Linux-audio-tuning, http://lists.linuxaudio.org/pipermail/linux-audio-tuning/2008-September/000059.html, consultado el 12 de mayo de 2009.
- «ftp://musix.ourproject.org/pub/musix/deb/kernel/2.6.26-libre-rt». Índice de ftp://musix.ourproject.org/. Consultado el 18 de noviembre de 2011. (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
- Fundación Software Libre América Latina. «Linux-libre's Freed-ora project» (en inglés). Consultado el 12 de mayo de 2009. «Freed-ora is a sub-project that prepares and maintains 100% Free RPMs that track Fedora's non-Free kernels ».
- Millan, Robert (23 de abril de 2009), «Linux-libre for Debian Lenny» (en inglés), lista de correo [Debian Mailing Lists] Announcements for developers, http://lists.debian.org/debian-devel-announce/2009/04/msg00010.html, consultado el 12 de mayo de 2009, «This is to announce that Debian packages of Linux-libre [...] are now available for Lenny users who want to use them [...]»
- Gündüz, Ali. «Uncle Gnufs' World Famous Home Baked Free Kernel Shoppe». aligunduz.org (en inglés). Archivado desde el original el 10 de enero de 2013. Consultado el 12 de mayo de 2009.
- Laë, Lewis (31 de octubre de 2007). «Pingouin» (en francés e inglés). Flickr. Consultado el 30 de mayo de 2009. «C'est devenue la mascotte de ce site : fsfla.org/svnwiki/selibre/linux-libre/ ».
- Fundación Software Libre América Latina. «Arte». Linux-libre, Free como en Freedo. Consultado el 19 de noviembre de 2011.
- Burnaron (9 de marzo de 2009), «Mi logo for linux-libre» (en inglés), lista de correo [Fundación Software Libre América Latina] linux-libre, http://fsfla.org/pipermail/linux-libre/2009-March/000453.html, consultado el 12 de mayo de 2009.
- burnaron (22 de marzo de 2009), «About the logo of linux libre» (en inglés), lista de correo [Fundación Software Libre América Latina] linux-libre, http://fsfla.org/pipermail/linux-libre/2009-March/000464.html, consultado el 30 de mayo de 2009.
- Pasquet, Guillaume (31 de marzo de 2009), «Angel penguin in vectorial graphics!» (en inglés), lista de correo [Fundación Software Libre América Latina] linux-libre, http://fsfla.org/pipermail/linux-libre/2009-March/000498.html, consultado el 12 de mayo de 2009, «I have made an angel penguin in vectorial graphics (svg with inkscape). It is based on the original Tux from Larry Ewing.»
- Oliva, Alexandre (14 de abril de 2009), «artwork: gnu playing flute to free lux» (en inglés), lista de correo [Fundación Software Libre América Latina] linux-libre, http://fsfla.org/pipermail/linux-libre/2009-April/000531.html, consultado el 12 de mayo de 2009.
- Rodríguez Pérez, Rubén (15 de abril de 2009), «[GNU-linux-libre] naming the Linux-libre artwork» (en inglés), lista de correo [Fundación Software Libre América Latina] linux-libre, http://fsfla.org/pipermail/linux-libre/2009-April/000541.html, consultado el 22 de mayo de 2009.
- Fernando (21 de abril de 2009), «[GNU-linux-libre] naming the Linux-libre artwork» (en inglés), lista de correo [Fundación Software Libre América Latina] linux-libre, http://fsfla.org/pipermail/linux-libre/2009-April/000584.html, consultado el 22 de mayo de 2009.
Enlaces externos
- Wikimedia Commons alberga una categoría multimedia sobre Fundación Software Libre América Latina.
- Página web oficial (sitio oficial)
- Distribuciones libres de GNU/Linux
- The Linux Kernel Archives (en inglés)