1. IP (intelligent Property)意识, 项目中经常会引用他人模块的代码,另外自己的项目也可能会被其他人用到,这里就有一个知识产权问题,具体而言就是source code的license或者软件的patent问题。 一般项目开始之前就得设计好 IP plan,这需要考虑到项目中其他人/公司的代码是什么License(例如GPL,LGPL,BSD),以及从商业目的出发,自己准备如何license自己的code,这种plan一般都要经过上级部门批准,尽量绕开一些知识产权问题。我们经常看到project下面有Author文件,其中会有版权声明,另外source code文件的开始都会有license header,其中包括了具体的license信息。
2. 开源社区的合作开发模式,很多开源的项目都会放在知名的开源社区,例如freedesktop,Gnome,以方便全球程序员联合开发,他们有一套自己的资源去协作所有人的工作:
1)Maillist, 用于讨论具体项目的开发,相当于是一个邮件群,开发者经常会在里面发自己的patch,所有的群成员都可以看到这个patch,并可以对其提出意见和建议,patch的作者可能会依据讨论的结果重新写patch,重发,重新讨论,直到project maintainer认为patch OK了,他才会去merge这个patch(当然,也有可能根本没人鸟你的patch,因为大家都很忙,没空也没义务去看或者merge你的patch,所以在开源社区混,很需要耐心)
2) Bugzilla,用于report bug,所有人都有权限在上面报bug,也可将patch放在上面,可以在下面comments。
3) Project repo,一些社区有自己的专门code server,用于存储项目,例如freedesktop,当然也可以使用一些免费通用的code server,例如github,gitorious等等。
3. 代码质量和安全
开源项目对代码的质量和安全会要求比较高,所以自己提交的patch最好能follow 项目已经定下的代码风格,并能用一些工具去检查代码中的常见技术和法律风险。
1) 对于代码风格,一般包括代码缩进风格和 函数变量命名规则, 以统一格式可以使得code看起来更加规范和美观。
Linux下常用的代码缩进格式工具有Indent和astyle,它们可以控制代码如何缩进,空行,空格,设置comment格式等等,用户可以直接指定某一中style,如K&R , Linux indent style(可以参考我的博文: Indent tool and K&R style), 一般可以在code repo里面添加一些脚本来检查 code indent format。
函数和变量的命名也要符合一定的规则, 具体style有很多种,选择一种,然后写code时候都按照style来。
Doxygen 文档,如果希望自己的code能很便捷的生成一些帮助文档的话,需要按照doxygen格式去添加代码注释,尤其是针对函数和变量的定义说明,方便读者快速查询函数 功能或者变量意义。
2)对于代码安全,
技术安全, 最好是能用一些工具(例如clocwork)做些基本的检查,避免内存泄露或者基本的逻辑错误。
法律风险,如果有条件的话,可以对自己项目的code做个IP scan,检查是否有从其他地方copy过来的code,坚持是否违反了 IP plan,如果是,就需要想办法解决
4. 精通代码管理工具,例如git