写点什么

开源是什么,开源从哪里来,开源到哪里去

  • 2015-03-20
  • 本文字数:3827 字

    阅读完需:约 13 分钟

【编者按】《开源启示录》是InfoQ 推出的重点专栏,旨在通过新闻、文章、访谈、用户调查、迷你书等形式,报道国内外知名的开源软件以及开源的发展状态,并分析目前开源的现状,总结国内外企业以及个人在开源方面的成功经验以及失败教训。如果您对开源感兴趣,请关注《开源启示录》,也可以加入我们的QQ 群(群号:319967710)参与讨论。

国内的很多软件公司或研究机构对开源的热情仅限于免费的代码,而绝少深度参与开源社区的活动。我们对于开源始终是利用多,而贡献少,从国内发起的有一定影响力的开源项目如果不是完全没有,恐怕也是凤毛麟角。我们是如此的吝啬,即使对于正在使用的开源项目,也不肯轻易“浪费”任何的开发的测试的资源。我有幸两次聆听过自由软件的精神领袖级的人物Richard Stallman 的演讲,他特别强调“Free is not free”,自由不是免费。同样地,开源是自由(Free),而不是免费(Free)。也许,大家在毫无顾忌地尽情地享用开源的免费大餐的时候,完全忘记了开源的真正力量是自由,而不是免费。

开源是什么?简单地讲,开源包括三个方面的内涵:首先,开源是一个项目(Project)。作为项目,为了吸引更多的有兴趣且热心的技术的和非技术的人们的参与,开源往往有其独特的灵活的的项目组织方式和开发流程,这一点和公司截然不同。当然,一般地讲,一个开源项目常常由一个或若干个公司主导,但绝对不会排斥任何它他组织、公司、以及独立开发者的参与。开源项目的管理团队大多通过民主的方式产生。其次,开源是一个社区(Community)。作为社区,开源为开发者、测试者、捐赠者、和用户提供了一个由邮件列表、 论坛、IRC 和各种会议构成的交流平台。Open Source 中的Open 不仅仅是开放的代码,同时也是开放的交流的平台。只要本着相互尊重的原则,技术的、开发的、测试的、使用的、管理的几乎所有的问题都可以是讨论的对象。大家一起出主意、想办法,从各个方面为开源贡献力量。最后,开源是一个产品(Product)。很多时候,开源发布的产品难以满足用户的需求。所以,在不违反相关许可证(License) 的条件下,有些公司对其加以定制,就变身为自己的产品或解决方案。当然,有些公司也会反哺开源的发展。这是一个双赢的良性循环。几乎所有的开源项目都有相关的产品发布。这样的例子可谓举不胜举。Linux 的产品化就是一个最经典的例子,可以说,如果没有Linux 的产品化,也不会有Linux 开源的枝繁叶茂。另外的例子还有Eclipse 的各种衍生产品。而OpenOffice.org 的分裂和衰落也许是其产品化不够多不够好导致的。在我们这个神奇的国度,据说有一个绝顶聪明的院士,把国外的一个开源项目发挥到了极致的水平,竟以此荣获了国家自然科学一等奖,令人叹为观止,不服不行。

重要的是,开源是一个自由的世界。人们可以自由地加入或退出社区,自由地讨论各种问题,发表各种建议。开发者可以自由地学习开源的代码和技术,用户可以自由地使用开源产品。有了开放的代码,在不违背开源代码和产品的许可证的条件下,可以自由改写、删除、增加开源产品的功能。公司和组织也可以自由地利用开源的代码和技术,自由地出售开源的产品。正如上文所述,开源鼓励公司参与的产品化。人人为我,我为人人,这也许可以作为开源的自由的真谛,不过,这实在是太美好了,美好得简直让人难以置信。回到现实,自由的愿景无论多么令人向往,一个开源项目/ 社区的成败最终还是系于民心士气,若自由的力量仍然不能唤起人们参与的热情,那么这个开源社区/ 项目存在的理由和价值就大大的值得怀疑了。

另一方面,更为重要的是,有论者认为,开源本身就是一种免费商业模式,此言不虚也。这就如同正在被互联网公司演绎得如火如荼的免费商业模式一样。比如,我们虽然并没有为每次的Google 搜索买单,但我们的搜索行为会作为大数据的一部分最终转化为Google 的广告收入。拥有足够多的用户才是这种商业模式得以成功的关键所在。同样地,开源项目的源代码和最终的产品都是免费的,开放的,可以被自由地而不是任意地使用。开源的商业模式包括通过基金会募捐,向用户提供技术支持服务而收取费用,另外,许多公司在做开源项目产品化的同时也向开源直接贡献开发和测试资源,这其实也是一种资助行为。当然,正如上文所言,得到大量的免费用户的支持,这种开源商业模式才有可能取得成功。

仅看到开源免费的好处,而无视开源的自由的力量,即使从纯功利的角度来讲,也绝对是一种短视的行为。对于正在使用开源的公司而言,积极的参与开源社区的建设起码可以从以下两个方面获益:第一,对开源的贡献越多,影响就会越大,从而产生良好的广告效应。通过开源,能够更好地展示自己的技术、产品和解决方案,并赢得用户的信赖。第二,如果实力足够强,有能力主导开源项目的开发方向,就可以更好的汇聚开源社区的资源来完善自己的产品,这给公司带来的好处自然是不言而喻的。对于程序员来讲,参与开源的最大好处就是贡献所得到的成就感。在IBM 工作的时候,我所在的产品线Symphony 是基于OpenOffice.org 的办公套件,当时,我开发了一个回退字体(rollback font) 快速匹配的算法,当用户为文本指定的字体在系统中不存在时,该算法可快速地从系统中找到一个最合适的替代字体,这可以大大提高文本的渲染速度,改善文本的显示质量。我把这一算法成功地提交给了OpenOffice.org。我清楚地知道,用户每次使用OpenOffice.org 打开编辑一个文档时,都可能运行这个算法,这种成就感便油然而生。当然,令人遗憾的是OpenOffice.org 分裂了。不过libreoffice.org 依然还继续存在。

其实,阻止国内程序员参与开源的一个重要的原因不是技术能力的限制,而是英语水平的限制。学了那么多年的英语,即便是得到了四六级证书,也会发现学的那点哑巴英语根本派不上用场。语言不通所导致的交流不畅是一个艰涩的困难,但远远小于心中对外部不可知的世界和不可控的变化的畏惧所产生的苟且偷安的惰性思想的障碍。我无意在这里讨论如何提高个人的英语水平,只是想强调,有志者事竟成,一个有出息的程序员,如果心胸足够的开放,对未知的领域充满了好奇和向往,英语就绝非不可攻克的堡垒。况且,国内的程序员最担心的是听力和口语,而大多时候,开源社区都是通过书面的邮件来沟通。

最后,以下几点仅供有志于开源的朋友参考:

第一,几乎每个开源社区都向新手提供一个入门指南(Getting Started Guide),仔细阅读可以避免走不必要的弯路。

第二,和社区大胆的互动。有什么问题不明白,不要自己冥思苦想,尽管大胆的提出来,即使再简单,也总是会有热心的人们来回答,更不会有人嘲笑你。当然,交流的时候,一定要尊重对方。邮件中要包含基本的礼貌,对别人的帮助要表示感谢。与此同时,也不要忘了帮助别人。

第三,开源的开发多少有一点自由的散漫,没有太严格的计划。所以,有时候,会觉得自己的要求没有得到很快的响应和满足。需要注意的是,并不是自己提交的BUG 就一定被认可,并不是自己提交的代码就一定被接受。遇到这种情况,要把道理讲清楚,而不要意气用事。

第四,有些开源项目的代码质量实在是不敢恭维,可能是参与开发的程序员良莠不齐,加之监管不严所致,但也并非全部如此。我还记得经常开玩笑说,OpenOffice.org 代码有些函数长得常常从这头看不到另一头。哥德尔不完全定理指出,任何一个类似于罗素和怀特海在《数学原理》中给出的数论的形式系统,无论有多强,都是不完全的,总有一个良构的G 命题,既不能被证明是真,也不能被证明为假,所以任何形式系统都不能完全地描述数论乃至于数学的全部的性质,这当然不是十全十美的结论,但从另一方面讲,这又意味着数学真理的发现仍然有赖于数学家们创造性的聪明才智,可谓失之东隅, 收之桑榆。大而言之,人生总是有太多的缺憾、苦难、荒谬、离别、烦恼、虚荣、忧愁、彷徨、伤心、失恋、平庸、志大而才疏、怀才却不遇、白富美的空幻、矮矬穷的苦痛等等,相反,正是这坏的一面才反衬出那好的一面更值得珍惜,只有那些不完美才成就了完美,这就是一个哲学思辨的怪圈。集众人之力开发的开源的计算机程序又何尝不是如此。所以,凡事还需忍耐些,且行且珍惜吧。

第五,理论上讲,若要实现一个软件功能,只要在邱奇- 图灵论题可计算的范围之内,都可以用计算机编程语言来表达,在这一点上,无论多么高明的算法和程序,其实并没有什么艰深得不可逾越的技术鸿沟。可以说,技术总是简单,自己能够做到的,别人照样可以做到,反之亦然。但是,艺术却是无限,如果想要达到艾舍尔那样的绘画水平或巴赫那样的音乐水平,做不到就是做不到啊。当然,计算机编程也可以看做艺术,如Donald Ervin Knuth 的名著《计算机程序设计艺术》(The Art of Computer Programming)所呈现的技巧,因此,程序的质量和算法的性能确实有上下高低之别。总之,无论是公司和个人,完全没有必要把一切东西都当做宝贝疙瘩,像祖传的武功秘籍或中药秘方那样严密的珍藏保护起来,以为这样,就可以做到我有而别人不能够有,那可就大错特错了。所以,很多情况下,对开源的贡献并不会损害公司的竞争力,相反,还会加强公司的竞争力。

第六,与第五点相反,作为独立的程序员,也要充分了解你所在公司关于知识产权的政策,千万不要把公司专有知识产权的代码提交到开源社区。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

2015-03-20 09:264052

评论

发布
暂无评论
发现更多内容

用户组角色绑定(原生element-plus-ui表格)

青柚1943

Element Plus Vue3 Typescript

软件测试 | 测试开发 | iOS 自动化测试踩坑(一): 技术方案、环境配置与落地实践

测吧(北京)科技有限公司

测试

Saas企业数字化必不可少的工具——帮助中心

Baklib

SaaS 企业 数字化 帮助中心

深入理解MYSQL之缓存

C++后台开发

MySQL 数据库 缓存 中间件 后端开发

测试面试真题|抖音的广告系统前后台,该如何测试?

霍格沃兹测试开发学社

EMQ走进亚马逊云科技:携手云端,共筑「面向未来」的IoT基础设施底座

EMQ映云科技

物联网 IoT 解决方案 亚马逊云科技 9月月更

kube-prometheus 监控系统使用与总结

CTO技术共享

软件测试 | 测试开发 | 一文彻底理解 Cookie、Session、Token

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 不懂PO 设计模式?这篇实战文带你搞定 PO

测吧(北京)科技有限公司

测试

【Vue2】简易Vue2-简易图书借阅管理

Sam9029

Vue 前端 9月月更

Onedev v7.4.14 路径遍历漏洞分析(CVE-2022-38301)

墨菲安全

网络安全 开发安全 漏洞分析 软件供应链安全

阿里云PolarDB-X 荣获“2022 OSCAR 尖峰开源项目及开源社区”奖

阿里云数据库开源

阿里云 分布式数据库 开源数据库 PolarDB-X 可信开源

测试人生 | 30 而立之年的蜕变,6 个月完成从国企到 BAT 大厂测开的华丽转身

霍格沃兹测试开发学社

软件测试 | 测试开发 | JAR 文件规范详解

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | app自动化测试(iOS)元素定位(新手篇)

测吧(北京)科技有限公司

测试

测试面试真题|从手工到测开,一位测试媛宝妈的 BAT 大厂逆袭之旅

霍格沃兹测试开发学社

搭建在线帮助中心是企业最重要的第一步

Baklib

企业 在线文档 帮助中心 帮助文档

性能测试知识科普(二):测试策略

老张

性能测试

计算机网络——封装成帧和透明传输

StackOverflow

编程 计算机网络 9月月更

JS-内置对象API-Array(数组)-(二)-不改变原数组的API-篇

Sam9029

JavaScript 前端 9月月更

干货分享|使用 Istio 实现灰度发布

北京好雨科技有限公司

istio #Kubernetes#

软件测试 | 测试开发 | Python中日志异步发送到远程服务器

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | iOS自动化真机测试验证环境过程中常见问题解析

测吧(北京)科技有限公司

测试

企业FAQ页面案例展示及FAQ站点搭建技巧

Baklib

企业 FAQ

获得多家大厂SSP的清华应届毕业生—田原:大厂各轮面试中开源经验有什么用|《大神详解开源 BUFF 增益攻略》讲座回顾

Apache IoTDB

数据库 开源 求职 Apache IoTDB 企业号九月金秋榜

软件测试 | 测试开发 | 《穿越时空的git》之创建版本库和常用命令操作

测吧(北京)科技有限公司

测试

阿里MaxCompute生态团队负责人—李睿博 : 参与开源,让自己的履历与众不同|《大神详解开源 BUFF 增益攻略》讲座回顾

Apache IoTDB

数据库 线上讲座 Apache IoTDB 企业号九月金秋榜

大厂校招SSP获得者—张金瑞 :开源项目,求职者的最佳简历|《大神详解开源 BUFF 增益攻略》讲座回顾

Apache IoTDB

开源 求职 Apache IoTDB 企业号九月金秋榜

提质增效,安全灵活,阿里云EDA上云方案让芯片设计驶入高速路

阿里云弹性计算

HPC EDA 高性能计算 芯片开发

个推直播预告:9月26日,一线专家分享APP数字化运营方法与实践

个推

数字化 用户画像 标签体系

软件测试 | 测试开发 | 一文搞定 Postman 接口自动化测试

测吧(北京)科技有限公司

测试

开源是什么,开源从哪里来,开源到哪里去_语言 & 开发_贾彦民_InfoQ精选文章