By | 7 diciembre, 2015

gato_encerrado

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *