Article / 文章中心

2022年,你还要做开源软件么?

发布时间:2022-01-07 点击数:276

不平凡的2021已经悄悄走远:依旧蔓延的疫情一直到年末的 Log4j 的重磅炸药,基本上各个大厂都在连夜整修系统来填补安全漏洞。Log4j 目前使用在百万台机器当中:它默默的记录着系统日志,帮助开发者找到错误原因,基本上是一个不可或缺的工具。

可是,作为使用量这么大的包,真正赞助它的只有3个人。维护基本上靠社区同学加班加点地在业余时间完成。你可能会好奇,既然这么多人用,为什么开源软件仍旧没有获得资金?目前开源环境的生态是怎么样的?从企业的角度出发来深度剖析下面两个问题:


  • 为什么企业要把程序开源?

  • 为什么企业要继续投入开源以及发展中的困境


企业中一切软件的开发都是以营利为根本目标进行的,无论开源与否。


许多难以理解的行为和结果,如果从这一点来出发那么也说的通。


为什么企业要把程序开源?


第一种原因便是因为无人维护,同时感觉继续投入也没有太多意义,索性丢出来造福社区。比如大名鼎鼎的 Hadoop 当年也是因为 bug 太多,做不下去了,索性交给社区看看有没有大佬能修一修然后所有人一起用。然后它在一群开发者手里变成了现代分布式计算的基底。这样做的好处是能够给企业减少维护成本,同时也能够给公司博得一个开源创新的好名声。


第二种原因是为了减少维护成本。和第一种原因的区别是企业并没有放弃这个软件。这类软件相对来说开发比较成熟,在企业中已被广泛使用,但是因为没有太多可以开发的空间,索性让社区来维护一起找 bug。这种也是目前很多公司选择的模式,但是仍以大厂居多。它可以帮助公司发展一个生态圈,让更多的开发者认同公司理念,甚至变成一个信仰。


第三种原因是为了迅速占据市场,利用开源软件免费的优势来发展商业。这一点在大厂和初创公司中都很常见,首先先以免费的优势迅速打入市场,扩大用户使用量。在后期以自己的架构和平台推出收费版来帮助用户减少开发和维护成本。这类软件往往都还在开发之中,可以同时发展社区以及减少开发成本实现双赢。但是这条路本身不是很好走,因为程序本身不成熟带来的就是较高的学习以及开发成本。如果能够坚持下来做完,可以实现长远的营利。


第四种原因是因为本身开源软件也是服务于公司的某个业务。推出一份官方的使用套件可以帮助用户减少开发成本:通过集成各类软件和代码,方便使用的客户来构建自己的业务逻辑。严格意义上来说,这不算是真正的开源软件,尽管代码全部公开,实际上还是服务于公司可以赚钱的一系列服务。最常见的就是各类教程代码 repo,以及工具接口 repo


为什么企业要继续投入开源?


其实在没有 github 前,大家做程序一般就是做体验版和收费版。比如 WinRAR, 有收费版和体验版的区别。时至今日,依然有很多软件选择了这条路。后面公司发现,如果把软件开源,大家既能够使用体验版的内容,同时也可以帮忙一起修 bug。那何乐而不为呢?很多初创公司选择了这条路,通过开源来不断完善自己的产品。同时开发一条相对成熟的支线来完善自己的收费版本。


很多大厂投入开源的软件的原因是它可以帮公司赚钱,如果不投入人力在里面,自身的服务也会受影响。一个开源项目,往往很多公司都在积极投入在里面,毕竟是有付费用户在不断使用的。但是带来的问题就是,当初开源的公司本身并没有获得大部分利润。利润都被本身自带流量的平台拿走了。


另一个做开源软件的原因是为了能够将用户引流到自己的生态圈。当红帽宣布自己不再出免费的系统版本后,各个大厂纷纷跳出来说自己也能提供免费的版本。这样做最大的好处是减少用户日后的迁移成本,同时自己可以在里面添加有利于自身生态的组件。比如一个用户在使用一个大厂推出的 Linux OS 很久以后,如果以后考虑上云,肯定会首选对这个 Linux 系统支持最好的大厂:因为自己无需更改任何配置,直接开一个实例便可以完成。


在使用 TensorFlow 的时候,当你在运行训练和推理任务时,会有 log 建议你使用 GCP 中的相关服务来实现加速。比如某些硬件厂商推出自己的开源深度学习框架以及系统,也是为了让用户进入自己的生态圈。这样通过一系列的操作,让用户使用开源软件的过程中逐步去购买对应的收费服务以及产品。


开源的困境



开源永远都是一把双刃剑。开源的好处是能够扩大使用量然后迅速占据市场。但是它会让同行也很快切入市场并取得领导地位。


尽管可以通过一些 License 来限制公司商用的权利,但是依旧没有办法从根本上限制企业对于它的使用。如果收费版本和开源版本的距离不大,很多小公司往往难以在这个过程中获得很大的利润。但是没法获得很大利润不代表没有利润,毕竟用户量多了,会有一些客户选择收费版本来减少自己的维护成本。


其实本身把一款开源软件做好做强也是很难的。公司本身可以作为生态的助推器。其他公司也可以为自己的开源产品投入大量广告以及宣宣传,花钱买活动,做教学和买 SEO 来吸引人群。甚至也可以尝试加入一些知名社区来发展自己的生态,比如 Apache Software Foundation,通过社区的知名度和企业联系参与到开发中。有的同学可能会觉得,酒香不怕巷子深,真的厉害的软件自己应该就能火起来,不需要宣传。


但是现实情况是,如果没有一个群体在后面投入人力和宣传,一款软件真的很难进入千家万户。毕竟没有哪个企业愿意去使用一些没有庞大用户群的软件,甚至都没有听说过这个软件。


很多优秀的开源软件本却因为各种原因停止在起步阶段。例如,投资人信心不足导致的资金链断裂,核心成员离职等都会击垮团队。


在大厂中,如何定义一个开源软件的投入其实很简单:如果把赚钱和构建企业生态圈作为最终目的,那么用量就是核心 KPI。


像 ONNX,如果内部使用的客户量不断增长,公司就有继续维护它的理由。但是公司往往希望能够在短时间的大量投入获得大量回报,即做出指数型的增长。


事实上,任何事情都会有一个学习的过程,有的软件学习门槛低,可以快速上手,那么它确实可以在短时间成为大家都在使用的软件。


有的软件本身作为一个中间件或者是工具,那么就很难在短时间内积累大量的用户。但是随着时间推移,用户量的增加会逐步在潜移默化中加速产品的使用量。这个过程中另一个痛点就来了,如何知道有多少用户使用呢?只能通过来提问题的开发者来知道都有谁在用。但是如果软件做的太好了也不会有用户来提问题。


这种情况下,大厂也没有办法做出准确的判断,这个软件到底是成功还是不成功。当然如果算公司内部用户也好,毕竟在公司内部还是有一些方法来确认是否有人使用的。但是如果公司内部的用量并不算在 KPI 里面,其实开源开发团队真的会过的十分艰难:项目很有可能就切断经费了。


目前如同 Log4j 的软件不在少数,作为开源软件中的佼佼者,用量大到恐怖,但是鲜有人真的愿意去投入资金来支持项目本身发展。它们往往本身并不出彩,不能成为独当一面的一个服务或者前端。但是却被用在了各个软件和系统当中。很多时候,都只是这个软件的开发者们以自己的情怀在不断维护,但是这又能坚持多久呢?


之前也有的软件开发者发声,说做开源产品养不活自己,只能去找工作来养活自己。所幸目前 GitHub 有了打赏机制,开源开发者总算还是有一些方式获得支持和收入。


开源的级别


开源也是有级别的,区别开源级别最简单的方式就是看它的License。


GPL级:GPL 证书是由 GNU 社区发起的,属于目前最为极端的开源。大概的意思就是,用户可以用这个软件,但是用户自己的软件也必须开源,而且附带有此软件的所有其它软件也必须一起开源。在这种情况下,基本上大家都得公开代码。一般的商用软件往往会避免涉及到GPL的开源软件,因为太过于极端了。当然也出现过偷偷使用后来被发现举报要求公开源代码的案例。


Apache 2.0级:Apache 2.0是ASF提出的新一代证书,与此级别类似的还有 BSD,MIT 系列。基本定义就是你可以随便使用,商用也可以,但是要求附带软件的证书在你自己发行的软件里作为公示。相比于 GPL。Apache 系列证书比较温和,也是主流开源软件采用的证书。它也没有强迫开发者必须开源自己的代码。


公司自己的证书级:每个公司也会有自己的证书来告知使用者的使用范围。比如使用时需付费给公司,或者可以学术开发用但不能商用... 这种往往只是公示代码,但不代表着你可以随意使用,这种情况需要仔细去研读内容和条款,确保用户是以合理合法的方式使用这款软件。


其他类型证书:当开发者公开了一些图集、著作、音频和视频等内容,也会有对应的证书来限制使用。


尾声


开源软件的开发与拓展往往都意味着大量的投入,无论是金钱还是经历。如果想要做好一款开源产品需要一支有毅力以及能坚持下去的团队。


对于每一个开源开发者来说,这注定是一次不平凡的经历:当开发者看着用户量从0到1,从1到10,从10到50的过程,内心的喜悦自然不用言语。想象下,有客户于新年到来之际在 GitHub 发感谢信,感谢你的软件帮助了他很多。有学校科研团队用你的产品做了很多很有意思的研究并分享文章给你。有人用了你的软件成功的让自己谋得了一条生路。


抛开各种大环境因素,这也许是一名开源开发者愿意无私做下去的源动力吧。