求科普关于开源软件的常识
前两天 Apple 宣布 Swift 开源了,之前新闻中也常会看到关于开源的新闻,作为非 IT 行业的外行求科普一些常识:1、某软件开放了源代码,但是后续的开发工作仍然会有个带头的,或者说主导的公司来领导吧,比如 Chromium 和 Android 项目都还是由 Google 来实际控制的吧,关于软件向什么方向发展实际控制权是不是还牢牢地被这些公司控制着?如果有程序员想贡献代码,他的代码是否能进入代码库是由谁来决定呢,是这些项目的实际主导公司或负责人?会有人审查外部志愿者提交的代码么?
2、看到一些程序一方面有以公司名义发布的商业版,还有所谓社区维护版,有什么区别呢,领导人不同么?
3、成熟的商业软件开源真的有益于提高代码质量么?总感觉志愿者协作比较松散,不如商业公司内部组织得那么紧密。
4、另外就是对于一些被作为基础经过修改成为其他公司产品主干的项目,比如 Chromium 被许多公司当作基础来开发自己的浏览器项目。Chromium 更新那么频繁,不断添加新代码会对其他公司的产品造成影响么?基于开源项目的软件一般怎么处理原始项目不断更新的代码呢?感觉要是定期更新大版本还好,不断的小微更新第三方审查起来也很费力吧。
对于一些由爱好者共同维护的小项目,或者一些基础库类的项目,比如 OpenSSL 和 FFmpeg 之类的开源我能理解,但是对于大公司复杂的商业软件开源的逻辑我还是想不太清楚。日常接触到的似乎只有 Android 和 Chromium 被众多第三方公司修改衍生出许多自家的产品……
1 当然是主导公司啦 费大力气开源就是为了主导权 2 可能有闭源功能 然后社区版的售后就是靠社区 3 仁者见仁 4 跟不上就不更了 安卓不是开源 EraserKing 发表于 2015-6-13 20:55
2 可能有闭源功能 然后社区版的售后就是靠社区 3 仁者见仁 4 跟不上就不更了 ...
谢谢~
我就是没明白社区里的程序员水平也参差不齐吧,那代码质量是怎么保证的呢…… ge1 发表于 2015-6-13 20:59
同外行
1. 是的,是的,会有。
2. 你这个我只想到一个例子red hat 跟centOS,区别是,前者要你给钱,同时 ...
谢谢~
我也是听说 Fedora 就是 Red Hat 的试验场,新功能先拿到社区维护的 Fedora 上试水,成熟了再转移到商用版本上去。
有这一问的原因之一是前阵子想试用新版的 Opera,基于 blink,就想到这是不是得花大力气剥离好多 Google 特有的东西,再加入自己的特色功能。要是 Google 对核心代码大改了,岂不是第三方得花很大力气才能跟上。 flynroll 发表于 2015-6-13 21:06
谢谢~
我就是没明白社区里的程序员水平也参差不齐吧,那代码质量是怎么保证的呢…… ...
社区版也不是完全交给社区 代码一般是一样的
区别是支持力度
想要7*24随时响应吗
想要技术专家1to1服务而不是在社区发帖求助吗
想要第一时间的安全补丁吗
想要老板追责时有个甩锅的吗
交钱买商业版吧 只要公司能保证主导权,那开源实际上是全世界的程序员为你工作,还能利用开源抢占市场挤压对手的生存空间。
不要以为他们搞开源是善行,背后自然有它的商业逻辑。 本帖最后由 flynroll 于 2015-6-13 21:33 编辑
徐老师 发表于 2015-6-13 21:26
只要公司能保证主导权,那开源实际上是全世界的程序员为你工作,还能利用开源抢占市场挤压对手的生存空间。 ...
Thanks~
我对“全世界的程序员为你工作”这一点还不是很理解,项目开源之后,志愿者提交的代码也直接并入项目代码库里面么?那代码审查和审批也需要花很大功夫吧,还是说这些项目其实也不轻易接受外部开发者提交代码的? flynroll 发表于 2015-6-13 21:32
Thanks~
我对“全世界的程序员为你工作”这一点还不是很理解,项目开源之后,志愿者提交的代码也直接并入 ...
所以有个词叫“社区管理”,成熟的开源社区会有自己的Project Leader,会有自己的分工小组,会有自己的投票选举,会有自己的准入机制……当然这些他们自己称之为文化。
涉及到商业产品的时候更复杂,很多时候是需要专职人员甚至公司在幕前幕后引导的,志愿者提交的patch更多的是一种补充和修复,而是不是合并要看具体项目跟情况。 本帖最后由 shahito 于 2015-6-13 23:09 编辑
这是我的理解,有可能有很多的错误,如果有人有看到错误的地方请指正。
1、
①
关于软件向什么方向发展实际控制权是不是还牢牢地被这些公司控制着?
一个开源项目有不同情况,我举几个例子:
Rust(一个语言)是一个community driven (社团驱动)的开源项目,项目内的决策和项目进展都非常的透明:
一些决策内容或者会议记录都会公开,社区里的人可以对这个项目的一些决策进行讨论和评估并决策。你提交的代码都会有人对你进行负责(一对一)。并且会有核心团队对整个项目的发展和决策进行规划(如果一些决策社团里谈不拢的话,核心团体会进行决定)。Rust是由Mozilla(火狐的开发商)主导的,核心团队的一部分肯定是由该公司的一些人参与,而第三方的优秀开发者也会被吸纳到核心团队来。
Android项目,可以说是完全由Google主导,因为比如说 Android M、Android相关的开发相关的很多内容(SDK、官方向下兼容的库)都不是边开发都边开源的。拿Android M来说,直到Android M正式发布后,Google才会在某一天把这个代码公开出来。也就说跟 Rust 之类的开源项目不同,你无法知道这个项目确切的开发路线或者规划是什么,你不会知道下个版本到底有什么新功能,只有Google说了有这个功能、或者等正式版出来后公布代码,你才能知道。
所以虽然Android是个开源项目,但是只有Google知道Android的后来会如何,别人也非常难分裂Android(本质上,因为不管你怎么魔改Android,倒时你还要在滚回来在新的版本上魔改),其他第三方或者其他公司基本做不到,因为Android是个非常非常大的项目。
不过公司不同的项目方针不同,比如说Google有些项目就不是这样子。另外附带一句7zip就是某个版本才会释放一次源代码(7zip喜欢
Node.js(一个语言的运行环境),由Joyent公司主导决策,但是因为开发缓慢、决策方向与社团及好几位核心开发者谈不妥,导致一部分的开发者另立门户,分裂取名成io.js,然后该io.js项目有了很大的发展——现在好像跟Joyent公司谈妥了,好像又会回归成一个项目,可以算是起义成功又被非常好的收编了的样子。
②
如果有程序员想贡献代码,他的代码是否能进入代码库是由谁来决定呢,是这些项目的实际主导公司或负责人?
一般情况:
一般项目的话,都是项目负责人审核你的代码,对你的代码进行审核、提意见、完善代码(当然其他人看到也可以提意见之类的),如果代码没问题了就可以合并到代码库。
好的情况:
像Rust之类开源做的好的项目,你提交了代码,会给你分配一个人对你进行负责(落实到个人之类的)。这些人一开始肯定都是这些项目的负责人及主导公司的员工,再让当社团慢慢壮大,有更多其他的开发者加入进来。
像Android,有bug可以到 b.android.com 提,Google员工会查看和修复bug,其他人也会看,但是基本不会帮你修(因为Android是由Google主导的【个人想法】);提交代码到 r.android.com (r是review的意思),也会由Google的该项目的负责的人帮你审核、提建议及合并代码。
不过因为是上班,修bug方面感觉没有社团的勤劳,而且很多bug闲置很久了(不过也有些项目组的人比较负责,比如说负责Android Studio的。)
提一个feature(功能)的话,呃,Google基本也不会理你(因为他们采用他们的开发方针)。
2、
所谓社区维护版,有什么区别呢,领导人不同么?
我觉得最著名的是Jetbrain公司下的IDE和一些Linux的发行版本。举几个例子,水平差,就不总结了。
Jetbrain(一个开发IDE的公司,专业名词解释下很麻烦就简单写下)。发布的软件分为商业版和维护版。
社团维护版是商业版的一个子集(无论是功能上还是代码上),商业版要钱,功能更多。社团版是开源的,你可以给社团版提交代码,如果被收录的话,也会被用到商业版里。
简单点说,同一个产品少一些功能,可以给不想花钱的人用,非常好的一个策略。因为社团版是开源的,也可以收获他人的代码贡献,使商业版越做越好。也可以看做是商业公司回报开源社团的一种象征(!)。
Linux我不用Redhat家的,不是非常清楚,就不写了。
突然想到一个,CrossWar和Wine(Linux下运行Windows程序的东西):
抄一段官网的:
CrossOver 是一个经过测试的 Wine 增强版,我们为 CrossOver 提供技术支持。CrossOver 还附带了安装、设置和系统管理的工具。您可以把 CrossOver 理解为在免费的 Wine 上面附加一些有用的专有工具。CrossOver 是 CodeWeavers 公司提供的增值产品和服务。
3、
成熟的商业软件开源真的有益于提高代码质量么?
如果你开源了,如果项目有价值的话,就会用更多的人用,因为软件开发是一件非常复杂的事情,参与的人多了,代码质量会越来越好(比如说你是个开发者,你看到文档里有某个字是错别字,你也可以提交修正的代码)。
如果你担心志愿者者提交的代码不好的话——项目的负责人会对他人提交的代码提意见,规定代码的规范,如果这个人提交的代码不好,或者实际上新增的功能没有意义,你就可以不采纳他的代码。只要做好代码审核的把关,代码就不会差。
现在很多公司的很多项目的每一次提交都会由这个项目的其他负责人对你的代码进行检阅(review),所以不仅仅是对于开源项目来说,实际上,这个方法在其他项目上也被运用的很广。
另外,现在的软件开发已经不是10年前了。这年头开发软件用到的很多东西都是开源的,没有开源项目,程序员基本很多都不用干活了。(比如说没有开源项目的话,国内很多做某些方面的,没有参考,很难做成的可能性很大),所以说微软现在拥抱开源已经有点迟了。
4、
Chromium 更新那么频繁,不断添加新代码会对其他公司的产品造成影响么?
我觉得基于 Chromium 浏览器的其他公司的人应该是这样做的:
比如说我们开始第一次写浏览器了,我们选取里面的 Chromium 最新的某一个正式的版本号(比如说44.0.1之类的),在这个基础上改界面和代码。
然后过了段时间,发现 Chromium 更新到 46.XXX,我们再选一个新的正式的版本,在这个项目上比对我们原来修改过的内容,如果修改过的代码有冲突的,进行修改。
本帖最后由 shahito 于 2015-6-13 23:47 编辑
呃,发现我LSLS那篇 玛格丽特 (混社团的就是懂) 部分写得蛮对的。
ps:删除了错误的部分。
flynroll 发表于 2015-6-13 21:06
谢谢~
我就是没明白社区里的程序员水平也参差不齐吧,那代码质量是怎么保证的呢…… ...
就看审核的人的水平了
比如Linus……怒喷XXX不会写代码不是一次两次的事了。 flynroll 发表于 2015-6-13 21:10
谢谢~
我也是听说 Fedora 就是 Red Hat 的试验场,新功能先拿到社区维护的 Fedora 上试水,成熟了再转移 ...
我记得某个版本的Chronium还是WebKit大改了一番 于是国内浏览器很长一段时间内都跟不上了
所以想一直跟上版本还有有难处的 还有一点比较重要的是用什么开源协议,bsd协议,gnu协议,Apache协议各有目的。比如安卓的话是内核用gnu协议开源,上层是以Apache协议开源。linux内核是所有人都能贡献代码的,上层的代码你虽然也可以随意fork,但是影响不了主线。 野中胡桃 发表于 2015-6-13 22:19
https://zh.opensuse.org/Free_and_Open_Source
----发送自 OnePlus A0001,Android 5.0.2
非常感谢~
文章比较长,看目录比较详细,我慢慢读 Quetzacoatl 发表于 2015-6-14 15:58
@flynroll
代码质量不需保证
你觉得人家渣自己改个屌的就行了,不过记得要共享给大家要不公司和基金会要告 ...
并不是,有继续开源需求的主要就是GPL协议,而且没什么赔钱的案例,强制开源而已。
另外有BSD、Apache这两个也用得比较多的协议,限制就很小。 野中胡桃 发表于 2015-6-13 22:19
https://zh.opensuse.org/Free_and_Open_Source
----发送自 OnePlus A0001,Android 5.0.2
这文写出来的目的还是偏撕逼……
我觉得自由软件主要有三个思想流派,
守序的ESR、中立的Linus、叛逆的RMS
这文显然是Linus派的,观点就是自由软件开发效率就是高,软件质量就是diao,所以要走自由软件路线。
但是文里面被往死里喷的Ubuntu其实反而就是ESR派比较支持的例子,ESR的观点就是你不会因为分享智慧而失去智慧,所以贡献代码总是能让社会增值的,他鼓励商业开发者利用社区,利用既有开源项目,不要重新造轮子,还在魔法大锅炉里罗列出了大堆商业企业如何在开源的情况还保证利益的方法。那些被opensuse当作反面教材的在这个派看来也是好的。
RMS派最简单,自由软件本身就是正义,其他解释都是多余的没必要的。 为了实现这个正义,就要设计出一个能和万恶的版权对抗的GPL协议;为了维持这个正义,就要开发一套叫做GNU的,由纯自由软件组成,可以替代所有商业软件用途的软件群。 shahito 发表于 2015-6-13 22:49
这是我的理解,有可能有很多的错误,如果有人有看到错误的地方请指正。
1、
写了这么详细的回复真是非常感谢!
有这么多开源的项目真是太好了,即使外人不能轻易修改,能够公开一些复杂功能的技术实现方法对于促进软件业发展也确实大有好处! EraserKing 发表于 2015-6-14 09:52
就看审核的人的水平了
比如Linus……怒喷XXX不会写代码不是一次两次的事了。 ...
Linus怒喷某人不会写代码,然并卵,systemd一样一桶浆糊 四控大叔 发表于 2015-6-14 10:54
还有一点比较重要的是用什么开源协议,bsd协议,gnu协议,Apache协议各有目的。比如安卓的话是内核用gnu协 ...
谢谢~
也常看到关于 GPL 协议论战的新闻,和关于开源协议传染性的辩论。感觉开源协议对商业使用友好肯定是对促进行业发展更加有利吧,毕竟公司是以利益驱动,优化软件的动力更足。
不知道 OS X 同作为 Unix-like 操作系统,拥有简便直观的 GUI 和应用安装 / 卸载机制算不算商业驱动相对社区驱动的正面案例之一。 flynroll 发表于 2015-6-13 21:10
谢谢~
我也是听说 Fedora 就是 Red Hat 的试验场,新功能先拿到社区维护的 Fedora 上试水,成熟了再转移 ...
Blink内核是开源的,内核和浏览器还不完全是同一个东西。
页:
[1]