Un controlador de dispositivo propietario es un controlador de dispositivo de código cerrado publicado solo en código binario . En el contexto del software gratuito y de código abierto , un controlador de dispositivo de código cerrado se denomina blob o blob binario . El término generalmente se refiere a un módulo de kernel de código cerrado 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 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 la documentación completa para algunos de sus productos y, en cambio, proporcionan controladores solo 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ámbricos , que casi siempre se pueden configurar a través de utilidades estándar (como ifconfig ) listas para usar ; Theo de Raadt de OpenBSD atribuye esto al trabajo realizado por un solo desarrollador de FreeBSD . [8] [9]
Sistemas operativos de código abierto
Algunos proyectos aprobados por la FSF se esfuerzan por proporcionar un sistema operativo gratuito y eliminarán todos los blobs binarios cuando no haya disponible documentación para el hardware o el código fuente de los controladores de dispositivos y todo el firmware aplicable; tales proyectos incluyen el empaquetado del kernel Linux-libre de FSFLA , Parabola , Devuan , Trisquel y LibreCMC . [10] Sin embargo, la gran mayoría de los proyectos de código abierto distinguen entre controladores de dispositivos solo binarios (blobs) y firmware solo binario (no se consideran blobs [11] : … ), lo que permite que cierto firmware propietario se distribuya libremente como parte de sus núcleos y, ante el desacuerdo de algunos contribuyentes centrales, 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 solo no aceptar ningún controlador de dispositivo binario en su árbol de fuentes, sino que tampoco admite oficialmente ningún componente de controlador de dispositivo propietario de terceros en su plataforma; [16] : 38… citando no solo 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 una campaña activa contra los blobs binarios. [18] FSF también considera que la política de OpenBSD está redactada de manera confusa, ya que los "blobs" en la comunidad BSD se refieren solo a lo que considera controladores no libres, y no se aplica a firmware propietario y 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 se eliminaron. [19] : Debian
Para OpenBSD, el líder del proyecto Theo de Raadt defiende la política de solicitar derechos de distribución solo para firmware de microcódigo. "Una vez que se distribuyen ... al menos el dispositivo funciona". Dando a entender que la alternativa sería que los miembros de su pequeño proyecto codifiquen ellos mismos el 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 se ejecutan 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]
En la comunidad de desarrollo del kernel de Linux , Linus Torvalds ha hecho declaraciones contundentes sobre el tema de los módulos solo binarios, afirmando: "Me niego a considerar siquiera atarme las manos a algún módulo solo binario", y continuando: "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 controlador o módulo de kernel de Linux de código cerrado es dañino e indeseable ... descubrió que eran perjudiciales para los usuarios de Linux, las empresas y el ecosistema de 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 GNU General Public License . [23]
Sin embargo, el kernel de Linux contiene firmware de código cerrado requerido por varios controladores de dispositivo. [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 Sr. Torvalds aceptó las primeras piezas de software no libre en las distribuciones de Linux que ha publicado desde 1991. Durante estos años, mientras este kernel creció en un factor de 14, la cantidad de firmware no libre requerido por los controladores de Linux creció en un factor de 14. 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 dispositivos propietarios como software gratuito, crear y depurar envoltorios, parches binarios o una combinación de estos pasos, todo lo cual implica que los dispositivos heredados lo harán. nunca obtenga la última versión de Android. [ cita requerida ]
Problemas
Hay varias razones por las que los blobs binarios pueden ser problemáticos. [11]
En primer lugar, no se puede conocer su funcionamiento preciso y los errores no se pueden detectar mediante la auditoría del código fuente; Con frecuencia, los errores solo se diagnostican mediante una investigación minuciosa cuando un sistema comienza a comportarse de manera inesperada. 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 para el propósito del controlador, e incluso si se encuentra un error, no hay una manera fácil de solucionarlo.
En segundo lugar, dado que el código fuente no está disponible, los usuarios no pueden mejorar el controlador fácilmente, no se puede migrar a arquitecturas que no eran compatibles originalmente, ni adaptarse para operar con ligeras variantes del hardware o actualizarlo para que sea viable en nuevos kernels que tengan el API y arquitectura modificadas.
En tercer lugar, el uso de este software obligaría a los usuarios a confiar en los proveedores o terceros para no poner puertas traseras, software espía o código malicioso en el blob. Además, el proveedor de hardware puede decidir no admitir 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, los blobs binarios pueden verse como trazar una línea entre la parte de la comunidad que cree en los ideales del software libre, que rechaza el software propietario, y la porción que ve el código abierto como deseable por razones puramente técnicas, y que a menudo carece de una fuerte oposición a los blobs binarios. "mientras funcionen". Esta fragmentación, y la aceptación de un número creciente de componentes propietarios en Linux, se considera que debilita 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 binario patentado escrito para otro sistema operativo. Ejemplos de envoltorios 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 extranjeros 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 obtener 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 llevó a OpenBSD a crear y popularizar sus conceptos de bio (4) , bioctl y sensor drive como una solución alternativa para la monitorización RAID , [27] [16] ambos Posteriormente, los conceptos también se han abierto camino en NetBSD .
Firmware del dispositivo
El firmware es el software requerido por los microcontroladores integrados que acompañan a algunos hardware, generalmente no se considera un blob binario. [28] [19] : BSD [11] : … En muchos dispositivos, el firmware se almacena en una memoria flash incorporada no volátil , pero para reducir los costos y facilitar las actualizaciones, algunos dispositivos contienen solo RAM estática y requieren que el sistema operativo host se cargue 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 las 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 dentro del dispositivo en todo momento. El proyecto OpenBSD acepta imágenes de microcódigo / firmware binario y las redistribuirá 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 la obtención de estas imágenes se pueden proporcionar en el árbol de puertos (lo que impide que algunos dispositivos inalámbricos sobrecargados (p. Ej., Intel Wireless) estén disponibles durante el instalación inicial). [30]
BIOS y UEFI
El BIOS , que funciona como un cargador de arranque y admite aplicaciones heredadas en modo real , es un componente crucial de muchas computadoras compatibles con IBM . El BIOS puede ser una puerta trasera de seguridad . [31] [32] [ verificación fallida ] A finales de la década de 1990, se inició el trabajo en EFI (Interfaz de firmware extensible) con el objetivo de trasladar el BIOS heredado 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) se desarrolló para ayudar a los proyectos de desarrollo de firmware de EFI. [33]
También a fines de la década de 1990, se inició el proyecto coreboot para crear una alternativa de código abierto al BIOS heredado desde cero. [33] La comunidad de desarrolladores de coreboot se organiza alrededor de Stefan Reinauer y está dirigida por desarrolladores de firmware con derechos de compromiso. [34] 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. [35] Una alternativa de código completamente abierto a BIOS y UEFI es libreboot , que fue promovida por la Free Software Foundation (FSF). [36]
Ver también
- Objeto grande de carácter
- Firmware
- Hardware de gráficos y software libre
- LinuxBoot
- Módulo de kernel cargable
- Mancha binaria opaca
- Firmware propietario
- Software propietario
- Catálogo NSA ANT
- Puerta trasera de blob binario de ScreenOS NSA
- Seguridad inalámbrica
Referencias
- ↑ Michael Larabel (6 de agosto de 2012). "Coreboot: Reemplazo de Blob BIOS de video binario de Intel" . Phoronix . Consultado el 23 de junio de 2015 .
- ^ 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 .
- ^ "Estado de libertad de BIOS" . puri.sm . 2014-11-12 . Consultado el 23 de junio de 2015 .
- ^ Michael Larabel (24 de octubre de 2012). "El controlador de GPU Raspberry Pi resulta ser una mierda" . Phoronix . Consultado el 23 de junio de 2015 .
- ^ Jake Edge (17 de junio de 2015). "De repente, Chromium comienza a descargar un blob binario" . LWN.net . Consultado el 23 de junio de 2015 .
- ^ "3.9:" ¡Blob! " " . Canciones de lanzamiento de OpenBSD . OpenBSD . 2006-05-01.
Los blobs son controladores binarios compilados por el proveedor sin ningún código fuente.
- ^ "Paquetes Debian construidos 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 .
- ^ Constantine A. Murenin (10 de diciembre de 2006). "Почему так важно иметь документацию по программированию железа" . Linux.org.ru (en ruso).
- ^ Theo de Raadt (3 de diciembre de 2016). "Página 11: El hardware: ethernet" . Abra la documentación para hardware . OpenCON 2006, 2-3 de diciembre de 2006 . Courtyard Venice Airport, Venecia / Tessera, Italia.
Solo unos pocos proveedores recalcitrantes permanecen cerrados. / ethernet 95% documentó 99% funcionando / Documentación abierta en gran parte debido al esfuerzo de un hombre: Bill Paul
- ^ "Lista de distribuciones libres de GNU / Linux" . Proyecto GNU . Fundación de Software Libre .
- ^ a b c Andrews, Jeremy (19 de abril de 2006). "Entrevista a Jonathan Gray y Damien Bergamini" . kerneltrap.org. Archivado desde el original el 11 de diciembre de 2007 . Consultado el 6 de enero de 2008 .
- ^ a b Scott Long; Adaptec, Inc. (2000). "aac (4) - Controlador de la controladora Adaptec AdvancedRAID" . Referencia cruzada BSD . FreeBSD . Lay resumen .
Si el kernel está compilado con la opción COMPAT_LINUX, o los módulos aac_linux.ko y linux.ko están cargados,…
- ^ a b Achim Leubner (2013). "aacraid (4) - Controlador del controlador Adaptec AACRAID" . Referencia cruzada BSD . FreeBSD . Lay resumen .
Si el kernel está compilado con la opción COMPAT_LINUX, o los módulos aacraid_linux.ko y linux.ko están cargados,…
- ^ Matzan, Jem (15 de junio de 2005). "BSD cognoscenti en Linux" . NewsForge. Archivado desde el original el 23 de marzo de 2006 . Consultado el 7 de julio de 2006 . Vea 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?"
- ^ "build / options / WITHOUT_SOURCELESS_UCODE" . Referencia cruzada BSD . FreeBSD . 2012-02-04.
- ^ a b "3.8:" Hackers del RAID perdido " " . Canciones de lanzamiento de OpenBSD . OpenBSD . 2005-11-01.
- ^ a b Andrews, Jeremy (2006-05-02), "Entrevista: Theo de Raadt" , KernelTrap , Jeremy Andrews, archivado desde el original el 2006-06-03
- ^ "La protesta contra ATI casi llevó al arresto de RMS" . Fundación de Software Libre. 27 de abril de 2006 . Consultado el 10 de octubre de 2006 .
- ^ a b c d "Explicar por qué no respaldamos otros sistemas" . Proyecto GNU . Fundación de Software Libre .
- ^ "Paquetes de firmware-linux de Debian" . 2010 . Consultado el 25 de marzo de 2010 .
- ^ "a / lt-binary" . lwn.net .
- ^ Greg Kroah-Hartman (junio de 2008). "Una declaración de posición sobre los módulos del kernel de Linux" . La Fundación Linux .
- ^ Greg Kroah-Hartman (2006). "Mitos, mentiras y verdades sobre el kernel de Linux" . Simposio de Linux .
- ^ "Firmware no libre" . Proyecto GNU § Directrices de distribución de sistemas libres (GNU FSDG) . Fundación de Software Libre .
- ^ ":: [FSFLA] :: Recupera tu libertad, con Linux-2.6.33-libre" . fsfla.org .
- ^ Jonathan Gray (2 de diciembre de 2006). "Página 26: Solo abierto para negocios: FreeBSD" . Arquitectura e implementación de controladores en OpenBSD . OpenCON 2006, 2-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
- ^ Theo de Raadt (9 de septiembre de 2005). "El soporte de administración de RAID viene en OpenBSD 3.8" . misc @ (lista de correo). OpenBSD .
- ^ a b "OpenBSD funciona para abrir conjuntos de chips inalámbricos" . KernelTrap. 2 de noviembre de 2004. Archivado desde el original el 20 de junio de 2006 . Consultado el 23 de junio de 2006 .
- ^ "/ sys / dev / microcode /" . OpenBSD .
- ^ "sysutils / firmware" . Puertos OpenBSD .
- ^ "Tecnología Intel vPro" . Intel.com. 2012-05-14 . Consultado el 10 de abril de 2014 .
- ^ "Compatibilidad de BIOS y firmware" . Absolute.com . Consultado el 10 de abril de 2014 .
- ^ a b Vincent Zimmer, Jiming Sun, Marc Jones y Stefan Reinauer (2015). Soluciones de firmware integrado: mejores prácticas de desarrollo para Internet de las cosas . Presione. pag. 121. ISBN 9781484200704.Mantenimiento de CS1: utiliza el parámetro de autores ( enlace )
- ^ Vincent Zimmer, Jiming Sun, Marc Jones y Stefan Reinauer (2015). Soluciones de firmware integrado: mejores prácticas de desarrollo para Internet de las cosas . Presione. pag. 61. ISBN 9781484200704.Mantenimiento de CS1: utiliza el parámetro de autores ( enlace )
- ^ Vincent Zimmer, Jiming Sun, Marc Jones y Stefan Reinauer (2015). Soluciones de firmware integrado: mejores prácticas de desarrollo para Internet de las cosas . Presione. pag. 65. ISBN 9781484200704.Mantenimiento de CS1: utiliza el parámetro de autores ( enlace )
- ^ "Campaña por BIOS gratis" . Fundación de Software Libre. 2006-11-29 . Consultado el 2 de enero de 2007 .
enlaces externos
- McMillan, Robert (21 de junio de 2006). "Los investigadores piratean el controlador de Wi-Fi para violar la computadora portátil" . InfoWorld. Archivado desde el original el 2 de julio de 2006 . Consultado el 23 de junio de 2006 .
- Artículo de KernelTrap sobre el controlador wpi (4) de Damien Bergamini, una alternativa sin blobless ipw3945 para OpenBSD
- Entrevista de KernelTrap con Jonathan Gray y Damien Bergamini sobre blobs binarios
- La entrevista de Black Hat Wireless Exploit, palabra por palabra de Brian Krebs en el sitio web del Washington Post, archivada el 5 de mayo de 2012
- Un ejemplo creativo del valor de los controladores gratuitos , LWN.net