开源是我在 IT 行业中遇到的最有趣的事情之一。它本质上是一种运动,将人们聚集在一起做一个产品。他们通常免费做这些事情,特别是在项目的开始阶段,然后负责维护,让其他人可以免费使用。


我倾向于认为,如果有更多的行业像软件行业一样采用开源模式,那么事情会变得容易得多。不过话说回来,我们要讨论的不是这个。事实上,开源运动并不像人们想象的那么完美,因为参与开源的是人,而人是不完美的。


在开源的发展过程中,人们对它产生了很多误解。这些误解有很多是来自开源项目的用户(即他们只是开源项目的用户,而非贡献者),或者是来自那些在错误的时机参与开源项目的人,从而破坏了原本精彩的开源体验。


我写这篇文章的目的是讨论 IT 行业中有关开源的一些最常见的误解,作为新进者的你就可以自己决定是否要加入这个运动。


本文最初发布于Medium(《The Biggest Lie in Open Source》),经作者授权,由InfoQ翻译并分享。

成本是免费的,那么使用也必须免费


谁都知道这个,对吧?开源是免费的。我们可以免费从 GitHub 下载开发库,作为开发者,我们也可以在那里免费发布项目。


所以,只要我们有电脑,就可以写代码,并免费与整个行业分享。


错了。


我们倾向于将成本与资源(通常是物理资源)联系在一起,但除了电脑,我们还需要什么资源来生产和维护开源软件呢?


时间。


没错,你的时间就是一种资源。事实上,这是你拥有的最有价值的资源之一,而你却在考虑免费把它送给别人?你在开源项目上花费的时间可能是你的雇主没有给你补偿的那部分(除非你是在为他们开发这些项目)。所以,如果你的时间没有换来收入,那你换来了什么?你和爱人相处的时间?你用来放松的时间?几个小时的睡眠?锻炼的时间?


时间是宝贵的,参与开源项目的每个人的时间也都是宝贵的。他们愿意牺牲自己的时间开发项目给你用,但这并不意味着你有权要求你想要的任何东西。我看到有人要求贡献者提供 24 小时支持,或者因为他们自己的(私人)项目需要某些功能就要求贡献者接受他们的要求。这样的例子不胜枚举。


根据项目的不同,既有一个人的团队,也有由委员会领导的大型团队,他们花费了时间和资源(是的,有时他们需要在这些项目上花钱),让其他用户可以免费使用他们开发的库或框架。当你以后想要抱怨开源项目时,请先想一想项目维护者付出的成本吧。


开源不会带来收入


开源软件是免费的,因此,它的维护者和作者不能靠它谋生。


错了。


乍一看,开源软件对用户来说是免费的,但要断定这不能作为一个有效的收入来源还为时过早。


就像任何数字产品一样,赚钱完全取决于你的商业模式和营销策略。如果你对如何基于开源项目赚钱感兴趣,下面是一些建议,供你参考。


提供专业服务


这是最常见的一种方式。之前说过,人们倾向于认为,既然你已经开发了一个项目并向全世界发布了,那么你就要 24 小时提供支持。这绝对是一个完全不同的工作领域,既然如此,为什么不收费呢?


事实上,你还可以收取培训费用,甚至为那些想要使用你的免费产品的公司提供支持。这些就是我们所说的专业服务(为使用你产品的公司提供服务)。


有一些大型的开源项目就是这样做的。例如,RedHat、IBM、Hortonworks 和 Percona。


提供相关内容


你看到过(甚至是读过)多少本有关 React 或 PHP 的书?这些书都不是免费的,不是吗?


如果你成功地构建了一个人们喜欢和使用的开源项目,那么你就可以通过给他们提供相关的学习内容来赚钱。这与专业服务模式非常相似,但你需要亲自参与(从而可以收取更高的费用)。有了这些东西,你就可以为非公司用户(比如想要使用你的代码的开发者)构建更便宜的替代品。


即使你不是项目的作者,你也可以借助他们的项目来获益。你正在围绕一个开源项目(只是它们不是你自己的项目)构建产品。


我们说的是撰写与开源项目有关的书,为 Udemy 等平台创建视频课程,甚至是撰写有关这些开源项目的赞助性博文。为什么不呢?有时候,开源项目作者也愿意付钱让你为他们的项目写书或文章。


捐赠


你可以从捐款者那里赚到钱。不要害怕向别人要钱。只要做得对,这绝对是一个有效的收入来源。


如果你已经构建了一个正在被大型社区使用的项目,你会对结果感到惊讶。比如 Git 这个项目,它确实收到了来自对它感兴趣的人的捐赠。


这与项目的影响力和它背后的社区有关。如果它足够大,那就有可能从中赚到钱。


还有很多其他方法可以让你从开源工作中获得收入(https://www.welcometothejungle.com/en/articles/btc-money-open-source),只要你开动脑筋。


参与开源项目才算得上是开发者


我们都知道,只有为开源做贡献的开发者才算得上是真正的开发者,对吧?


错了。


能够为开源做贡献(无论是以参与项目的形式,还是基于别人的项目创建 PR)是一种特权,而不是获得一份开发者工作或被认为是开发者的一种要求。


是的,开源项目的贡献者确实能够从他们的工作中受益,因为他们的工作是公开的,而这反过来也能让行业和潜在雇主看到他们的项目,并对他们的技能有一定程度的了解,但也有一些优秀的内部开发者无法从这样的事情中受益。


或许他们也可以把时间用在开源项目上,但也许他们使用时间的方式与你不同,因此无法参与开源项目。


我在这里要说的是,一些公司甚至是一些开发人员认为,如果你参与了开源项目,你就会是个出色的开发者。否则,你就是一个没了谷歌就写不出简单 if 语句的公司蛀虫。


这是不对的,所以别再这么做了,好吗?


维护开源代码很容易


关于这一点,我能说些什么呢?维护任何类型的开源项目都不是一件容易的事。


当你在开发闭源项目时,你可能需要与四到五名其他开发者共享你的代码。当你维护的是开源项目时,整个行业都可以对你的代码进行评审,并公开指责你的不对。


有很多文章指出,开源的一个好处是迫使你写出干净和可维护的代码。


回到重点上来:维护有数百万开发者正在使用的代码是一项重大的责任。即使整个社区都在努力提供帮助,你又如何能够确保他们可以达到与你相同的标准?如何确保等待你评审的 10 个 PR 已经考虑到了所有潜在的安全风险?


如果你想要维护好开源项目,这绝对是一项非常困难的任务,并且很快会让你精疲力尽。2018 年,一名黑客获取了一个开源代码库的控制权,并加入有害代码来窃取个人信息。黑客之所以得逞,是因为这个开源项目的所有者和维护者工作太累了,没有办法一直看着 PR,他们决定把这个项目交给其他人。


他们太累了,总得要有人接替。


开源项目很容易参与


开源项目有很多,所以对某些人来说,参与开源肯定很简单,不是吗?


错了。


当你想要为开源项目做贡献,要找到一个需要帮助的项目,并以项目维护者能够接受的方式提供帮助,这并不是件容易的事。一些项目公开声明他们正在寻求帮助,甚至为新进者提供了一些待解决的问题(以 Node.js 为例,它将这些待解决的问题标记为“需要帮助”或“第一个问题”,这样你就知道从哪里开始)。


当然,有些项目不会这样做——要么是因为他们不寻求外部的帮助,要么是因为他们没有与希望参与开源项目的人打交道的经验。


另外,如果你想要为自己的开源项目寻求帮助,那就更加困难了。如果你在社交媒体上有很多粉丝,或许能够找到人。否则的话,你就得依赖项目的受欢迎程度以及其他人对它的感兴趣程度。


你可以随意拷贝和使用开源代码


毕竟开源代码是免费的,不是吗?


不,不完全是这样。


所有人都认为,如果代码是免费的,那就可以用它做任何事情,包括复制代码,换个名字重新发布,甚至把功劳占为己有。


这就是为什么要有许可协议这个东西。每个希望被采用并达到某种流行程度的开源项目都应该考虑选择一种许可协议。


许可协议限定了人们使用、更改和重新分发开源代码的方式,从而保护你和你的用户免受可能发生的任何非法行为的影响。


与普遍的看法相反,即使没有许可协议,也并不意味着你可以用代码做任何事情。如果你在 GitHub 上发现了一个公开项目,它在服务条款中已经有一些限制和暗示了,这些限制和暗示是经过项目作者同意的。因此,作为一个用户,如果你发现了一个没有许可协议的项目,就要看一下它的作者是不是不打算与任何人共享代码,如果是,你就不能使用它。


如果你是项目的作者,并且想要了解哪种许可适用于你的项目,请参考“如何选择许可”(https://choosealicense.com/licenses)。


对于所有的开源项目来说,指定许可协议应该是强制性的。如果你想要参与或使用开源项目,应该注意与所选许可相关的隐式限制。


总结


开发者对开源软件有很多假设,因为我们通常不会为开源软件付钱。但这些假设是错误的,并且影响到了项目本身以及项目作者和维护人员的生活。


原文链接:


https://medium.com/better-programming/the-biggest-lie-in-open-source-de38f71aa88c