速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

评论

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

线程的生命周期和常用方法

Java你猿哥

源码 jdk 线程 多线程 Monitor

腾讯T4大牛整理的SpringBoot文档,覆盖你认知中的所有操作

程序知音

Java 架构 微服务 springboot Java进阶

一张图感受真实的 TCP 状态转移

九零后程序员

TCP 网络 Linux Kenel ebpf

首页推荐!阿里大佬带你一周刷完Java面试题1700页,offer拿到手软

做梦都在改BUG

Java java面试 Java八股文 Java面试题 Java面试八股文

WritingGPT: 基于ChatGPT和AutoGPT打造个人写作团队

俞凡

人工智能

未来边缘计算:趋于分布式智能

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

Python潮流周刊#3:PyPI 的安全问题

Python猫

Python 编程 rust 安全

面试官:SpringBoot可以同时处理多少请求?

做梦都在改BUG

Java spring Spring Boot 框架

Java 修改项目名称及其相关信息

Andy

一个字牛!腾讯大牛把《数据结构与算法》讲透了,带源码笔记

程序知音

Java 数据结构 算法 后端 数据结构与算法

2023-05-27:给你一个只包含小写英文字母的字符串 s 。 每一次 操作 ,你可以选择 s 中两个 相邻 的字符,并将它们交换。 请你返回将 s 变成回文串的 最少操作次数 。 注意 ,输入数据

福大大架构师每日一题

Go 算法 rust 福大大

火爆Github的1000道Java面试题:无死角打击所有Java面试问题,按这个学,找工作完全没问题!

架构师之道

Java 编程

解决缓存与数据库数据不一致的问题,这篇文章告诉你如何做!

做梦都在改BUG

Java 数据库 缓存 一致性

如何通过Python将JSON格式文件导入redis

华为云开发者联盟

Python redis 华为云 华为云开发者联盟 企业号 5 月 PK 榜

高并发封神之作的《亿级流量高并发》惨遭GitHub免费开源

小小怪下士

Java 程序员 高并发

低代码的“钱景”——专业的事交给专业的人来做

引迈信息

低代码 JNPF

GaussDB(DWS)条件表达式函数返回错误结果集排查

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

无惧面试!2023最新最全Java面试手册全网首次开放下载

程序员小毕

程序员 多线程 高并发 架构师 java面试

不愧是阿里巴巴内网的“高并发系统设计”学习笔记,全程不讲一句废话!

采菊东篱下

Java 高并发

【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache抽象详解的核心原理探索

洛神灬殇

spring 缓存 cache 缓存管理

模板一作业

家有两宝

#架构训练营

Nautilus Chain上线主网,为DeFi和流支付的未来构建基础

西柚子

这个线上BUG,让你彻底搞懂了MySQL的字符集,别问我咋知道的

Java你猿哥

Java MySQL ssm 字符串 字符集

腾讯T8架构师基于SpringBoot2.x搭建分布式架构

做梦都在改BUG

Java spring Spring Boot 框架

Nautilus Chain上线主网,为DeFi和流支付的未来构建基础

鳄鱼视界

Nautilus Chain上线主网,为DeFi和流支付的未来构建基础

股市老人

Nautilus Chain上线主网,为DeFi和流支付的未来构建基础

BlockChain先知

分布式事务的21种武器 - 6

俞凡

架构 云原生

2023华为伙伴大会:ISDP发布伙伴体验中心,邀伙伴探索数智化未来

科技怪授

华为ISDP:从ChatGPT说起,企业作业数字化转型需要怎样的平台工具?

科技怪授

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