开源经验谈

原创 2017年08月02日 09:31:32

Bootstrap

古话说得好:“万事开头难”。

开头在本质上是解决 “Bootstrapping”,人们一直使用这个比喻来描述解决启动问题的方法,即一个人试图用自己的鞋带将自己拉起来。比如按下电脑开机按钮后初始化系统被广泛称作自举引导(简称 booting)。

想做好一个开源项目,就先得规划一个好的启动方式。

GitHub

10 多年前做开源项目托管的话基本只有一个选择,那就是 SourceForge
期间也有过一些其他大厂的项目托管服务,比如 Google Code,Sun/Oracle 的 Project Kenai,现在都停服了。目前 GitHub 已然是全球最大的开源项目托管服务商了,促成这样现状的最大原因有这几个方面吧:

  1. git 版本控制系统的流行,并做了一些更简单的工作流,比如 Pull Request
  2. 更好、更现代化的用户体验,比如 issue comments 的实时推送
  3. API 开放平台,构建第三方应用的生态系统
  4. 持续不断的改进,GitHub 隔三差五会有一些细节改进,并且桌面客户端工具也在不断演进

目前 GitHub 是开源项目托管的不二之选。国内也有类 GitHub 的项目托管服务,比如码云Coding,希望它们越做越好 :+1:

Repo

建库是第一步,首先需要确定的是开个人项目还是组织项目,这两者有些许不同:

  • 个人项目:项目如果受欢迎一般来说人们都会浏览下作者主页并关注,有利于作者本人涨粉
  • 组织项目:如果一开始就规划了相关系列项目,建议选择组织类型

第二步就是需要一个好的名字:

  • 和需求/技术相关或者有些特定含义
  • 库名命名优先是全小写,如果需要分隔单词则使用 -,最后遵循开发语言、框架的约定
  • 如果项目是一个系列的,需要考虑好前缀,或者按前面说的走组织项目

Init Commit

初始提交尽量是核心功能可用的,这样能给别人一个好印象。并且必须写好 README,内容至少覆盖如下几个方面:

  • 项目介绍:该项目是什么,主要用于解决什么问题,这个部分主要阐述项目的动机
  • 功能特性:有哪些主要功能,独特的特性有哪些
  • 安装方式:如何安装,最好也介绍一下开发环境搭建
  • 技术依赖:该项目主要依赖哪些项目,这样能让别人大体上知道复杂度和上手难度
  • 开源协议:一定要让用户知道,非常重要

除了 README,GitHub 还建议加入编码规范、贡献指南说明,这个可以后期慢慢加入。

文本的介绍是一方面,另一方面是多媒体格式,如果能有使用视频是最好的,但至少项目的 logo 是要有的,一开始稍微丑一点没关系 :blush:,可以鼓励其他人参与贡献。

Document

项目托管服务商一般都提供了 wiki 服务,主要用于项目相关文档。直接使用 wiki 的最大好处是可以让其他人参与进来维护文档,比如有错别字时其他人可以很方便地帮忙修改。

但直接使用 wiki 服务也有个致命的缺点,就是当项目要迁移托管商时就很麻烦,不同服务商支持的文档语法不尽相同,排版也比较麻烦。推荐的做法是项目的文档自己搭建一个站点来管理,虽然运维麻烦一些,但这样不存在迁移问题,并且自由度也更大一些。

建议通过论坛系统来维护文档,这样方便用户进行提问,也促进了项目社区的发展。

Issues

Issue 最好先建立模板,让用户提问的时候有章可循。不过即使有模板,issue 描述不清晰还是很常见的,用户的系统环境千奇百怪,遇到奇葩的系统不工作其实也正常。

关于 issue 你未来可能会面临如下情况:

良好的 issue 交互情况:

总之通过 issue 来追踪管理变更是很好的做法,发布版本时还可以根据 issues 生成 changelogs

不过对于 issue 也有我觉得比较难处理的情况:

总之,做开源很重要一点就是和参与者、用户保持交流,等项目用的人多了以后责任也会变大,所以不能太随意,尽量做到变更可追溯。

回归本质

总之,开始一个开源项目时最重要的一点就是要问自己:为什么要做这个开源项目?
这个问题的答案将解释该项目的动机并且为项目设定了目标。

开源项目成千上万,并且同质化严重,但总有一些开源项目能够脱颖而出,因为这些项目抓住了本质:

  1. 开发者自己是用户:开发者自己不用是发现不了问题的,特别是后期需求
  2. 做真正有用的事情:不一定要受众很广,但要有刚需,能够解决问题
  3. 长期投入精力情感:你投入的情感使它与众不同,保持细水长流

以上都是我的经验之谈,如果你想更全面了解开源,请访问 GitHub 出品的 Open Source Guide

本文作者

https://github.com/88250 ,欢迎关注。

版权声明:欢迎加入开源技术 Q 群:242561391,让学习和分享成为一种习惯!

如何实现复杂FPGA设计的时序收敛

“打鼹鼠”是一个古老(电子时代之前)的休闲游戏。在桌面上有许多洞,每个洞里都藏着鼹鼠。当有鼹鼠从洞里钻出来时,你就用锤子打它,让鼹鼠退回洞里,你因此而得分。当鼹鼠返回洞里时,又有一只鼹鼠会随机地从另外...
  • flyingforever_wl
  • flyingforever_wl
  • 2011年11月29日 08:46
  • 868

打架经验谈

据我的观察总结,人一过个二十六岁就难得再有机会打架了。我个人认为没有打过架的男性人生是不完整的人生,想把看着不顺眼的人打倒在地然后踏上一万只脚这个冲动简直是胎里带来的。我上中学的时候虽然已经开化很多,...
  • h9s
  • h9s
  • 2004年07月16日 16:16
  • 759

工作回忆录-第二年 纯情少年

兄弟四人齐帮忙晚饭总是能吃上南北常议菜差异项公做菜不抬杠周末总想好菜尝铭科商服二楼汤每选必有新品种金刚只图口舒畅也学无聊网聊忙半夜花筒也不放一线两端互倾诉数月话费上高岗图形算量老朱扛造价预算小易挡项目...
  • xiammy
  • xiammy
  • 2008年06月05日 21:43
  • 1474

打架经验谈(转贴)

据我的观察总结,人一过个二十六岁就难得再有机会打架了。我个人认为没有打过架的男性人生是不完整的人生,想把看着不顺眼的人打倒在地然后踏上一万只脚这个冲动简直是胎里带来的。我上中学的时候虽然已经开化很多,...
  • coofucoo
  • coofucoo
  • 2004年12月07日 21:59
  • 1603

古典音乐CD购买经验谈

 古典音乐CD购买经验谈如果你爱上了古典音乐,想较为系统地购买一批CD收藏及欣赏,如何入手才是捷径呢?如今是商品空前丰富、供大于求的时代,跑进唱片行,只见各种牌号、各种价格的古典音乐CD琳琅满目,令人...
  • sukhoeing
  • sukhoeing
  • 2006年06月13日 20:45
  • 1325

经验谈

  • zgqtxwd
  • zgqtxwd
  • 2008年04月27日 08:51
  • 111

Starbound正式版的Mod制作(一) …

以steam创意工坊的mod为例,说明一下要如何解包Starbound的Mod 星际边界的mod保存在steam的库文件夹下 比如我的目录就是 F:\Program Files (x86)\St...
  • u012388993
  • u012388993
  • 2017年03月08日 10:59
  • 300

DIY经验谈 家中云存储组建NAS经验谈

http://www5.icpcw.com/diy/00126122_4.htm DIY经验谈 家中云存储组建NAS经验谈 家中云存储组建NAS经验谈 htt...
  • cs090506
  • cs090506
  • 2012年08月26日 11:35
  • 5319

路由表经验谈

当前的路由: destination 目的网段 mask 子网掩码 interface 到达该目的地的本路由器的出口ip gateway 下一跳路由器入口的ip,路由器通过interface和gate...
  • zgeyzq
  • zgeyzq
  • 2008年04月19日 11:35
  • 252

Redis经验谈

文/杨海朝 新浪作为全世界最大的Redis用户,在开发和运维方面有非常多的经验。本文作者来自新浪,希望能为业界提供一些亲身经历,让大家少走弯路。 使用初衷 从2010年上半年起,...
  • enough_br
  • enough_br
  • 2013年08月16日 13:10
  • 517
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开源经验谈
举报原因:
原因补充:

(最多只允许输入30个字)