Linux内核为何不像安卓一样驱动放置用户层,让硬件厂商可以发布二进制驱动?

不同视角、不同观点、深度探讨,禁止人品和道德攻击
头像
xw_y_am
帖子: 3333
注册时间: 2009-05-08 14:18
系统: Arch
来自: 河南新乡
联系:

Re: Linux内核为何不像安卓一样驱动放置用户层,让硬件厂商可以发布二进制驱动?

#16

帖子 xw_y_am » 2012-01-21 16:03

:em20 :em20 不懂。。。
Linux 相关链接大杂烩

代码: 全选

if(read) {
    if(practise) return g☘☘d;
    else return w☘☘d;
} else {
    return t☘☘d;
}
hooluupog
帖子: 244
注册时间: 2011-10-21 10:39

Re: Linux内核为何不像安卓一样驱动放置用户层,让硬件厂商可以发布二进制驱动?

#17

帖子 hooluupog » 2012-01-21 18:46

endle 写了:
hooluupog 写了:9楼的文章很不错,要是再能分析一下第三方闭源驱动厂商为什么不愿意提交代码到内核代码树中就更好了。 :em11
他们担心自己的技术被竞争对手(直接或潜在)获得,而且很可能认为自己的实力不必过分依赖社区的帮助
有可能,我看过相关评论,但越是有实力的公司越不怕开源它的驱动,比如intel。

另外还有一个问题就是:linux 内核组一直不愿提供一个稳定的内核api/abi接口,内核每次发布相关的很多东西都在变化,比如你针对2.6.3开发一个驱动,下一次更新这个驱动又得重新编译修改,而不能像mac,win那样”该驱动兼容x.x.x以上内核等等“。所以,对硬件商来说维护和开发难度也较大,所以即使让他们发布二进制,他们也不喜欢linux。似乎platform,api,ide这类东西linux不太喜欢,但第三方开发人员却喜欢。但上面说的这些又和内核开发组人员的想法相抵触,内核组的意思是大家都开源,把代码都放到主干当中合并进去,然后由整个社区一起维护,谁发布更新,谁就修改代码的同时负责兼容修改其他代码。

这种想法是好的,但从目前来看实现起来还是太难,想想mac app store和andriod app market里面上百万的app和无数的开发者,这些不太可能全部去合并到主干,去开源。我还是觉得提供api,做平台好一些,在api和平台之上的代码由第三方开发人员自己去track,和用户打交道,然后那些开发人员再和内核组,社区主干打交道,也就是适当的权利下放。andriod这么做成功了,fuse的出现似乎有点这种意思,但还是远远不够。我觉得,离用户越近的地方,应该越统一规范一些,适当吸收些大教堂的思维,不至于像现在这样,第三方开发者提起linux就头疼,不愿为其开发软件,驱动。mac有xcode,Core* frameworks,windows有vs, win32/.net,这些,而linux则是Gtk / Cairo / libnotify / Canberra / GStreamer,emac/vim/gdk等等。这些对第三方开发者来说,太分散甚至有些混乱,入手开发和维护难度太大。我觉得要想在桌面成功,应该适当的像mac和win学习一点平台,统一接口方面的东西又不丢弃掉自己开源和小作坊式分布协同开发自由灵活的优势。

我看了很多linux开发组和用户,第三方开发人员的争论,内核组始终认为稳定的api,统一的接口这类东西是破坏性的,不可取的,要求所有代码开源,并且合并到主干中去。好处是不需要花钱买,免费,foss,一起维护及时发现并改进驱动,弥补漏洞,不存在闭源的游离于主干之外的代码等等。但从用户的角度去看是什么呢?你不能购买太新的硬件,你新买的硬件在6个月之后可能变得无用,你必须使用旧的硬件去获得更好的兼容支持,很多新的特性不能第一时间获得支持,必须等到6个月甚至更久,下一次开源驱动realese之后看你的硬件有没有得到更好的支持。所以,linux开发组坚持的那种理论上的好处,其实一直没有给现实世界的用户带来实实在在的好处,反倒具有讽刺意味的是伤害着用户,这也是linux桌面系统份额一直上不去的重要原因。

允许硬件商的闭源代码进入,一段时间过后,随着新的硬件推出,这个硬件就会过时。此时,这个硬件当中的一些技术细节和参数不再成为和竞争者在竞争中必须要保密的东西,那么硬件厂商再将其开源,合并,然后由开源驱动的社区开发者去继续维护。这样,用户既能用上最新的驱动,新的硬件得到最好的支持,老的旧的硬件又可以被开源驱动得到永久的支持,硬件商省去了维护旧驱动的麻烦和资金,又留下了好的名声,也不会影响其竞争和生存。这比和占巨大市场份额的垄断巨头一起工作好的多了,想想vista推出时,在微软的要求下,很多新的硬件是怎么对待xp的。

再看看andriod的虚拟层,其实做的就是这个事情,内核层面变换不影响第三方开发者和硬件商,而硬件开发商和第三方开发者看到的只是虚拟层,内核的变化对它没影响。所以也不要一味责备什么andriod背叛,被踢出怎么怎么地,想想它为什么要这么做。完全可以在部分方面,在下游等等方面允许分支,允许闭源的东西,中间用一个大家共同遵守的东西隔开,互相通信就可以了。

从道理上,和对大家都有好处的原则上看,我是支持linux内核组这一边的,其中有一句话:“linux内核的开源驱动是为用户、系统和硬件本身开发驱动,而硬件厂商的闭源驱动则是为硬件厂商自己开发驱动“。系统装到硬件上应该是开箱即用的,而不是要拿一大堆各种cd/dvd装完之后才能让系统识别硬件。
但是,现实却是截然相反的,无论你再怎么痛恨微软,痛恨那些唯利是图的硬件商也无济于事。所以,在达成这一美好愿望之前先要站稳脚跟,提高市场份额才是关键。

总之,linux如今这种外在的表现其实和其内在的组成特性有关。现在,我对ubuntu走向桌面主流系统倒是有不少期待,它正在做一些弥合开源社区和商业公司、第三方开发者、厂商的事情。
3.png
回复