Linux es el proyecto del kernel (núcleo) del sistema operativo que generalmente se llama igual, muchos lo llaman GNU/Linux, y empresas le ponen distintas marcas comerciales.
Resulta que el kenel hace muchos años que incorpora piezas de software oscurecido y de los cuales no se cuenta con documentación. ¿por qué? por una complicidad entre los productores de hardware que entregan estos códigos y los desarrolladores del kernel que lo incorporan y distribuyen a los usuarios.
Estas piezas no libres (porque no pueden ser ni modificadas ni estudiadas) empezaron siendo unas pocas, pero han ido creciendo en número con el correr del tiempo, llegando más de cien, en su mayoría drivers y archivos de firmware y se conocen como blob binarios
Entré al sitio oficial del proyecto Linux y descargué la última versión estable (4.3) y me puse a analizar de qué está compuesto.
Es un proyecto de software enorme:
- Un archivo compactado de 83M
- Descompactados ocupan 688M
- Un total de 3439 carpetas
- Un total de 51544 archivos
- Más de 20 millones de líneas de código (según Wikipedia)
que tiene más de 11 años de desarrollo desde su primer versión estable.
Revisando sus archivos con file veo que está compuesto de:
$ find linux-4.3 -type f -exec file {} \; | cut -d: -f 2- | sort | uniq -c | sort -nr 38900 ASCII c program text 6226 ASCII English text 2955 ASCII text 1324 ASCII Pascal program text 948 UTF-8 Unicode c program text 199 UTF-8 Unicode English text 180 HTML document text 113 POSIX shell script text executable 93 Bourne-Again shell script text executable 93 ASCII C++ program text 73 UTF-8 Unicode Pascal program text 60 ASCII make commands text 44 ASCII assembler program text 43 OS/2 REXX batch file text 39 XML document text 19 a /usr/bin/perl -w script text executable 14 troff or preprocessor input text 14 Netpbm PPM image text 14 ASCII c program text, with very long lines 13 a /usr/bin/perl script text executable 12 ASCII FORTRAN program text 10 a /usr/bin/python script text executable 9 exported SGML document text 9 empty 9 data 8 awk script text executable 6 very short file (no magic) 6 a perl script text executable 6 SVG Scalable Vector Graphics image 6 ISO-8859 English text 6 Arhangel archive data 6 ASCII Pascal program text, with very long lines 5 lex description text 5 ISO-8859 c program text 4 UTF-8 Unicode (with BOM) English text 4 ASCII mail text 4 ASCII English text, with very long lines 3 Perl5 module source text 3 PDF document, version 1.4 3 PDF document, version 1.3 3 ISO-8859 Pascal program text 3 ERROR: line 22: regexec error 17, (illegal byte sequence) 3 Bio-Rad .PIC Image File 10799 x 8202, 8234 images in file 2 diff output text 2 a python script text executable 2 a /usr/bin/python2 script text executable 2 UTF-8 Unicode text 2 TI-XX Graphing Calculator (FLASH) 2 PDF document, version 1.2 2 Non-ISO extended-ASCII c program text 2 Netpbm PBM image text 2 FIG image text, version 3.2 2 DBase 3 index file 2 Bio-Rad .PIC Image File 26915 x 28262, 25956 images in file 2 ASCII text, with very long lines 1 news or mail text 1 core file (Xenix) 1 a python2 script text executable 1 a /usr/bin/perl -s script text executable 1 XPack archive data 1 UTF-8 Unicode c program text, with very long lines 1 UTF-8 Unicode C++ program text 1 SemOne archive data 1 SAS 7+ 1 SAS 1 Par archive data 1 PPMN archive data 1 Minix filesystem, V3, 20302 zones 1 Minix filesystem, V3, 15648 zones 1 LaTeX 2e document text 1 ICE authority data 1 GIF image data, version 89a, 257 x 303 1 Bio-Rad .PIC Image File 10799 x 29216, 25460 images in file 1 ASCII news text 1 ASCII c program text, with escape sequences 1 ASCII M4 macro language pre-processor text 1 ASCII Java program text 1 ASCII English text, with overstriking
y descargo el script deblob del sitio de la FSFLA y veo que esos archivos están contaminados con códigos que no puedo modificar, ni estudiar:
$ cd linux-4.3/ $ ../deblob-4.3 Makefile: added -gnu to EXTRAVERSION README: added blurb about GNU Linux-libre include/linux/firmware.h: added non-Free firmware notification support include/linux/ihex.h: added non-Free ihex firmware notification support drivers/base/firmware_class.c: shorten non-Free firmware fail-to-load timeout MICROCODE_AMD - AMD microcode patch loading support arch/x86/kernel/cpu/microcode/amd.c: disabled non-Free firmware-loading machinery arch/x86/kernel/cpu/microcode/amd.c: removed blobs MICROCODE_AMD_EARLY - Early load AMD microcode arch/x86/kernel/cpu/microcode/amd_early.c: removed blobs MICROCODE_INTEL - Intel microcode patch loading support arch/x86/kernel/cpu/microcode/intel.c: disabled non-Free firmware-loading machinery arch/x86/kernel/cpu/microcode/intel.c: removed blobs MICROCODE_INTEL_EARLY - Early load Intel microcode arch/x86/kernel/cpu/microcode/intel_early.c: removed blobs MICROCODE_EARLY - Early load microcode Documentation/x86/early-microcode.txt: removed blobs ... DRM_NOUVEAU - Nouveau (nVidia) cards drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c: disabled non-Free firmware-loading machinery drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c: removed blobs drivers/gpu/drm/nouveau/nvkm/engine/falcon.c: disabled non-Free firmware-loading machinery drivers/gpu/drm/nouveau/nvkm/engine/falcon.c: removed blobs drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c: disabled non-Free firmware-loading machinery drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c: removed blobs ...
Entonces, la próxima vez que diga que Linux es libre, sepa que no es así. El linux (kernel) que recibe con las distribuciones más conocidas no permitirá que haga ciertas cosas…. claro que usarlo podrá usarlo, de última es la llamada Libertad 0 (cero)
Más información sobre blob binarios:
* Conferencia: Binary Blobs Attack 2012
* Linux Foundation Driver Statement 2009