标签 开源 下的文章

开源 open source ”这个词,指的是事物规划为可以公开访问的,因此人们可以修改并分享。

这个词最初是起源于软件开发中,指的是一种开发软件的特殊形式。但到了今天,“开源”已经泛指一组概念——就是我们称之为的“开源的方式”。这些概念包括开源项目、产品,或是自发倡导并欢迎开放变化、协作参与、快速原型、公开透明、精英体制以及面向社区开发的原则。

什么是开源软件?

开源软件的源代码任何人都可以审查、修改和增强。

源代码 source code ”是软件中大部分计算机用户都没见过的部分,程序员可以修改代码来改变一个软件(“程序”或“应用”)工作的方式。程序员如果可以接触到计算机程序源代码,就可以通过添加功能或修复问题来改进这个软件。

开源软件和其它类型的软件有什么不同?

有些软件只有创建它的人、团队、组织才能修改,并且控制维护工作。人们称这种软件是“ 专有 proprietary ”或“ 闭源 closed source ”软件。

专有软件只有原作者可以合法地复制、审查,以及修改这个软件。为了使用专有软件,计算机用户必须同意(通常是在软件第一次运行的时候签署一份显示的许可)他们不会对软件做软件作者没有表态允许的事情。微软 Office 和 Adobe Photoshop 就是专有软件的例子。

开源软件不一样。它的作者让源代码对其他人提供,需要的人都可以查看、复制、学习、修改或分享代码。LibreOfficeGIMP 是开源软件的例子。

就像专有软件那样,用户在使用开源软件时必须接受一份许可证的条款——但开源许可的法律条款和专有软件的许可截然不同。

开源许可证影响人们使用、学习、修改以及分发的方式。总的来说,开源许可证赋予计算机用户按他们想要的目的来使用开源软件的许可。一些开源许可证(人们称之为 左版 copyleft ”)规定任何发布了修改过的开源软件的人,同时还要一同发布它的源代码。此外,另一些开源许可规定任何修改和分享一个程序给其他人的人,还要分享这个程序的源代码,而且不能收取许可费用。

开源软件许可证有意地提升了协作和分享,因为它们允许其他人对代码作出修改并将改动包含到他们自己的项目中。开源许可证鼓励开发者随时访问、查看、修改开源软件,前提是开发者在分享成果的时候允许其他人也能够做相同的事情。

开源软件只是对开发者很重要?

不。开源技术和开源思想对开发者和非开发者都有益。

因为早期的创造者基于开源技术构建了互联网本身的大部分——比如 Linux 操作系统Apache Web 服务器应用——任何今天使用互联网的人都受益于开源软件。

每当计算机用户浏览网页、检查邮件、和朋友聊天、在线收听流媒体音乐、玩多人游戏的时候,他们的电脑、手机或游戏主机都会连接到一个全球性的计算机网络,使用开源软件来路由并将他们的数据传输到面前的“本地”设备上。完成这些重要工作的计算机通常位于很远的地方,用户不会实际看到或物理接触到它们——所以有些人称之为“远程计算机”。

越来越多的人开始依赖于远程计算机,在可以在本地完成的任务在线完成。举个例子,人们可能会使用在线文字处理、电子邮件管理、图片编辑工具,而在本地的个人电脑并没有安装运行相应的软件。人们轻松地使用浏览器或手机应用访问这些程序。当他们这么做的时候,他们参与到了“远程计算”中。

一些人将远程计算称为“云计算”,因为它涉及的活动(像是存储文件、分享照片、观看视频)不仅包含本地设备,还有一个远程计算机全球网络,像是围绕在周围的大气。

云计算是日常生活一个越来越重要的概念,离不开连接互联网的设备。一些云计算应用,比如 Google 应用,是专有的。其它的,像 OwnCloud 和 NextCould 是开源的。

云计算应用运行在一些额外的软件“之上”,这些软件帮助它们流畅高效地操作,所以人们经常说那个软件运行在云计算应用“之下”,为那些应用扮演一个“平台”。云计算平台可以是开源或闭源的。OpenStack 是一个开源云计算平台的例子。

为什么人们更倾向于使用开源软件?

人们相对于专有软件更倾向于开源软件有很多原因,包括:

可控。很多人青睐开源软件因为相对其它类型软件他们可以拥有更多的可控。他们可以检查代码来保证它没有做任何不希望它做的事情,并且可以改变不喜欢的部分。不是开发者的用户也可以从开源软件获益,因为他们可以以任何目的使用这个软件——而不仅仅是某些人认为他们应该有的目的。

训练。其他人喜欢开源软件是因为它可以帮助他们成为更好的开发者。因为开源代码可以公开访问,学生可以在学习创建更好的软件时轻松地从中学习。学生还可以在提升技能的时候分享他们的成果给别人,获得评价和批评。当人们发现程序源代码中的错误的时候,可以将这个错误分享给其他人,帮助他们避免犯同样的错误。

安全。一些人倾向开源软件是因为他们认为它比专有软件更安全和稳定。因为任何人都可以查看和修改开源软件,就会有人可能会注意到并修正原作者遗漏的错误或疏忽。并且因为这么多的开发者可以在同一开源软件上工作,而不用事先联系获取原作者的授权,相比专有软件,他们可以更快速地修复、更新和升级开源软件。

稳定。许多用户在重要、长期的项目中相较专有软件更加青睐开源软件。因为开发者公开分发开源软件的源代码,如果最初的开发者停止开发了,关键任务依赖该软件的用户可以确保他们的工具不会消失,或是陷入无法修复的状态。另外,开源软件趋向于同时包含和按照开放标准进行操作。

“开源”不是只是意味着某样东西是免费的吗?

不。这是个“开源”实践中的常见误解,“开源”概念的含义不只是指经济方面的

开源软件开发者可以为他们创建或贡献的开源软件收取费用。但在一些情况下,由于开源许可证可能会要求他们在将软件卖给他人的时候发布源代码,一些开发者发现向用户收取软件服务和支持(而不是软件本身)的费用会更加合算。通过这种方式,他们的软件仍然保持免费,而他们从帮助他人安装、使用、解决问题中赚取费用。

尽管一些开源软件可能是免费的,但开源软件的编程和解决问题的技能可能十分有价值。许多雇主特别寻求雇佣在开源软件方面有工作经验的开发者

什么是“在软件之外”的开源?

在 Opensource.com,我们想说我们对于开源价值和原则应用到软件之外领域的方式很有兴趣。我们更愿意不仅将开源视为一种计算机软件开发和许可的方式,也把它视作一种态度。

实现“开源方式”的生活的各个方面,意味着表达一种分享的意愿,通过透明的方式和他人协作(这样其他人也可以关注和加入),拥抱失败,将它作为一种改进的手段,以及期待(甚至鼓励)所有人都可以这么做。

这也意味着在让世界变得更好的过程中扮演一个积极的角色,这只有在每个人都可以接触到对世界进行规划的途径时才有可能。

这个世界充满了“源代码”——蓝图食谱规则——它们引导和塑造我们思考和行动的方式。我们相信这些深层代码(无论是什么形式)应该是开放、可接触、分享的——这样人们可以参与其中并让它变得更好。

在这里,我们诉说开源价值对生活所有领域的影响的故事——科学教育政府工业、健康、法律,以及组织动态。我们是一个社区,告诉他人开源的方式如何成为最好的方式,因为对开源的爱和其它一样:当它被分享的时候它会变得更好。

在哪里能够获得关于开源的更多信息?

我们编辑了一些资源来帮助你学到更多关于开源的内容。我们推荐你从阅读我们的开源问答、指南、教程开始。


via: https://opensource.com/resources/what-open-source

作者:<opensource.com> 译者:alim0x 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LinuxQuestions.org 的用户分享了他们使用 Linux 和开源技术的原因。我们的用户如何回答这个问题?

 title=

在网站问答区发布时我曾经提到过,尽管我一般会回答来自用户问题,但偶尔我也会反过来问读者一些问题。我并没有在问答区第一期文章这样做,看起来有点姗姗来迟。我最近在 LinuxQuestions.org 上提问了两个相关的问题,收到了很多回复。让我们看看我们的用户对同样的问题和 LinuxQuestions.org 的回答的对比。

你为什么使用 Linux?

我向 LinuxQuestions.org 社区提问的第一个问题是:你们使用 Linux 的原因是什么?

回答集锦

oldwierdal:我用 Linux 是因为它运行快速、安全、可靠。在全世界的贡献者的参与下,Linux 或许已经成为当前我们能用到的最先进和最具创新的软件。Linux 的用户体验就像红丝绒蛋糕上的糖衣一样令人回味无穷;此外,Linux 是免费的。

Timothy Miller:我最开始使用 Linux 是因为它免费的,而且那时候我的经济条件无法承受购买新的 Windows 系统正版授权的费用。

ondoho :因为它是一个拥有全球性社区为之努力、独立的草根操作系统。因为它在各方面都是自由的。因为它有足够多的理由让我们信任它。

joham34:稳定、免费、安全,能够运行在低配置的电脑上,提供良好技术支持的社区,感染病毒的几率更小。

Ook:我用 Linux 是因为它可以完成工作,对我来说 Windows 系统在某些事上从来都不能做好。我不得不浪费时间和金钱让 Windows 继续正常运行下去。

rhamel:我非常担心个人隐私泄露在网上。我意识到我不得不在隐私和便利性之间做出妥协。我可能是在骗自己但我确实认为 Linux 至少在某种程度上给了我一定的隐私权。

educateme:我使用 Linux 因为它的开放、好学、热情乐于助人的社区。而且,它是免费的。

colinetsegers:我为什么用 Linux?原因不止一个。简单的说有以下几点:

  1. 自由分享知识的理念。
  2. 浏览网页的时候有安全感。
  3. 大量免费、有用的软件。

bamunds:因为我热爱自由。

cecilskinner1989:我用 Linux 的两个原因:稳定性和隐私。

你为什么使用开源软件?

第二个问题相对更加宽泛:你为什么使用开源软件?你会注意到尽管有些回复是有重复的部分,但用户的回答大体上的语气是不同的,有些用户的回答得到很多人的赞同和支持,也有不少用户的回答不怎么被其他人认同。

回答集锦

robert leleu:温馨、合作的氛围是我沉溺于开源的主要原因。

cjturner:对于应用而言,开源正好反映了帕累托法则;不做二次开发的话,一个软件包最终可能只能满足你的 80% 的需求,而你需要自己解决剩下的 20%。开源给了你一个途径,通过社区来解决这种问题,你可以自己努力实现(如果你有相关的技能)或者花钱有偿请人实现你的需求。

Timothy Miller:我喜欢这种体验,我能够自己检查源代码来确定我所选择的软件是安全的。

teckk:没有繁琐的许可要求或者数字版权管理(DRM),而且每个人都可以获得它。

rokytnji :像零花钱,摩托车部件,孙辈的生日礼物那样令人愉悦。

timl:没有自由软件避免隐私的泄露是不可能。

hazel:我喜欢自由软件的哲学,但如果 Linux 是一个糟糕的操作系统我也会理性的不去使用它。我使用 Linux 是因为我热爱 Linux,而且你也能免费获得它就像免费的啤酒一样。事实上它也如言论自由一般自由不受拘束,使用开源软件让我感觉很舒服。但是如果我发现我的计算机有一个硬件需要专有固件的配合才能发挥功能,我也会使用专有固件。

lm8:我使用开源软件是因为我不必担心由于开发公司的破产或者决定停止维护它而导致它可能会变得过时或者被废弃。我能够自己来完成后续的更新、维护。如果我想让软件能够做我想的任何事情,我也可以进一步定制它,但是如果有更多的特性,那就更好了。我也喜欢开源,因为开源我才能够和朋友、同事们分享我喜欢的程序。

donguitar:因为它能够让我学到很多,也让我让别人学到了很多。

该你回答了

所以, 使用 Linux 的原因是什么? 使用开源软件的原因是什么?请在评论区告诉我们。

最后的补充

最后,在以后的文章里你想看到什么问题的回答?是社区的建立和维护的相关问题,还是你想知道如何对一个开源项目作出贡献,还是更有技术性的问题 — 向我们提交你对 Linux 和 开源的问题。

(题图:opensource.com)


作者简介:

Jeremy Garcia - Jeremy Garcia 是 LinuxQuestions.org 的创立者同时也是一位热情中不乏现实主义的开源倡导者。你可以在 Twitter 上关注 Jeremy:@linuxquestions


via: https://opensource.com/article/17/3/why-do-you-use-linux-and-open-source-software

作者:Jeremy Garcia 译者:WangYueScream 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

许多自由和开源软件项目因解决问题而出现,人们开始为它们做贡献,是因为他们也想修复遇到的问题。当项目的最终用户发现它对他们的需求有用,该项目就开始增长。并且出于分享的目的把人们吸引到同一个项目社区。

就像任何事物都是有寿命的,增长既是开源项目成功的标志,也是开源项目成功的来源。那么项目领导者和维护者如何激励贡献者基数的增长?这里有五种方法。

1、 提供好的文档

人们经常低估项目文档的重要性。它是项目贡献者的主要信息来源,它会激励他们努力。信息必须是正确和最新的。它应该包括如何构建该软件、如何提交补丁、编码风格指南等步骤。

查看经验丰富的科技作家、编辑 Bob Reselman 的 7 个创建世界级文档的规则

开发人员文档的一个很好的例子是 Python 开发人员指南。它包括清晰简洁的步骤,涵盖 Python 开发的各个方面。

2、 降低进入门槛

如果你的项目有工单或 bug 追踪工具,请确保将初级任务标记为一个“小 bug” 或“起点”。新的贡献者可以很容易地通过解决这些问题进入项目。追踪工具也是标记非编程任务(如平面设计、图稿和文档改进)的地方。有许多项目成员不是每天都编码,但是却通过这种方式成为推动力。

Fedora 项目维护着一个这样的易修复和入门级问题的追踪工具

3、 为补丁提供常规反馈

确认每个补丁,即使它只有一行代码,并给作者反馈。提供反馈有助于吸引潜在的候选人,并指导他们熟悉项目。所有项目都应有一个邮件列表和聊天功能进行通信。问答可在这些媒介中发生。大多数项目不会在一夜之间成功,但那些繁荣的列表和沟通渠道为增长创造了环境。

4、 推广你的项目

始于解决问题的项目实际上可能对其他开发人员也有用。作为项目的主要贡献者,你的责任是为你的的项目建立文档并推广它。写博客文章,并在社交媒体上分享项目的进展。你可以从简要描述如何成为项目的贡献者开始,并在该描述中提供主要开发者文档的参考连接。此外,请务必提供有关路线图和未来版本的信息。

为了你的听众,看看由 Opensource.com 的社区经理 Rikki Endsley 写的写作提示

5、 保持友好

友好的对话语调和迅速的回复将加强人们对你的项目的兴趣。最初,这些问题只是为了寻求帮助,但在未来,新的贡献者也可能会提出想法或建议。让他们有信心他们可以成为项目的贡献者。

记住你一直在被人评头论足!人们会观察项目开发者是如何在邮件列表或聊天上交谈。这些意味着对新贡献者的欢迎和开放程度。当使用技术时,我们有时会忘记人文关怀,但这对于任何项目的生态系统都很重要。考虑一个情况,项目是很好的,但项目维护者不是很受欢迎。这样的管理员可能会驱使用户远离项目。对于有大量用户基数的项目而言,不被支持的环境可能导致分裂,一部分用户可能决定复刻项目并启动新项目。在开源世界中有这样的先例。

另外,拥有不同背景的人对于开源项目的持续增长和源源不断的点子是很重要的。

最后,项目负责人有责任维持和帮助项目成长。指导新的贡献者是项目的关键,他们将成为项目和社区未来的领导者。

阅读:由红帽的内容战略家 Nicole Engard 写的 7 种让新的贡献者感到受欢迎的方式


作者简介:

Kushal Das - Kushal Das 是 Python 软件基金会的一名 CPython 核心开发人员和主管。他是一名长期的 FOSS 贡献者和导师,他帮助新人进入贡献世界。他目前在 Red Hat 担任 Fedora 云工程师。他的博客在 https://kushaldas.in 。你也可以在 Twitter @kushaldas 上找到他


via: https://opensource.com/article/17/1/expand-project-contributor-base

作者:Kushal Das 译者:geekpi 校对:Bestony

本文由 LCTT 原创编译,Linux中国 荣誉推出

你想成为开源项目中得意满满、功成名就的那个人吗,那就要遵守下面的“潜规则”。

正如体育界不成文的规定一样,这些规则基本上不会出现在官方文档和正式记录上。比如说,在棒球运动中,从比分领先时不要盗垒,到跑垒员跑了第一时也不要放弃四坏球保送。对于圈外人来讲,这些东西很难懂,甚至觉得没什么意义。但是对于那些想成为 MVP 的队员来说,这些都是理所当然的。

软件开发,特别是开源软件开发中,也有一套不成文的规定。和其它的团队运动一样,这些规定很大程度上决定了开源社区如何看待一名开发者,特别是新加入社区的开发者。

按部就班,循序渐进

在参与社区之前,比如开放源代码或者其它什么的,你需要做一些基本工作。对于有眼界的开源贡献者,这意味这你需要理解社区的目标,并学习应该从哪里起步。人人都想贡献源代码,但是只有少量的人做过准备,并且乐意、同时也有能力完成这项艰苦卓绝的工作:测试补丁、复审代码、撰写文档、修正错误。所有的这些不受待见的任务在一个健康的社区中都是必要的。

为什么要在优雅地写代码前做这些呢?这是一种信任,更重要的是,不要只关注自己开发的功能,而是要关注整个社区的动向。

博闻强识,敦善不怠

当你在某个社区中建立起自己的声望,那么很有必要全面了解该项目和代码。不要停留于任务状态上,而是要去钻研项目本身,理解那些超出你擅长范围之外的知识。不要只把自己的理解局限于开发者,这样会让你着眼于让你的代码有更大的影响,而不只是你那一亩三分地。

打个比方,你已经完成了一个网络模块的测试版本。你测试了一下,觉得不错。然后你把它开放到社区,想要更多的人测试。结果发现,当它以特定的方式部署时,有可能会破坏安全设置,还可能导致主存储泄露。如果你将代码视为一个整体时问题就可以迎刃而解,而不是孤立地看待问题。这表明,你要对项目各个部分如何与其他人协作交互有比较深入的理解。让你的补丁填坑而不是挖坑。这样你朝成为社区精英的目标上又前进了一大步。

粗枝大叶,自寻烦恼

代码提交完毕后你的工作还没结束。如果代码被接受,还会有一些关于这些更改的讨论和常见的问答,还要做测试。你要确保你可以准时提交,努力去理解如何在不影响社区其他成员的情况下,改进代码和补丁。

和谐相处,助人助己

开源社区不是自相残杀的丛林世界,我们更看重项目的价值而非个体的贡献和成功。如果你想给自己加分,让自己成为更重要的社区成员、让社区接纳你的代码,那就努力帮助别人。如果你熟悉网络部分,那就去复审网络部分,用你的专业技能让整个代码更加优雅。道理很简单,顶级的审查者经常和顶级的贡献者打交道。你帮助的人越多,你就越有价值。

八面玲珑,面面俱到

作为一个开发者,你很可能希望为开源项目解决一个特定的痛点。或许你想要运行在一个目前还不支持的系统上,抑或你很希望改革社区目前使用的安全技术。想要引进新技术,特别是比较有争议的技术,最好的办法就是让人无法拒绝它。你需要透彻地了解底层代码,考虑每个极端情况。在不影响已实现功能的前提下增加新功能。不仅仅是完成就行,还要在特性的完善上下功夫。

糜不有初,鲜克有终

开源社区也有许多玩玩就算的人,但是承诺了就不要轻易失信。不要就因为提交被拒就离开社区。找出原因,修正错误,然后再试一试。当你开发时候,要和整个代码库保持一致,确保即使项目发生变化而你的补丁仍然可用。不要把你的代码留给别人修复,要自己修复。这样可以在社区形成良好的风气,每个人都自己改。


这些“潜规则”看上去很简单,但是还是有许多开源项目的贡献者并没有遵守。这样做的开发者不仅可以为成功地推动他们自己的项目,而且也有助于开源社区。

作者简介:

Matt Hicks 是 Red Hat 软件工程的副主席,也是 Red Hat 开源合作团队的奠基成员之一。他历时十五年,在软件工程中担任多种职务:开发,运行,架构,管理。


via: http://www.infoworld.com/article/3156776/open-source-tools/the-6-unwritten-rules-of-open-source-development.html

作者:Matt Hicks 译者:Taylor1024 校对:wxymartin2011qi

本文由 LCTT 原创编译,Linux中国 荣誉推出

背景

开源目前已经成为全球IT 界和互联网界一致推崇的文化和战略,而阿里巴巴作为国际顶级的互联网企业之一,在开源方面也一直秉持坚定而热忱的态度,积极地将其一些成熟或发展中的产品和技术以开源、开放的态度回馈到社区。

据目前已知的数据,阿里巴巴(以下简称阿里)已经贡献了上百款软件项目,其中去年到现在就开源了三十个左右的项目,得到了开源界和业界积极关注和参与,其中不乏重量级的开源项目。

不过,对于阿里的开源举措,业界也有一些不同的声音,比如有人认为阿里的开源项目虎头蛇尾,往往开源后就置之不理,活跃度走低,缺乏进一步的维护;也有人认为阿里的开源项目实际并没有得到社区的广泛参与和认可,更多还是阿里自身的员工在进行维护,社区并没有对这些项目提供有力的贡献,也没有衍生出重要的分支项目。

为了对中国企业在开源方面的情况进行深入的了解,从而对开源和企业之间的关系做一些定性、定量的分析,那么,让我们来具体分析一下阿里高调开源几年以来的开源项目的发展情况。

说明:我们本次的分析仅以阿里在 GitHub 上的开源项目的公开数据为基础,并不涉及到阿里在其它开源社区和代码托管网站的情况。

首先,我们在 GitHub 上找到阿里的开源团队,其在 GitHub 以团队形式出现的有几个,这里我们主要分析 https://github.com/alibaba和https://github.com/ant-design 两个团队的情况。

在上述的 alibaba团队中,我们可以发现,其名下的 代码库 repository 截止至本文写作时多达 133 个。但是有些项目仅仅是对上游项目的 复刻 fork ,并无或甚少进行修改提交,也有一些项目无实际意义,因此经过筛选后,我们得到了大约110 个项目。

而在 alibaba 团队中正式公开登记的成员(员工和前员工)有101 个,有不少参与贡献的成员没有公开登记,但是我们在做数据分析时,将邮件后缀域是 alibaba-inc.com、alipay.com、taobao.com、aliyun.com 的贡献者也归类为阿里员工。

阿里团队在 GitHub 旗下的项目数量和登记成员数在国内互联网公司来说,已经不算少了,虽然据统计,阿里团队所获得的 星标 star 数全球排名第12位,国内排到了第一,但是和国际上的一些开源领袖公司相比,还有较大距离。(注:如果累计 ant-design 团队项目的星标数,由于该团队旗下的开源项目包括了去年的一个重点项目 ant-design,其排名应该可以更高一些。)

在本文中,我们将从这些开源项目的各个维度的数据来进行分析,主要关注于以下两个方面:

  • 项目的活跃程度
  • 社区的参与程度

在分析之前,我们需要先了解哪些数据对我们来说是重要的,以及其背后反映的意义。

GitHub 上的开源项目指标

在 GitHub 上开源的项目有那些指标呢?可以反映出什么信息?

我们认为可以从以下几个指标进行分析:

1、项目的 提交 commit 数量、 分支 branch 数量、 发布 release 数量。

这代表了项目代码的活跃程度,其中提交数量是主要指标,而分支数量和发布数量虽然也可以侧面反映出代码的活跃程度,但是更多是不同的相关项目管理方式导致的。

2、项目的 拉取请求 pull request (PR)数量、 贡献者 contributor 数量、 问题 issue 数量。

这代表了项目参与者的参与程度,其中拉取请求数量是主要指标,而贡献者数量和问题数量与之正相关,可以反映出贡献者分布密度和项目反馈速度。

3、项目的 复刻 fork 数量、 星标 star 数量、 关注 watch 数量。

这代表了项目的受关注程度,其中复刻数量是主要指标,因为复刻一个项目往往代表了社区更多的参与意愿,并进而通过提交拉取请求、问题等进行参与,这也是社区生态发展不同的下游衍生版本的必由之路。而星标数量和关注数量,现在由于逐渐蔓延的 GitHub 营销潮流,其水分比较大,可以作为辅助指标参考。

4、项目的持续时长和最后更新时间。

项目的持续时长是从项目建立开始到最后更新时间之间的时长,这代表了项目的生存时间。如果最后更新时间是很久以前,则代表该项目已经陷入消亡中。

项目的提交数量

阿里开源的项目很多,但如同大多数企业组织一样,各个项目的活跃程度大相径庭。有的活跃项目得到了来自社区上万的 星标 star 、数千的 复刻 fork 乃至上千的 拉取请求 pull request ,项目本身也拥有数万的 提交 commit 乃至几十个 分支 branch ;而有的项目则数据寥寥,基本上陷入沉寂,其中有一半数量的项目最后提交于一年前,甚至还有 5 个项目的最后更新于 5 年前——基本上可以判定已经停止维护。

在统计时,我们发现一种情况,复刻或衍生的上游项目,会将上游的提交数量、分支数量等数据继承下来,因此在针对阿里对该项目的贡献和发展方面进行分析时,应该将这部分数据减去。这样的话,在阿里团队名下列出的一些知名项目,如复刻自 CocoaPods/Specs 的 Specs 项目拥有 14 万之多的提交数,但是阿里本身并没有对其复刻的版本进行任何提交;又比如阿里的重点项目 AliSQL 是基于 MySQL 官方版本的一个衍生版,因此其近 10万的提交数中绝大部分是 来自MySQL 发展多年来积累下的提交数量,本身阿里在将其衍生为 AliSQL 之后,只有 52 个提交数;同样 AliSQLBackup 的 10 万多个提交数也是来自于上游项目,阿里几乎没有做过更新提交,并且也停止维护两年了;因此,这些项目在统计时,我们会从阿里复刻或衍生该项目时开始计数提交数量。

当然,我们知道,仅仅以提交数来评估一个项目的活跃度是片面的,比如说,上述的 AliSQL 虽然只有 52 个提交,但是其由于开发模式和审慎态度的缘故,往往一次提交的代码量比较多,其中某次提交行数高达 5 万多行,而对上游 MariaDB 的贡献虽然只有三次提交,但是已经占到了总代码量的 1%。鉴于此,我们会不仅仅从提交数,还从复刻数、问题数等多个方面来综合进行观察。

下表是阿里旗下开源的提交数前十的项目:

项目创建天数提交数员工提交数社区提交数日均提交数
ant-design730天85672494597311.60
weex398天5779804497514.52
druid1987天4056106729892.04
fastjson1987天188383410490.95
LuaViewSDK461天1195118962.59
rax180天10017682335.56
tengine1848天9076112960.49
dubbo1758天414370440.24
freeline252天3772271501.50
anyproxy975天369352170.38

我们可从上表中看到,阿里旗下开源的项目提交数最多的是 ant-design 项目,这是蚂蚁金服旗下推出的一种 UI 设计语言,在开源两年来,得到了快速的发展。我们可以看到,其提交数约计比第二名高过 1/3,其中社区提交数是成员提交数的两倍,并且日均提交数也达到了很高的水平。

第二名是 weex 项目,这是一个用于构建跨平台移动应用 UI 的框架,前些时间刚刚捐献给 Apache 基金会孵化管理。项目开源于 2016 年底,目前已有近 6 千提交,其中社区提交数量是阿里员工的提交数的 6 倍!而且,日均提交数竟然达到了 14.52 个,其发展速度还要超过了第一名 ant-design。这代表了社区强烈的参与意愿,并且该项目得到了社区的广泛应用。

第三名是 druid 项目,这是一个是“为监控而生的数据库连接池”,自称“是 Java 语言中最好的数据库连接池”。采用 Java 开发,也是阿里重点发展的项目之一,2011 年底开源发布,目前已经有 4 千余个提交,代码迭代很快。而且,非阿里员工的提交数量是阿里员工的提交数量的三倍左右

应该说,这些排名较高的项目的活跃度都不错,其中只有一个项目是更新于半年前的,其它的项目都在近期有不同程度的更新维护。

从上面的项目的提交来源看,提交数最高前三名来自社区的提交要超过了阿里员工的提交,甚至远远超过,这说明这三个项目得到了社区的普遍支持,我们在后面分析复刻情况时也可以看到,这两个项目的复刻数都很高。而之后排名的项目,却呈现了另外一种趋势,即来自阿里员工的提交数要超过或远超来自社区的提交数,相应的表示出这些项目在社区的受欢迎程度要差一些。

从整体的这些项目来看,各个项目的提交数明显呈长尾样分布:

项目提交数分布

而且,我们可以看到,从提交数排名第 8 位的项目开始,提交数呈断崖式下降,但是整体的以正态分布呈现:

项目提交数分布(去除前 7 名)

从上述分布上来看,阿里旗下的开源项目的发展情况正常,既有活跃项目,也有消亡项目。

我们判断,阿里对其开源项目的管理处于自由生长状况,并没有从统一管理的层面来督导、辅导各个开源项目的发展,也没有对陷入消亡的项目进行进一步处置和收尾,也就是说,一些烂尾的项目并没有进行妥善处置。

为了验证这个结论,我们来看一下阿里旗下开源的项目的最近更新时间。

项目的最近更新时间

抛开一些项目内的无关紧要的更新(如修订一些 README,pom.xml 等),我们发现这 133 个项目当中有 60 个项目更新于一年前,其中更新于 4 年前及以上的有 30 个。可见有不少遗留项目缺乏处置。

当然,根据上图也可以反映出近年来阿里的开源项目整体的发展趋势要超过过去几年。

项目的拉取请求数和问题数

GitHub 开创性的使用了 拉取请求 pull request (经常简称为 PR)的方式来为开源项目提供社区协作支持。无论是项目成员还是外部合作者,以及偶尔的关注该项目的贡献者,都可以通过发起拉取请求来给某个项目提交补丁,项目维护人员可以对该拉取请求进行审核,如果审核通过,就会“拉取”该合并请求到项目中,从而将贡献者提交的代码融合到项目代码之中。

作为社区贡献者,对一个项目发起贡献的主要方式就是给该项目发起拉取请求。虽然也有不少项目要求几乎所有成员都必须以拉取请求的方式来提交其代码,而不允许直接提交到仓库中,但是通常而言,一个项目的拉取请求数可以从侧面反映出一个项目的社区(外部)参与程度。

而对一个项目作出贡献的方式不仅仅是贡献代码,还有对项目中发现的问题、缺失功能所提交的报告也是一种重要的方式,这些信息在 GitHub 中统一被称之为 问题 issue

每个拉取请求和问题,都会被项目维护者进行审核,并进行处置。比如对于拉取请求,可以接受、可以拒绝;对于问题,可以回复、也可以忽略/关闭。

一般来说,活跃的项目其拉取请求数量和问题数量也会越大,但是我们这里不去做这些数量的排名,我们感兴趣的是,这些拉取请求和问题中,开放和关闭的比例情况。

如下表,我们列出了拉取请求未接纳比例最高的前十名(这里略去了拉取请求数低于10的项目)。

项目开放 PR 关闭 PR PR PR 开放比
LuaViewSDK831172.73%
DataX15163148.39%
dubbo577112844.53%
RocketMQ18325036.00%
nginx-http-concat6121833.33%
jstorm17537024.29%
anyproxy9303923.08%
atlas4172119.05%
otter111128.33%
nginx-tfs113147.14%

我们可以看到,这些项目中拉取请求未接纳的比例最高的有的高达 70% 以上,当然,另外一方面,我们也看到了这些项目的拉取请求数都不高。这可以反映出该项目的社区参与积极性不高。

但是几个提交数比较高的项目,除个别情况外,其拉取请求未接纳的比例都很低:

项目PR 开放比提交数
ant-design0.10%8467
weex1.03%5779
druid0.50%4056
fastjson0.00%1883
LuaViewSDK72.73%1195
rax3.82%1001
tengine6.83%907
dubbo44.53%414
freeline0.00%377
anyproxy23.08%369
terraform-provider0.00%355

这说明这些项目的活跃不是没有道理的。

究竟是由于社区参与积极性不高导致的未接纳比例高,还是反之,我们认为或许是彼此互相影响导致的。

再让我们来看看问题数。

项目全部问题开放问题关闭问题问题开放比
oceanbase12120100.00%
mirrors4645197.83%
ons1211191.67%
simpleimage1513286.67%
LVS2521484.00%
tfs2319482.61%
taokeeper3123874.19%
nginx-http-concat44291565.91%
dubbo42327315064.54%
AndFix34121912264.22%
DataX1831137061.75%

我们可以看到,有些项目,居然所有的问题都没有处置,比如 oceanbase,甚至连被寄予厚望的 dubbo 和 DataX 也有相当比例的问题没有解决——难怪有人对阿里开源项目烂尾颇有微词。

那么我们同样来看看几个活跃项目的问题解决比例:

项目全部问题问题开放比提交数
ant-design58601.69%8467
weex297712.83%5779
druid167225.90%4056
fastjson113723.13%1883
LuaViewSDK7625.00%1195
rax2186.88%1001
tengine88417.99%907
dubbo42364.54%414
freeline7583.30%377
anyproxy16137.27%369

我们可以看到,这些活跃项目的问题解决比例还是比较高的。

项目的复刻数

下面我们来看看这些项目的复刻数。前面我们说过,开源项目的复刻数代表了(外部)社区参与该项目的积极性。因为复刻一个项目的意图可能有以下几种:

  • 保留(冻结)该项目当前的代码以做将来之用,以避免该项目出于种种原因被删除、关闭。
  • 要对该项目提交补丁(拉取请求),需要复刻一份,完成修改后发起拉取请求。
  • 意图衍生该项目,通常是为了发展不同的方向。
  • 只是为了方便找到该项目?可能更习惯这种方式,而不是加以星标、关注等方式来标记该项目。

无论是哪种情况,我们可以看到,复刻这种行为基本上可以代表复刻者对该项目的积极参与意愿。

以下是阿里开源的项目中复刻数最高十个项目:

项目创建天数复刻数日均复刻数PR 全部问题
dubbo1763天79464.51128423
fastjson1992天30611.541711137
druid1992天29461.488011672
ant-design730天26593.6314135860
RocketMQ894天21082.3650479
weex402天19184.7713602977
tengine1853天15320.83571884
jstorm1322天15311.1670485
AndFix580天13262.297341
canal1555天11680.7542291

从上面我们可以看到,复刻数最高的项目是一个名为 dubbo 的分布式、高性能的 RPC 框架,是阿里巴巴 SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo 的复刻数远高于第二名的 fastjson,但是其相应的拉取请求数和问题数却不相称的低——这代表了什么?社区或业界觉得这个项目有价值,但是鲜于应用场景,也缺乏参与回馈的能力(或动力?)。

而第二名,fastjson 却显著的问题数比较高,这表明社区在大量使用该项目,因此产生(发现)的问题或需求也比较多。但是其拉取请求数却没有与问题数相应的提高,侧面说明了该项目本身参与开发的难度较高。

第三名 druid,是一个 java 的数据库连接池,其问题数和拉取请求数都很高,我们认为它的活跃度和社区参与程度都很健康。

第四到六名 ant-design 、RocketMQ 、 weex 都是阿里重点发展的项目,并且后两者都捐赠给了 apache 基金会孵化管理,而且 weex 的发展更是后来居上,就拉取请求和问题数来说,weex 的发展更健康一些。

那么,结论呢?可以大致的看出,复刻数较高的项目其日均复刻数也存在较大的波动,说明其发展速度不一,但是复刻数可以作为一个项目是否健康发展的指标之一,但是该指标应和拉取请求数和问题数综合来看。

项目的星标数和关注数

对 GitHub 上的开源项目的观察久已有之,但是人们一般习惯于按项目的星标数来进行排名。不过,现在随着 GitHub 的日益流行,星标这种成本低廉简单操作已经逐渐失去了作为排名依据的意义,以至于一些 markdown 项目(也称为 awesome 项目)虽然并无代码,仅仅一篇以 markdown 格式提交的资源大全,也往往取得了不错的星标数。我们认为,对于开源项目,尤其是特指代码方面的开源项目时,其星标数并不应该与那些 markdown 项目进行横向比较。当然,同样作为开源代码项目,星标数还是有一定的参考价值的。

我们来看看阿里旗下开源项目的星标数前十的项目:

项目创建天数星标数关注数日均星标数
weex402天13864199234.49
ant-design730天1274568017.45
fastjson1992天86749454.35
dubbo1763天815917654.63
druid1992天601411253.02
tengine1853天53847782.91
AndFix580天51674388.91
atlas48天406829184.75
RocketMQ894天36527274.09
freeline257天351119513.66
dexposed657天34753925.29

啊哦,不出意外,这些项目基本上还是和复刻数排名比较相近。Weex 在该项排名中又取得了第一。令我们比较感兴趣的是,排名稍后的几个项目的开源时间并不算长。让我们来以日均星标数排名看看,这回我们多取几名:

项目创建天数星标数关注数日均星标数
atlas48天406829184.75
vlayout49天325012066.33
UltraViewPager19天9032347.53
weex402天13864199234.49
Tangram-iOS19天4552623.95
Tangram-Android19天4013021.11
LazyScrollView46天8423018.30
ant-design730天1274568017.45
rax185天275511914.89
freeline257天351119513.66
ARouter124天15516012.51
AndFix580天51674388.91
BeeHive259天1908987.37
AliSQL264天18773757.11
dexposed657天34753925.29
dubbo1763天815917654.63
fastjson1992天86749454.35
RocketMQ894天36527274.09
LuaViewSDK466天18211833.91
HandyJSON209天810413.88

发现什么没有?日均星标数的前几名,或者说大多数都是相当年轻的开源项目,其星标增长速度要让几个已经开源了几年的项目瞠目其后。我们判断,这说明阿里现在在开源方面已经处于高调宣传模式,对于新开源的项目,都有一波持续和明确的传播意图。但是我们认为,作为一家商业企业,这也代表了阿里已经将开源作为一个主流战略、也是其企业文化和品牌形象推广的重要方面,那么是不是代表着阿里以后的开源项目的支持力度和维护热情会更高、更持久呢?

总结

以上,我们通过对阿里旗下开源的多个项目的各个指标进行了横向和纵向的比较,从中也观察到了一些有趣的现象。但是这些数据并不能完全的反映出一个一致的结论,只是,从整体来看我们认为,阿里巴巴旗下的开源项目,正在以更快、更主动的方式在发展,至于说是否还会出现之前的那种开源之后被抛弃的情况,下定论还为时尚早。这或许要看阿里的开源委员会是否能够制定更宏观的发展战略而定。

不过,无论如何,我们欣喜的看到,阿里在践行开源理念、积极主动的拥抱、回馈开源方面,取得了瞩目的成就。我们也期待国内的更多互联网企业、IT 企业可以在开源方面有更多的实际行动,让中国这个世界上除了美国之外第二大的互联网大国在开源方面也取得相应的成就。

昨天发布了一则《阿里云成为中国唯一一家Linux 基金会的金牌成员》的新闻,引来了不少关注和议论。主要的议论有几个方面:

  • 阿里云支持开源和 Linux,值得赞
  • 阿里云有钱,有钱谁都能当上金牌会员,乃至于白金会员
  • 别的公司早就是白金会员了,要继续努力

对于这样的观点和评论,基本上还是在我的意料之内。其实在编发这篇新闻稿之前,老王也对中国的科技公司参与、赞助国际性的开源组织的情况有过一些了解和思考,借着这个机会,想和大家探讨一下。

国内科技公司参与国际性开源组织已经成为了趋势

不知道从什么时候开始,国内的科技公司,已经开始或低调、或高调的加入一些国际性的开源组织,比如说:

可以看出,近些年来,中国国内的科技公司纷纷注意到开源生态的发展,并主动积极的拥抱开源、加入并影响开源的发展。

企业加入国际开源组织能做什么?

作为营利性机构,企业加入开源组织必然有其商业上和战略上的考量,大致来说,会有如下几点:

  • 回馈开源社区。在开源文化的影响已经深入到世界的各个角落的今天,很多企业的发展都极大地得益于开源文化、开源生态和开源技术的帮助,因此,就如阿里云资深总监李津说的,“参与 Linux 基金会……是对 Linux 带来的帮助表示感谢”。
  • 扩大在技术领域和开源领域的影响力,吸引更多的人才。成为顶尖的开源组织的成员,并积极参与到开源事务当中,将企业的形象、实力和愿景传递给更多的人,也会吸引更多有志于该领域发展的尖端人才加入。
  • 影响开源生态的决策和标准制定。各种开源基金会、组织掌握了该项技术和生态的发展,会制定和规划相应的发展路线和行业标准,因此,加入到开源组织中,能够充分地结合企业在技术研究和产品发展上的路线,与整个开源领域中的相关企业、组织达成共识,尽早掌握发展的制高点。

开源组织为什么需要企业会员?

开源组织是开源生态里面独特的一种现象,这种情况和工业界的各种行会不太一样。它既沿袭了传统的行会是由企业组成的特色,也有主要由个人成员(非雇员)组成的组织,但是,作为行业性组织,往往还是由企业组成的。

开源组织的成员情况分为三种情况:

  • 仅由个人会员组成的开源组织,如自由软件基金会(FSF)、Apache 软件基金会(ASF)等。
  • 仅由企业会员组成的开源组织,如云计算基金会(CNCF)。
  • 既有企业会员,也有个人会员的开源组织,如 Linux 基金会、OpenStack 基金会等。

不过,即便在拥有个人会员的开源组织当中,其个人会员的影响力也往往低于企业会员。甚至有时候影响力无足轻重,比如说,Linux基金会就曾经将由个人会员所推举独立董事的权利取消,转而由董事会成员推举。

显然,对于很多开源组织来说,影响力更大、能提供更多资金支持的企业会员是其发展中不可或缺的一部分。

基本上,开源组织吸收企业会员的原因有:

  • 开源组织本身的运营需要资金支持。开源组织,是以非营利组织的形式出现的,本身的运营并不以盈利为目标,其所需的资金来源于会员会费、民间赞助、国家资金和运营营收等方面。不同的开源组织的资金来源不同,有的主要依赖于赞助,有的则主要依赖于会员会费。
  • 开源组织需要吸收相关企业的建议和意见。事实上成功的开源组织无一不是反映了行业内成员的发展诉求,并能协调和规范发展方向,因此,吸收主要企业的参与,能够保证开源生态的可持续发展。
  • 开源组织的决策和标准需要企业的推动和落实。开源组织诞生于社区,成长于企业,开源生态并不是自行设计愿景就可以理想化地发展的,因此,开源组织的很多决策和制定的标准,需要落地和切实发挥影响,就离不开企业的支持和拥护。

是会费的多寡决定了不同的话语权?

事实上,作为一个健康发展的开源组织,其正常的运营费用从来不是一个问题。因此,并非是谁交钱多,谁就是领袖。

不是所缴纳的会费决定了会员级别,而是综合了企业对包括代码、标准/规范、人员、资金在内的贡献决定了会员级别。

作为开源组织,其所需要企业会员发挥的作用包括:

  • 贡献代码。主要是企业将自己生产的重要代码贡献到开源生态中,从而促进整个生态的发展。
  • 贡献标准和规范。企业已经成熟的标准可以提交到开源组织当中,在经过审核、调整之后,取得共识,从而成为开源组织和业界的标准。
  • 贡献人员。企业甚至会专职雇佣一些人员,其职责是为开源组织工作,包括提交代码、参与开发/维护、参与开源组织运营事务等工作。
  • 赞助资金。为开源组织提供运营和雇员所需要的资金支持。

开源组织收取的费用都作何用途?

国际顶尖的开源组织大多注册在美国,属于非营利机构,在美国属于一种机构注册形式。其认定和税务豁免需要经过税务部门的每年审核(501(c)(3)非营利身份),因此,其财务报表是公开的。

根据之前 ITworld 的一份数据,它查询了 13 家开源基金会的 2010 年财务报告和 5 家的 2009 年报告,显示

  • Linux 基金会在 2010 年收入 961 万美元,支出 908 万美元,净收入 53 万美元,收入最高的是执行董事 James Zemlin 36 万美元;
  • 自由软件基金会 2009 年收入89万美元,支出 108 万美元,薪酬最高是执行董事 Peter Brown,约 8 万美元;
  • GNOME 基金会 2009 年收入约64万美元,支出 38 万美元;执行董事 Robin L. Peters 收入 13 万美元;
  • Apache 软件基金会收入约 54 万美元,支出约 41 万美元;
  • Mozilla 基金会收入 193 万美元,支出 326 万美元,Baker 和 Eich 收入 59 万美元。

从这个数据中,我们大概可以了解到这些开源组织的收支情况。也可以看到,其实相对来说,其个人雇员的收入也并不算高。此外,除了雇员薪酬之外,开源组织的其它开销还有办公费用、活动费用,甚至还有诉讼费用等等。

应该如何看待国内企业加入国际开源组织

首先,我觉得应该对国内企业有意识地去参与、赞助开源组织表示支持,这标志着国内企业逐步在国际舞台和行业内发出了自己的声音,甚至可以主导部分发展方向。

其次,我们也看到,目前能够比较广泛地参与到开源组织的活动中,并持续支持开源组织的国内公司还不够多。典型的企业有电信级企业,如中国电信、中国移动(中国联通缺席)、华为、中兴等;互联网企业,尤其是将云业务作为主要发展方向的企业,比如阿里巴巴集团及其旗下的阿里云、DaoCloud、EasyStack 等,但是BAT 中除了阿里巴巴之外的另外两家表现的就不够积极。

而且,国内的企业所关注参与的开源组织还比较少,主要集中在几个大型的开源组织上,相对来说影响力还不够广泛。

当然,作为企业,是否加入开源组织,以及加入哪些,是需要根据企业自身的发展情况来决定参与程度的,毕竟,参与开源组织不仅仅是缴纳会费,更多还要付出人员、技术,承担不仅仅是好处,还有责任。

此外,企业也在参与开源组织方面存在一些短板需要补足。比如说,需要有优秀乃至于领军型的技术人才代表公司参与到开源组织中;也需要将公司发展战略和开源生态做良性的结合,将开源文化和企业文化达成融合;更需要将企业的营利本质和开源的公益性质取得一个平衡。

结语

作为一个参与开源文化,并受惠于开源生态的技术人,我对阿里云以及其它的科技公司能主动参与到开源组织的建设和开源生态的发展中感到欣喜。希望国内更多的企业能够积极关注开源,参与到开源之中来,并针对企业自身的情况制定开源战略。