好的开源项目是怎样的?
概览 (Overview)
或者说好的开源项目的维护者应该是怎样的?
我觉得它应该至少包含以下几点:
- 解决问题
- 帮助他人
- 不要重复别人所做的事
- 承担责任
- 持续改进
- 遵循 Semver
- Contributing Guide
- Style Guide
- 版权归属
- 良好的文档
- 不要给这个世界增加冗余度
解决问题
我认为一个开源项目存在的根本,在于解决别人不能解决的实际的或抽象的问题,或者不能轻松解决的问题,或者创新地解决某个问题。
抽象的问题,比如数学相关的,人文相关的。
如果一个项目无法说清楚它致力于解决什么问题,那么它的存在意义会大打折扣。
帮助他人
如果能解决某类通用的问题,或许能帮助到某些人。
如果这只能帮助自己,或者不够通用,对他人没什么用。那说明项目还没做好开源的准备。
不要重复别人所做的事
开源之前,甚至写项目之前。去 google 一下这个问题有没有现成的解决方案,或者这个技术有没有类似的实现。
如果有,建议先考虑能否改进现有项目。
不要重复别人所做的事,大同小异也是不好的。一定要有创新。
承担责任
一旦开源,你就需要负责到底。
持续改进
没有完美的代码,你的项目需要一直维护下去,虽然社区会帮你很多忙,但你是主要维护者。
不奢求增加新功能,但需要修复旧 Bug。
如果你没有精力来维护项目,请找好后继者,或者给项目标记为 Deprecated
。不要突然失踪,或者直接删除项目。
遵循 Semver
一旦开源,别人有可能使用你的代码,就会对你的项目产生依赖。然而这条依赖链是建立在信任之上,它异常脆弱。
一旦你做了不可兼容的修改,又没有按照合适的规则告知用户。那么可能会引起一系列灾难。
Contributing Guide
指导新人如何给项目提 issue,如何给项目做贡献。
Style Guide
统一代码风格。
版权归属
给项目定一个版权协议。别人用得放心,你也安心。
给项目定一个 CLA (Contributor License Agreement)。保障项目贡献者的权益。
良好的文档
不要给这个世界增加冗余度
- 不要只为了炫技而开源
- 不要只为了秀存在感/宣传而开源
- 不要只为了开源而开源
另外,之前写过一篇《好的项目是怎样的?》,有兴趣可以看看。