专有设备驱动程序
编辑专有设备驱动程序是一个封闭的源设备驱动程序只有在公开的二进制代码。在免费和开放源代码软件的上下文中,闭源设备驱动程序称为blob或二进制blob。该术语通常是指加载到开源操作系统内核中的闭源内核模块 ,有时还应用于在内核外部运行的代码,例如系统固件映像,微代码更新或用户态程序。术语 blob首先在数据库管理系统中使用,用于描述存储为单个实体的二进制数据的集合。
当计算机硬件供应商为其产品提供完整的技术文档时,操作系统开发人员便能够编写要包含在操作系统内核中的硬件设备驱动程序。但是,某些供应商(例如Nvidia)并未提供某些产品的完整文档,而是提供了仅二进制驱动程序。对于加速图形驱动程序,无线网络设备和硬件RAID控制器,这种做法最为常见。最值得注意的是,二进制blob在非无线网络接口控制器中非常罕见,它几乎总是可以通过标准实用程序(如ifconfig) 盒子外面; OpenBSD的Theo de Raadt将其归因于单个FreeBSD开发人员所做的工作。
开源操作系统
编辑一些FSF认可的项目努力提供一个免费的操作系统,并且在没有硬件文档或设备驱动程序源代码以及所有适用固件的可用文档时,将删除所有二进制blob ;这些项目包括来自FSFLA、Parabola、Devuan、Trisquel和LibreCMC的Linux-libre内核封装。然而,绝大多数开源项目的只作二进制设备驱动程序和二进制固件只(不考虑斑点之间的区别),允许某些专有固件作为其内核的一部分自由分发,并且,在某些核心贡献者的不同意下,还支持使用在外部分发的专有设备驱动程序,从而为此类专有驱动程序和用户空间提供内部兼容性接口与系统配合使用的组件。遵循此策略的项目包括Linux内核本身、NetBSD、FreeBSD、DragonFly BSD和大多数Linux发行版。这些项目中的某些确实提供了构建没有专有固件的系统的选项,因此排除了按需的无源微代码。
在OpenBSD的项目不仅具有不接受任何二进制设备驱动程序到其源代码树,也没有正式支持它的平台,任何第三方专用设备驱动器组件既可以显着的政策; 不仅指出了潜在的无法检测或无法修复的安全漏洞,而且还列举了其软件的开放性和自由性。在自由软件基金会(FSF)正积极参加反对的二进制块。FSF还认为OpenBSD的政策措辞令人困惑,因为BSD社区中的“斑点”仅指其认为的非免费驱动程序,不适用于专有固件和无源微代码。
在Linux内核开发社区,Linus Torvalds的取得上仅二进制模块的问题强硬的声明,声称:“我拒绝,甚至考虑绑我的双手在一些只有二进制模块”,并继续说:“我希望人们知道当他们使用仅二进制模块时,这就是他们的问题。”在2008年,有176位Linux内核开发人员签署了关于Linux内核模块的立场声明,其中指出:“我们,签名不足的Linux内核开发人员,认为任何开源Linux内核模块或驱动程序都是有害的和不可取的……我们已经反复发现它们不利于Linux用户、企业和更大的Linux生态系统。”Greg Kroah-Hartman表示,为GNU通用公共许可证许可的 Linux内核重新分发封闭源模块是非法的。
但是,Linux内核包含各种设备驱动程序所需的闭源固件。Alexandre Oliva、Linux-libre的维护者,该版本是Linux内核的一个版本,试图删除所有二进制blob,包括无源微代码,它在2011年写道:“自1996年以来,Linux就不再是自由软件, Torvalds先生接受了自1991年以来发布的Linux发行版中的xxx批非自由软件。这些年来,尽管该内核增长了14倍,但Linux驱动程序所需的非自由固件的数量却增长了10%。令人震惊的83。”
运行Android操作系统的移动设备的大多数驱动程序均以二进制形式提供,并与特定版本的Linux内核链接。这使得升级内核版本非常困难,因为它可能需要反向工程,将专有设备驱动程序重新实现为自由软件,创建和调试包装程序,二进制修补程序或这些步骤的组合,所有这些都意味着旧版设备将永远不会获得最新的Android版本。
问题
编辑二进制斑点可能有问题的原因有很多。
首先,它们的精确操作是未知的,并且无法通过审计源代码来检测错误。通常,只有当系统开始异常运行时,才需要通过认真研究来诊断错误。这些未检测到的错误也可能使用户和系统无提示地暴露于安全隐患。因此,无法检查驾驶员的适合性,即使发现错误,也没有简便的方法来修复它。
其次,由于源代码不可用,因此驱动程序无法被其用户轻松改进,无法移植到最初不支持的体系结构,也无法适应于硬件的细微变化,或者无法在具有以下功能的新内核中进行更新:更改了API和体系结构。
第三,使用该软件将迫使用户信任供应商或第三方,不要将后门程序,间谍软件或恶意代码放入Blob中。同样,硬件供应商可以决定不支持给定的操作系统,可以随时放弃驱动程序维护,或者在公司停业的情况下,完全不支持该驱动程序。
最后,二进制斑点可以被视为在信仰自由软件理想,拒绝专有软件的社区部分和出于纯粹的技术原因认为开源是可取的部分之间划清界线,而这些部分通常缺乏对二进制斑点的强烈反对“只要他们工作”。这种碎片化,以及Linux越来越多的专有组件被接受,被视为削弱了社区抵制制造商日益拒绝提供其二进制文件的趋势的能力。
通过包装使用
编辑甲包装纸是软件,它允许一个操作系统以用于另一个操作系统写入二进制专用设备驱动器。包装的例子是 ndiswrapper的用于Linux和项目邪恶的的FreeBSD和NetBSD的。这些包装程序允许这些操作系统通过实现Microsoft的NDIS API使用为Microsoft Windows编写的网络驱动程序。
另一个示例是提供兼容性层,以便可以使用外部实用程序来维修硬件。实例包括一些RAID控制器的驱动程序的FreeBSD,其中该系统管理员必须使在FreeBSD的Linux兼容层和独立地,以监测和服务的硬件直接从硬件制造商采购Linux特定的二进制块。大约在2005年,这种情况促使OpenBSD创建并推广其bio(4),bioctl和传感器驱动器概念作为RAID的替代解决方案。
设备固件
编辑固件是板载微控制器所需的软件,它随某些硬件一起提供,通常不视为二进制二进制文件。在许多设备中,固件存储在非易失性板载闪存中,但是为了降低成本和简化升级,某些设备仅包含静态RAM并要求主机操作系统上载每次连接固件(尤其是USB)设备)。尽管固件因此存在于操作系统驱动程序中,但它仅被复制到设备中,而不由CPU执行,与DMA攻击相比,即使固件已存储在操作系统中,也无需担心额外的安全漏洞。装置。OpenBSD项目接受二进制固件/ 微代码映像,并在许可证允许的情况下重新分发这些映像;如果供应商不允许自由和无条件的重新分配,则可能会在端口树中提供有关获取这些图像的机器指令(这会阻止某些受累的无线设备(例如Intel Wireless)在初始安装)。
BIOS和UEFI
编辑该BIOS,其功能是作为一个引导程序和支持原有的实模式的应用,是众多关键组成部分的IBM兼容电脑。BIOS始终为16位,通常具有联网功能,并且可以成为安全后门。在1990年代末期,有关EFI(可扩展固件接口)的工作开始了,目标是将传统BIOS迁移至具有模块化驱动程序模型的现代接口。EFI是开源的,最终被许多行业xxx的硬件制造商采用为UEFI(统一可扩展固件接口)。EDK(EFI开发套件)的开发是为了协助EFI固件开发项目。
同样在1990年代后期,coreboot项目开始启动,从头开始创建一个替代传统BIOS的开源软件。coreboot开发人员社区围绕Stefan Reinauer进行组织,并由具有提交权限的固件开发人员领导。尽管封闭源代码二进制固件一直是x86体系结构的核心,但coreboot仅合并了一些专有二进制文件,这些二进制文件为用户提供了基本级别的硬件支持。BIOS和UEFI的完全开源替代品是libreboot,它是由自由软件基金会(FSF)推动的。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/112984/