stringtranslate.com

mancha binaria

En el contexto del software gratuito y de código abierto , el software propietario que sólo está disponible como ejecutable binario se denomina blob o blob binario . El término generalmente se refiere a un módulo de controlador de dispositivo cargado en el kernel de un sistema operativo de código abierto y, a veces, también se aplica al código que se ejecuta fuera del kernel, como imágenes de firmware del sistema, actualizaciones de microcódigo o programas de usuario . [1] [2] [3] [4] [5] [6] El término blob se utilizó por primera vez en los sistemas de gestión de bases de datos para describir una colección de datos binarios almacenados como una sola entidad.

Cuando los proveedores de hardware informático proporcionan documentación técnica completa para sus productos, los desarrolladores de sistemas operativos pueden escribir controladores de dispositivos de hardware para incluirlos en los núcleos del sistema operativo. Sin embargo, algunos proveedores, como Nvidia , no proporcionan documentación completa para algunos de sus productos y en su lugar proporcionan controladores sólo binarios. Esta práctica es más común para controladores de gráficos acelerados , dispositivos de red inalámbrica y controladores RAID de hardware . [7] En particular, los blobs binarios son muy poco comunes para los controladores de interfaz de red no inalámbrica , que casi siempre se pueden configurar mediante utilidades estándar (como ifconfig ) listas para usar; Theo de Raadt de OpenBSD atribuye esto al trabajo realizado por un único desarrollador de FreeBSD . [8] [9]

Política por proyecto

Algunos proyectos aprobados por la FSF se esfuerzan por proporcionar un sistema operativo gratuito y eliminarán todos los blobs binarios cuando no esté disponible la documentación del hardware o el código fuente de los controladores de dispositivos y todo el firmware aplicable; Dichos proyectos incluyen paquetes de kernel Linux-libre de FSFLA , Parabola , Devuan , Trisquel y LibreCMC . [10] Sin embargo, la gran mayoría de proyectos de código abierto hacen una distinción entre controladores de dispositivos solo binarios (blobs) y firmware solo binario (no considerados blobs [11] :  ... ), lo que permite que cierto firmware propietario sea se distribuyen libremente como parte de sus núcleos y, ante el desacuerdo de algunos contribuyentes principales, también admiten el uso de controladores de dispositivos propietarios que se distribuyen externamente, proporcionando interfaces de compatibilidad interna para que dichos controladores propietarios y componentes del espacio de usuario funcionen con su sistema. [12] [13] Los proyectos que siguen esta política incluyen el propio kernel de Linux , NetBSD , FreeBSD , DragonFly BSD y la mayoría de las distribuciones de Linux . [14] Algunos de estos proyectos ofrecen opciones para construir el sistema sin firmware propietario, excluyendo así el microcódigo sin fuente bajo demanda. [15]

El proyecto OpenBSD tiene una política notable de no sólo no aceptar ningún controlador de dispositivo binario en su árbol fuente, sino que tampoco admite oficialmente ningún componente de controlador de dispositivo propietario de terceros en su plataforma; [16] :  38... citando no sólo el potencial de fallas de seguridad indetectables o irreparables, sino también la invasión de la apertura y libertad de su software. [17] La ​​Free Software Foundation (FSF) está haciendo campaña activamente contra los blobs binarios. [18] La FSF también considera que la política de OpenBSD está redactada de forma confusa, ya que los "blobs" en la comunidad BSD se refieren sólo a lo que considera controladores no libres y no se aplican al firmware propietario ni al microcódigo sin fuente. [19] : BSD  El proyecto Debian incluía firmware binario libre y no libre del kernel de Linux , marcando y separando claramente los paquetes no libres [20] de acuerdo con el Contrato Social de Debian . A partir de Debian 6.0, esos blobs fueron eliminados. [19] : Debian 

Para OpenBSD, el líder del proyecto Theo de Raadt defiende la política de solicitar derechos de distribución sólo para firmware de microcódigo. "Una vez distribuidos... al menos el dispositivo funciona". Insinuando que la alternativa sería que los miembros de su pequeño proyecto codificaran ellos mismos firmware libre en el lenguaje ensamblador de muchos conjuntos de chips, suplica "no nos carguen con más tareas". A pesar de esto, prefiere los conjuntos de chips que funcionan sin firmware y habla con entusiasmo de los diseños asiáticos, que describe como más lentos en el mercado pero más maduros. [17]

El controlador gráfico propietario de Linux, libGL-fglrx-glx , compartirá la misma infraestructura DRM con Mesa 3D . Como no existe una ABI estable en el kernel , AMD tuvo que adaptar constantemente el antiguo blob binario utilizado por Catalyst.

En la comunidad de desarrollo del kernel de Linux , Linus Torvalds ha hecho fuertes declaraciones sobre la cuestión de los módulos sólo binarios, afirmando: "Me niego siquiera a considerar la posibilidad de atarme las manos sobre algún módulo sólo binario", y continúa: "Quiero que la gente sepa que cuando usan módulos sólo binarios, es SU problema". [21] En 2008, 176 desarrolladores del kernel de Linux firmaron una declaración de posición sobre los módulos del kernel de Linux que decía: "Nosotros, los desarrolladores del kernel de Linux abajo firmantes, consideramos que cualquier módulo o controlador del kernel de Linux de código cerrado es dañino e indeseable... Hemos repetido repetidamente Consideró que eran perjudiciales para los usuarios de Linux, las empresas y el ecosistema Linux en general". [22] El mantenedor del kernel de Linux, Greg Kroah-Hartman, ha declarado que es ilegal redistribuir módulos de código cerrado para el kernel de Linux con licencia pública general GNU . [23]

Sin embargo, el kernel de Linux contiene firmware de código cerrado requerido por varios controladores de dispositivos. [24] [19] Alexandre Oliva , el mantenedor de Linux-libre , una versión del kernel de Linux que intenta eliminar todos los blobs binarios, incluido el microcódigo sin fuente, escribió en 2011: "Linux no ha sido software libre desde 1996, cuando El señor Torvalds aceptó las primeras piezas de software no libre en las distribuciones de Linux que ha publicado desde 1991. A lo largo de estos años, mientras este núcleo creció en un factor de 14, la cantidad de firmware no libre requerido por los controladores de Linux creció en un factor alarmante de 83." [25]

La mayoría de los controladores para dispositivos móviles que ejecutan el sistema operativo Android se envían en binario y están vinculados a una versión específica del kernel de Linux. Esto hace que sea muy difícil actualizar una versión del kernel porque puede requerir ingeniería inversa , reimplementar los controladores de dispositivo propietarios como software libre, crear y depurar envoltorios, aplicar parches binarios o una combinación de estos pasos, todo lo cual implica que los dispositivos heredados nunca funcionarán. Obtenga la última versión de Android. [ cita necesaria ]

Problemas

Hay varias razones por las que los blobs binarios pueden resultar problemáticos. [11]

En primer lugar, no se puede conocer su funcionamiento preciso y no se pueden detectar errores auditando el código fuente; Con frecuencia, los errores sólo se diagnostican mediante una investigación minuciosa cuando un sistema comienza a comportarse inesperadamente. Estos errores no detectados también pueden exponer silenciosamente a los usuarios y sistemas a riesgos de seguridad. Por lo tanto, no se puede verificar la idoneidad del conductor para el propósito, e incluso si se encuentra un error, no hay una manera fácil de solucionarlo.

En segundo lugar, como el código fuente no está disponible, los usuarios no pueden mejorar fácilmente el controlador, ni adaptarlo a arquitecturas que no eran compatibles originalmente, ni adaptarlo para funcionar con ligeras variantes del hardware ni actualizarlo para que funcione en nuevos núcleos que tengan la API y arquitectura modificadas.

En tercer lugar, el uso de este software obligaría a los usuarios a confiar en que los proveedores o terceros no colocarán puertas traseras, software espía o códigos maliciosos en el blob. Además, el proveedor de hardware puede decidir no dar soporte a un sistema operativo determinado, abandonar el mantenimiento del controlador en cualquier momento o, en caso de que la empresa cierre, dejar el controlador completamente sin soporte.

Finalmente, se puede considerar que los blobs binarios trazan una línea entre la parte de la comunidad que cree en los ideales del software libre, rechazando el software propietario, y la parte que ve el código abierto como deseable por razones puramente técnicas, a menudo careciendo de una fuerte oposición a los blobs binarios. "siempre que funcionen". Se considera que esta fragmentación y la aceptación de un número creciente de componentes propietarios en Linux debilitan la capacidad de la comunidad para resistir la tendencia de los fabricantes a negarse cada vez más a proporcionar documentación para sus binarios.

Usar a través de envoltorios

Un contenedor es un software que permite que un sistema operativo utilice un controlador de dispositivo propietario binario escrito para otro sistema operativo. Ejemplos de contenedores son NDISwrapper para Linux y Project Evil para FreeBSD y NetBSD . Estos contenedores permiten que estos sistemas operativos utilicen controladores de red escritos para Microsoft Windows mediante la implementación de la API NDIS de Microsoft .

Otro ejemplo es proporcionar capas de compatibilidad para que se puedan utilizar servicios públicos externos para dar servicio al hardware. Los ejemplos incluyen algunos controladores de controlador RAID en FreeBSD , donde el administrador del sistema tendría que habilitar la capa de compatibilidad de Linux en FreeBSD y adquirir de forma independiente blobs binarios específicos de Linux directamente del fabricante del hardware para monitorear y reparar el hardware. [12] [13] [26] Alrededor de 2005, esta situación impulsó a OpenBSD a crear y popularizar sus conceptos bio(4) , bioctl y unidad de sensor como una solución alternativa para el monitoreo RAID , [27] [16] los cuales Posteriormente, estos conceptos también llegaron a NetBSD .

Firmware del dispositivo

El firmware es el software requerido por los microcontroladores integrados que acompañan a algún hardware; generalmente no se considera un blob binario. [28] [19] : BSD  [11] :  ... En muchos dispositivos, el firmware se almacena en una memoria flash integrada no volátil , pero para disminuir costos y facilitar las actualizaciones, algunos dispositivos contienen solo RAM estática y requieren el sistema operativo host. para cargar firmware cada vez que se conectan (especialmente dispositivos USB ). Aunque el firmware está presente en el controlador del sistema operativo, simplemente se copia en el dispositivo y no lo ejecuta la CPU, lo que elimina preocupaciones sobre fallas de seguridad adicionales en comparación con lo que ya es posible con un ataque DMA, incluso si el firmware ya estaba almacenado en el controlador del sistema operativo. dispositivo en todo momento. El proyecto OpenBSD acepta imágenes binarias de firmware/ microcódigo y redistribuirá estas imágenes si la licencia lo permite; [28] [29] Si el proveedor no permite la redistribución gratuita e incondicional, las instrucciones de la máquina sobre cómo recuperar estas imágenes pueden proporcionarse en el árbol de puertos (lo que impide que algunos dispositivos inalámbricos gravados (por ejemplo, Intel Wireless) estén disponibles durante el instalación inicial). [30] En implementaciones de Microsoft Windows, el microcódigo binario puede estar incrustado directamente en el controlador del dispositivo SYS/DLL/VXD, en lugar de un archivo de microcódigo separado.

BIOS y UEFI

SeaBIOS , una implementación de código abierto de BIOS, que se ejecuta como carga útil de arranque central en un Lenovo ThinkPad X60

El BIOS , que funciona como un gestor de arranque y admite aplicaciones heredadas en modo real , es un componente crucial de muchas computadoras compatibles con IBM . A finales de la década de 1990 se empezó a trabajar en EFI (Interfaz de firmware extensible) con el objetivo de trasladar la BIOS heredada a una interfaz moderna con un modelo de controlador modular. EFI es de código cerrado y finalmente fue adoptado por muchos fabricantes de hardware líderes en la industria como UEFI (Interfaz de firmware extensible unificada). El EDK (EFI Development Kit) fue desarrollado para ayudar en los proyectos de desarrollo de firmware EFI. [31]

También a finales de la década de 1990, se inició el proyecto coreboot para crear una alternativa de código abierto al BIOS heredado desde cero. [31] La comunidad de desarrolladores de coreboot se organiza en torno a Stefan Reinauer y está dirigida por desarrolladores de firmware con derechos de compromiso. [32] A pesar de que el firmware binario de código cerrado ha estado en el corazón de la arquitectura x86 , coreboot solo incorpora los pocos binarios propietarios que son necesarios para proporcionar a los usuarios un soporte de hardware de nivel básico. [33] Una alternativa de código completamente abierto a BIOS y UEFI es libreboot , que fue promovido por la Free Software Foundation (FSF). [34]

Ver también

Referencias

  1. ^ Michael Larabel (6 de agosto de 2012). "Coreboot: Reemplazo del blob de BIOS de video binario de Intel". Forónix . Consultado el 23 de junio de 2015 .
  2. ^ Chris Hoffmann (13 de febrero de 2015). "Cómo Intel y los fabricantes de PC le impiden modificar el firmware de su computadora portátil". pcworld.com . Consultado el 23 de junio de 2015 .
  3. ^ "Estado de libertad del BIOS". puri.smo . 2014-11-12 . Consultado el 23 de junio de 2015 .
  4. ^ Michael Larabel (24 de octubre de 2012). "El controlador de GPU Raspberry Pi resulta ser una mierda". Forónix . Consultado el 23 de junio de 2015 .
  5. ^ Jake Edge (17 de junio de 2015). "Chromium de repente comienza a descargar un blob binario". LWN.net . Consultado el 23 de junio de 2015 .
  6. ^ "3.9:" ¡Gota!"". Canciones de lanzamiento de OpenBSD . OpenBSD . 2006-05-01. Los blobs son controladores binarios compilados por proveedores sin ningún código fuente.
  7. ^ "Paquetes Debian creados a partir del paquete fuente 'firmware-nonfree': firmware binario para varios controladores en el kernel de Linux". 2010 . Consultado el 25 de marzo de 2010 .
  8. ^ Constantino A. Murenin (10 de diciembre de 2006). "Почему так важно иметь documentos sobre programas de programación". Linux.org.ru (en ruso).
  9. ^ Theo de Raadt (3 de diciembre de 2016). "Página 11: El hardware: Ethernet". Abra la documentación para hardware. OpenCON 2006, 2 y 3 de diciembre de 2006. Courtyard Venice Airport, Venecia/Tessera, Italia. Sólo unos pocos vendedores recalcitrantes permanecen cerrados. / ethernet 95% documentado 99% funcionando / Documentación abierta en gran parte gracias al esfuerzo de un hombre: Bill Paul
  10. ^ "Lista de distribuciones gratuitas de GNU/Linux". Proyecto GNU . Fundación de Software Libre .
  11. ^ abc Andrews, Jeremy (19 de abril de 2006). "Entrevista con Jonathan Gray y Damien Bergamini". kerneltrap.org. Archivado desde el original el 11 de diciembre de 2007 . Consultado el 6 de enero de 2008 .
  12. ^ ab Scott Long; Adaptec, Inc (2000). "aac(4) - Controlador del controlador Adaptec AdvancedRAID". Referencia cruzada de BSD . FreeBSD . Si el kernel está compilado con la opción COMPAT_LINUX, o están cargados los módulos aac_linux.ko y linux.ko...
    • "aac - Controlador del controlador Adaptec AdvancedRAID". Páginas del manual de FreeBSD.
  13. ^ ab Achim Leubner (2013). "aacraid(4) - Controlador del controlador AACRAID de Adaptec". Referencia cruzada de BSD . FreeBSD . Si el kernel está compilado con la opción COMPAT_LINUX, o están cargados los módulos aacraid_linux.ko y linux.ko...
    • "aacraid - Controlador del controlador AACRAID de Adaptec". Páginas del manual de FreeBSD.
  14. ^ Matzan, Jem (15 de junio de 2005). "Conocedores de BSD en Linux". NoticiasForge. Archivado desde el original el 23 de marzo de 2006 . Consultado el 7 de julio de 2006 .Consulte la respuesta de Christos Zoulas a "¿Es común compartir entre Free/Open/NetBSD y el kernel de Linux? Y si es así, ¿es en ambos sentidos?"
  15. ^ "compilación/opciones/WITHOUT_SOURCELESS_UCODE". Referencia cruzada de BSD . FreeBSD . 2012-02-04.
  16. ^ ab "3.8:" Hackers del RAID perdido"". Canciones de lanzamiento de OpenBSD . OpenBSD . 2005-11-01.
  17. ^ ab Andrews, Jeremy (2 de mayo de 2006), "Entrevista: Theo de Raadt", KernelTrap , Jeremy Andrews, archivado desde el original el 3 de junio de 2006
  18. ^ "La protesta contra ATI casi lleva al arresto de RMS". Fundación de Software Libre. 27 de abril de 2006 . Consultado el 10 de octubre de 2006 .
  19. ^ abcd "Explicando por qué no respaldamos otros sistemas". Proyecto GNU . Fundación de Software Libre .
  20. ^ "Paquetes de firmware-linux de Debian". 2010 . Consultado el 25 de marzo de 2010 .
  21. ^ "a/lt-binario". lwn.net .
  22. ^ Greg Kroah-Hartman (junio de 2008). "Una declaración de posición sobre los módulos del kernel de Linux". La Fundación Linux .
  23. ^ Greg Kroah-Hartman (2006). "Mitos, mentiras y verdades sobre el kernel de Linux". Simposio de Linux .
  24. ^ "Firmware no gratuito". Proyecto GNU § Directrices de distribución de sistemas libres (GNU FSDG) . Fundación de Software Libre .
  25. ^ "::[FSFLA]:: Recupera tu libertad con Linux-2.6.33-libre". fsfla.org .
  26. ^ Jonathan Gray (2 de diciembre de 2006). "Página 26: Sólo abierto al público: FreeBSD". Arquitectura e implementación de controladores en OpenBSD. OpenCON 2006, 2 y 3 de diciembre de 2006. Courtyard Venice Airport, Venecia/Tessera, Italia . Consultado el 27 de marzo de 2019 . controladores diseñados para herramientas de administración RAID de Linux solo binarias
  27. ^ Theo de Raadt (9 de septiembre de 2005). "Soporte de gestión RAID disponible en OpenBSD 3.8". misc@ (Lista de correo). OpenBSD .
  28. ^ ab "OpenBSD funciona para abrir conjuntos de chips inalámbricos". Trampa del núcleo. 2 de noviembre de 2004. Archivado desde el original el 20 de junio de 2006 . Consultado el 23 de junio de 2006 .
  29. ^ "/sys/dev/microcódigo/". OpenBSD .
  30. ^ "sysutils/firmware". Puertos OpenBSD .
  31. ^ ab Vincent Zimmer; Jiming Sun; Marc Jones; Stefan Reinauer (2015). Soluciones de firmware integradas: mejores prácticas de desarrollo para Internet de las cosas . Presione. pag. 121.ISBN 9781484200704.
  32. ^ Vicente Zimmer; Jiming Sun; Marc Jones; Stefan Reinauer (2015). Soluciones de firmware integradas: mejores prácticas de desarrollo para Internet de las cosas . Presione. pag. 61.ISBN 9781484200704.
  33. ^ Vicente Zimmer; Jiming Sun; Marc Jones; Stefan Reinauer (2015). Soluciones de firmware integradas: mejores prácticas de desarrollo para Internet de las cosas . Presione. pag. 65.ISBN 9781484200704.
  34. ^ "Campaña por BIOS gratis". Fundación de Software Libre. 29 de noviembre de 2006 . Consultado el 2 de enero de 2007 .

enlaces externos