1. 引言
开源软件已是信息社会的基石。
GitHub上软件种类众多,市场定位和成熟度也各不相同。
对于成熟的通用软件,例如Linux,NGINX等。将这类软件引入自研项目中不存在太多顾虑,因为通用所以用的人多。可以找到大量的成功案例,众多的开发维护人员。一旦碰到问题,也容易在网上搜到答案。
但还有一类开源软件, 定位相对没有那么通用,虽然其在细分领域已经做的比较好了,但由于生态环境较小,在项目中引入时候,还是有很多因素需要考虑:
- 现有的开发人员有能力掌握并承接后续开发吗?
- 如果使用中出现问题, 有没有合适的开发人员去解决?或者去做二次开发?
- 系统上线后,有没有合适的人员去长期维护?
对这类软件,在引入到项目中前,有两种办法增强信心:
- 找到合适的人
- 成为该软件开源社区的一员
2. 找到专家
有如下几个方法。
- 在软件的开发者中搜索是否有中国开发者,尝试建立联系。
- 百度该软件相关的讨论区,QQ群等。 加入并倾听,识别出专家。
- 寻找并参加该软件相关的培训。
- 寻找GitHub上该软件的相关软件。 例如引用该软件的软件,该软件的Plugin等等。并合作者建立联系。
以上的目的都是在现实世界建立起和专家的联系。 然后通过和专家的电话,邮件,吃饭喝茶等各种交流来进一步了解该软件在国内的生态情况,以及软件的优缺点。 为后续引入打好基础。 和专家建立起联系后, 后续也方便和专家进一步在项目上合作共赢。
3. 融入开源社区
如果国内找不到专家。 就只能撸胳膊上,让自己成为专家了。
3.1. 学习使用
主要看如下几方面的内容:
- 软件自身的官方文档
- Youtube上的介绍视频,以及第三方教程
- 软件的单元测试
以上,结合大粒度的源码分析,可以掌握软件的大体脉络。
3.2. 和同行讨论
一般开源软件社区有如下几个地方。
- GitHub项目Issues
- GitHub项目Discussions
- Discord或者Slack等讨论组
- Email邮件组
通过加入并查看大家在讨论哪些问题,能了解到软件的一些使用细节和适用场景。 在学习的同时,也要多思考,多提问题, 多回答社区的问题。
回答社区的问题可以针对和自己项目相关的领域问题,积极回答问题有两点好处:
- 驱动自己认真深入思考,如果我在项目中碰到这个问题,该怎么处理?
- 和其它社区用户,以及软件开发维护者们建立联系
以上是 Headless CMS Directus 的项目讨论社区。 我最近在调研用Directus来做API中间件,watch了该项目的讨论区,GitHub会把所有讨论实时发到我一个特定的邮箱里面。 通过查看大家的讨论,有很多收获。我也把自己学到的经验总结提炼出来帮助其它用户, “Most Helpful”榜单排名第5的就是我。
3.3. 小规模MVP验证
在看的基础上,也需要动手做。
按照自己项目的特点,定义一个和该软件相关的最小MVP流程,尝试引入该开源软件实现。 以上三点,相辅相成,可以同步进行。 理想的结果是:
- 自己变成了专家,后续在项目中引入
- 研究过程中发现软件不适用,果断放弃