好的开源项目是怎样的?

概览 (Overview)

或者说好的开源项目的维护者应该是怎样的?

我觉得它应该至少包含以下几点:

  • 解决问题
  • 帮助他人
  • 不要重复别人所做的事
  • 承担责任
  • 持续改进
  • 遵循 Semver
  • Contributing Guide
  • Style Guide
  • 版权归属
  • 良好的文档
  • 不要给这个世界增加冗余度

解决问题

我认为一个开源项目存在的根本,在于解决别人不能解决的实际的或抽象的问题,或者不能轻松解决的问题,或者创新地解决某个问题。
抽象的问题,比如数学相关的,人文相关的。

如果一个项目无法说清楚它致力于解决什么问题,那么它的存在意义会大打折扣。

帮助他人

如果能解决某类通用的问题,或许能帮助到某些人。

如果这只能帮助自己,或者不够通用,对他人没什么用。那说明项目还没做好开源的准备。

不要重复别人所做的事

开源之前,甚至写项目之前。去 google 一下这个问题有没有现成的解决方案,或者这个技术有没有类似的实现。
如果有,建议先考虑能否改进现有项目。

不要重复别人所做的事,大同小异也是不好的。一定要有创新

承担责任

一旦开源,你就需要负责到底。

持续改进

没有完美的代码,你的项目需要一直维护下去,虽然社区会帮你很多忙,但你是主要维护者。
不奢求增加新功能,但需要修复旧 Bug。
如果你没有精力来维护项目,请找好后继者,或者给项目标记为 Deprecated。不要突然失踪,或者直接删除项目。

遵循 Semver

一旦开源,别人有可能使用你的代码,就会对你的项目产生依赖。然而这条依赖链是建立在信任之上,它异常脆弱。
一旦你做了不可兼容的修改,又没有按照合适的规则告知用户。那么可能会引起一系列灾难。

Contributing Guide

指导新人如何给项目提 issue,如何给项目做贡献。

Style Guide

统一代码风格。

版权归属

给项目定一个版权协议。别人用得放心,你也安心。

给项目定一个 CLA (Contributor License Agreement)。保障项目贡献者的权益。

良好的文档

具体参考《好的项目是怎样的?》- README

不要给这个世界增加冗余度

  • 不要只为了炫技而开源
  • 不要只为了秀存在感/宣传而开源
  • 不要只为了开源而开源

另外,之前写过一篇《好的项目是怎样的?》,有兴趣可以看看。