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, 9 meses y 29 días) | |
Licencia | GPL v2 | |
Estado actual | En desarrollo | |
Idiomas | Inglés | |
Información técnica | ||
Programado en | C y Ensamblador | |
Plataformas admitidas |
x86, x86-64, i386, ARM RISC-V, MIPS, IBM POWER, m68k | |
Versiones | ||
Última versión estable | 6.8-gnu11 de marzo de 2024 | |
Última versión en pruebas | 6.0-rc6-gnu (info) ( 19 de septiembre de 2022 (1 año, 5 meses y 28 días)) | |
Enlaces | ||
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.[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.
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.
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 o genéricos como sustitutos. Entre otros, las tarjetas de sonido, de vídeo, de red y de red inalámbrica son usadas con controladores genéricos, pudiendo que no funcionen todas las características, pero por lo general sí las básicas.
Desgraciadamente, aun teniendo controladores libres, éstos a menudo requieren que los fabricantes de dispositivos hardware publiquen el código fuente necesarios para poder compilar un controlador libre para 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.
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.
/*
* 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;
}
Las siguientes distribuciones de GNU utilizan o tienen disponible Linux-libre como su núcleo:[12]
Además, las siguientes distribuciones de GNU tienen planeado incluir Linux-libre como su núcleo:
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.
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.
Las mascotas que surgieron del llamado y que se muestran en el sitio del proyecto Linux-libre son: