今天在厂里听了一个关于内部开源的讲座,邀请的一些在外部比较活跃而且做得还不错的核心开发者参与分享,整体听下来还是蛮受启发的。

大家都知道开源是一件很有价值的事情,它可以很大程度推动项目的持续发展,社区在受益以后也会反哺开源主体。可是,只要把代码扔进 github 上,那就真的是开源了么?我们经常能看到,一个项目开源以后,无人问津,让作者信心严重受挫;也能够看到好的项目由于作者的繁忙而无暇顾及那如潮水般汹涌的 PR 和 issue。事实上,开源也意味着一份责任,如果不能良好地管理和经营,那就是一次失败的开源。

看到一个同学十分主动且勤劳地给项目提了一个超大的 PR,你一看,发现跟项目的重点方向不匹配,这个时候怎么办?打回去吧,于心不忍,人家这般热情;合并进来吧,不符合项目定位。诸如此类的事情在开源过程中是无法避免的。需要怎么做呢?此时你应该果断地拒绝 PR,因为这是对项目负责的表现,也不至于在这个 PR 被合并进去以后,造成项目后期难以维护的局面;但是也需要在这个过程中与贡献者建立良好的关系,开源的目的是为了让项目变得更好,越多的人参与进来,就会带来越多的能量,要学会吸收这些能量。

很多开源项目,别看它十分庞大,事实上开源主体在后期只需要投入少量的成本就可以了,很可能当初靠一个团队运作的项目,到了后期就只剩下一个、半个人在搞了,为何项目还能够持续发展下去,保持着活力?背后就是因为有社区的力量,在项目发展的过程中,积累了一大批优秀的贡献者,贡献者们得到了项目的认可,项目也得到了贡献者们的认可,这就是一个好的开源项目的特征。

再站在贡献者的角度,参与开源工作的动机又是什么呢?一方面可能是为了把项目改一改再带回去使用,更多的还是因为热爱,或者说喜爱,喜欢这个项目,希望它能够活下去,活的更好,因此愿意贡献自己的一把力量。是的,开源社区有时候就是这么单纯,只是为了让美好的事物变得更好而已。当然,那些为了让自己被社区认可的动机,也是值得鼓励的,毕竟你能够往 Linux 的源码里写进一行代码也算不错的本事不是么?

再回到内部开源这件事情上,一个公司庞大以后,不同团队不可避免出现造轮子的现象,也会有很多优秀的项目因为业务场景受限而无法继续成长,最终成为冢中枯骨的情况。内部开源可以一定程度帮助好的东西变得更好,帮助优秀的项目找到更多落地的场景,也可以帮助技术人找到更多同路人,这是一件十分有价值的事情。只不过在落地上相比外部开源要更难,毕竟规模是无法比拟的;不过内部开源会是一片良好的开源试验田,如果一个项目能够在内部找到一群同路人,那么放到外部就更加不用担心它的成长问题了。

开源是一个很有意思的话题,多去观察社区发展不错的开源项目,学习他们的运作模式;也多去看看那些刚刚崭露头角的启蒙项目,帮助它们快速成长,相信在这个过程中,每一方都是受益者。