红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

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

  • 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:263897

评论

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

搭建K8s容器化应用的开发调试环境

xiaoboey

Docker Kubernetes k3s Telepresence Skaffold

实用机器学习笔记三:网页数据抓取

打工人!

机器学习 学习笔记 12月日更 实用机器学习

Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架【值得收藏】

前端开发爱好者

typescript 大前端 Vue3 Vite2

如何设计微服务架构

天天向上

架构实战营

《我和我的家乡》观后感

圣迪

Mac 常用远程连接 ubuntu 工具对比

悟空聊架构

28天写作 Mac 软件 悟空聊架构 12月日更 远程连接

JavaScript数据结构之 Array

devpoint

JavaScript ES6 array 内容合集 签约计划第二季

电子屏幕 or 风月宝鉴

mtfelix

3.《重学JAVA》—Hello World

杨鹏Geek

Java 25 周年 28天写作 12月日更

一个简单的例子教会您使用 javap

Jerry Wang

Java 性能调试 28天写作 12月日更 javap

SAP 产品的 Field Extensibility

Jerry Wang

28天写作 扩展 ERP 12月日更 企业管理软件

linux常用命令-历史命令和自动补全

Java个体户

Linux

【Promise 源码学习】第十一篇 - Promise.all 的实现

Brave

源码 Promise 12月日更

关于元宇宙的一些认识

印哥爱学习

学习笔记 元宇宙

数据一致性

卢卡多多

数据一致性 28天写作 12月日更

为什么不要急着告诉孩子答案?

Justin

心理学 教育 28天写作

Android C++系列:Linux线程(一)概念

轻口味

c++ android 28天写作 12月日更

元宇宙:虚实相生的网络世界

石云升

学习笔记 28天写作 元宇宙 12月日更

世界女性科技群落(二):种姓制度与数字微光下的生长录

脑极体

amazing

Nydia

创业研发团队的组织建设-软件工作流程

wood

创业 敏捷开发 28天写作

Python Qt GUI设计:QTableView、QListView、QListWidet、QTableWidget、QTreeWidget和QTreeWidgetltem表格和树类(提升篇—1)

不脱发的程序猿

Python qt GUI设计 Qt Company 表格和树类

su 和 sudo,你用对了吗?

xcbeyond

Linux 28天写作 12月日更 sudo

JavaScript中的作用域和预解析

你好bk

JavaScript 大前端 ES6 HTML5, CSS3 12月日更

浅谈应用架构设计思路

陈俊

应用架构 设计指南

Golang Gin 框架之日志 DIY(七)

liuzhen007

28天写作 12月日更

如何调用潜意识有效收集演讲素材-从右脑到左脑的切换

将军-技术演讲力教练

34 K8S之ServiceAccount及X509数字证书

穿过生命散发芬芳

k8s 28天写作 12月日更

手把手带你玩转 Spring

4ye

Java spring 程序员 内容合集 签约计划第二季

支付宝商户号稳定性解决方案

hackstoic

支付宝 解决方案 To B业务

渗透测试如何入门?

喀拉峻

网络安全 安全

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