关于开源

知乎看到了神奈川关于开源回答的两个好答案,深以为然,转到自己的blog上,时时勤拂拭。

  1. 为什么要开源
  2. 世界顶级开源软件工程师,他们如何谋利?

为什么要开源

题主问的非常好,尤其是从功利的角度来看为什么要开源。我把这个问题分成三个回答你:

从无私的角度看,为什么要开源? 从自私的角度看,个人为什么要开源? 从自私的角度看,公司为什么要开源?

从无私的角度看,为什么要开源?

  1. 建立社区:可以这么说,如果没有开源社区,苹果,谷歌,Facebook都不会是现在这样。如果没有Linux,现在互联网的格局简直无法想象。为了让更多人能够使用优秀的产品,需要有人来愿意把自己的产品免费给他人使用。很多开源社区的贡献者都是为了建立,维持这样一个互助互利的社区而不断努力的。

  2. 帮助他人:开源一个很美妙的地方就是,别人不用花时间解决一样的问题。当你看到你的一个大问题已经有人做了开源项目的时候,你一定感觉如释重负。同样,有人感谢你的开源项目帮他们解决了一个大问题,真的是种很美妙的成就感。

  3. 结识朋友:开源社区中经常能遇到很多志同道合的好朋友。你帮我改代码,我帮你加功能,说不定两个人就认识成了好朋友。我和我现在的一位导师和几位朋友就是在贡献开源项目的时候认识的。

好,下面来说说不明显的:

从自私的角度看,个人为什么要开源?

  1. 提升代码质量:开源是提升个人代码质量的好方法。这个有两个方面:首先,如果你知道你的代码要给别人看,你会不自觉的把代码写的更干净一点,多加点说明。其次,开源之后别人会建议怎么改(如果你的项目有一定影响力),给你建议的人多了,你也大概就有概念怎么把代码写的更好了。

  2. 展示个人代码:如果你在找工作,这个很可能会是你的主要动机。公司实际上很好奇你写的代码质量如何,但是光从1个小时的面试实在看不出太多。所以很多公司会非常喜欢看你的开源项目,来评估一下你的代码质量如何。同样,如果你面试的时候告诉公司,“我有个开源项目,你们可以去看看”,这将是个不错的加分项。

  3. 建立个人品牌:如果你足够厉害,把一个优质项目开源是个迅速提升影响力的好方法。很多在大公司工作过的顶级工程师,我们都是通过他们的开源项目认识的。git的发明人,Linus Torvalds,就是一个好例子。一个工程师如果在工作之外想要树立个人品牌的话,写一个高质量的开源项目是个相当好的选择。

  4. 备份个人项目:其实很多人把项目放到Github的时候根本没想这么多。。。他们只是想把家庭作业,代码练习啥的备份到网上去而已。。。其实Github当中绝大部分项目都是这种实际没啥用的代码备份(只是Github没让你看到)。。

从自私的角度看,公司为什么要开源?

  1. 树立品牌形象:公司与个人开源的动机不同。公司开源很多情况下是为了提升外界对公司的形象认知。任何一个大科技公司,肯定用了多多少少用了开源项目(Linux,至少吧?)。如果连一个开源项目都没有,这很容易给人造成,“这公司总是索取,却不回馈给开源社区”的形象(尤其在美国)。

  2. 发掘潜在员工:比如,我读了谷歌的Android的代码,发现里面有个大安全漏洞,然后我提交一个修改把漏洞给补了。你说谷歌想不想拉起我去工作?很多公司一个很好的招聘渠道是开源项目的贡献者。如果能在公司开源项目做出有意义贡献的话,这个对于公司来说是比面试好很多的能力证明。

  3. 实现额外功能:这点实际上很有意思,有的公司/项目实际上有很多想做的小功能,但是没时间也没人力去单独做。这个时候开源的力量就体现出来了,项目开源之后很多时候能吸引到开源贡献者来做一些自己感兴趣,项目想要,但项目没时间做的feature。我之前在Socket.io做的时候写的就是这样的一个小feature。

  4. 扩大影响范围:公司开源项目的质量,很多时候能反映公司的影响力。所以硅谷的很多大公司,都有一些厉害的开源项目。一方面是回馈社区,一方面是展示公司的影响力和代码质量,吸引更多人才。同样,如果一个公司很希望自己的一个产品有更大影响力的话,开源是个好方法。苹果的Swift就是个好例子。Swift开源之后,能够用在不少iOS之外的领域。说不定之后我们还能看到用Swift写的网站架构。

  5. 用作战略武器:开源项目还可以作为公司的战略武器。最好的例子就是谷歌的Android。通过开源和病毒式的传播一下追上iOS。这里面有很多弊端(比如碎片化严重),不过谷歌这么一招给了开发者十分大的力量,Android一下成为一个和iOS比肩的选项。

如果你好奇全职的开源工程师如何赚钱的话,这是我之前的答案: 世界顶级开源软件工程师,他们如何谋利? - 编程

最后,也希望题主能继续为开源社区出一分力 : )

世界顶级开源软件工程师,他们如何谋利?

喜欢这个问题,我之前也有相同的困惑。

来说说我导师的故事。

在哈佛上一个和Facebook一起合作办学的课程,一个学期与一个开源项目合作,学习在开源社区维持并贡献代码。

我当时选择了Socket.io。写过实时软件(比如聊天室,微信,多人在线合作文档)的同学可能听说过Socket这个概念。Socket.io就是用javascript编写的Socket库,只要几行就能弄出一个聊天室。这个项目在Github上有将近2万的star。实际使用项目规模大约有10万以上。并不能和Rails,Linux这种顶级的开源项目比,但是也十分了得。

我的导师,Socket.io的创始人之一,并没有稳定的日常工作。换个说法更好,他并不需要稳定的日常工作。

首先,他的主要工作,是旅游。Socket.io因为有不错的国际影响力,他经常被各个地方当地的软件社区请去做演讲嘉宾。去年我在日本的时候还十分机缘巧合地也碰到他在东京,一问原来是参加东京的Socket.io event来做嘉宾了。因为是别人请来,衣食住行全部报销,一分钱都没花。

曾经,他先后被三家创业公司雇佣,担任CTO,公司卖了赚了大笔钱。现在他基本处于不用工作就可以衣食无忧的状态。选择再次加入创业公司也只是因为个人兴趣爱好。包括别人请他飞来飞去,何必用个工作来限制周游世界的自由?

然后,他对于Socket.io本身的工作,基本减少到维持社区,做战略决定。听他说很多民间爱好组织会给这个项目捐钱,数额不等,但并不是主要收入。大公司合作捐款的很多,基本上可以作为2~3个人的工资。这些捐款也确实基本用于支付全职项目管理员。他也不太再直接写代码,很多漏洞和功能都是代理给管理员和社区了。不过前一段时间Socket.io要更新大版本,他比较辛苦一些,亲自修复了之前很多漏洞。

最后,来说说我在开源社区的几个感受: 开源并不是散漫。开源社区有着相当严格的管理体系。每个大型项目都有创始人,全职管理员(管理项目领薪水),专项贡献者,一般贡献者等不同的区分。开源软件不会被新手破坏也是得益于这样的管理体系。一般如果你只是随便写点东西,管理员是不会允许你的代码进入项目的。

开源并不是赚钱。开源项目是为了影响力。如果Linux像微软一样收费,怎么也不可能走到今天这步。与之相对,开源项目创始人和领导者所获得的,是他人无与伦比的尊敬。如果想要,他们的地位,影响力完全可以给他们找到任何级别的工作,无论是大小公司CTO,高级工程师,创业cofounder。其中任何一项几年的薪资都可以让他们衣食无忧。更何况之前所说的捐款,演讲。

最后link一下关于开源的另一个回答,感兴趣的朋友们可以去看看: 为什么要开源? - 神奈川的回答


markdown入门 zsh介绍