开源项目 要 发展壮大, 卓有成效, 要做好 模块化 工作 。
就是 作者 要 把 代码 写成 、整理成 模块 的 形式, 提供出 简洁 清晰 易用 的 接口, 让 别人 容易 的 使用 。
项目 的 架构 要 清晰, 内核模块 和 扩展模块 要 清晰 , 模块 的 功能 要 清晰 突出 。
总之就是 要 清晰 、突出, 让 别人 可以 容易 的 拿去 使用 。
这样, 别人就可以容易的 使用 你的 模块 去 创造搭建 新 的 模块, 别人的别人 又 可以 容易的 使用 你们 的 模块 去 创造搭建 新 的 模块 ……
如此, 开源项目 就能 生生不息, 发展壮大 。
说白了, 开源项目 不是 要让 别人 来 读 你的 代码, 而是 要让 别人 来 用 你的 代码 。
读自己的 代码 都很烦, 更何况 读 别人 的 代码 ? 读代码 的 目的 是 学习 。
但是 开源项目 要发展, 仅仅把 代码 摆 在 那里 让 别人 来 读 是 远远不够 的 。 需要做好 模块复用 和 模块替换 的 工作 。
模块替换 就是 未来 有新的 , 更好 的 模块 来 完成 这个工作, 就可以 用 新的模块 来 替换 旧的模块, 这样, 开源项目 就能 生生不息, 发展壮大 。
如果 把 代码 摆在 哪里 就能 让 项目 发展壮大, 卓有成效, 那 你们 可以去 把 PostgreSql 或者 MySql 的 代码 拿来 发展 发展 啊, 等你把 PostgreSql 的 代码 读完, 你也 差不多 50 岁 了 。
PostgreSql 是 加州大学 历代师生 积累的 结果 。 另外, 很多 开源项目 都是 有 商业支持 的 。 比如 Mono, Mono是一个由Xamarin公司(先前是Novell,最早为Ximian)所主持的自由开放源代码项目。 见 百度百科 “Mono” 。
所以, 一个 开源项目 如果没有 商业支持, 又要想 发展壮大, 卓有成效, 就要做好 模块化 工作 。
最后, 我还是 再 重复一遍 Unix 的 一条 编程原则 : 编写一些简单的模块, 把它们连接起来 。
比如, 我们可以来写一个数据库, 数据库 可以看作 由 这样一些 模块 组成 :
Sql 分析器 、关系运算器 、虚拟存储 等, 这是 最基础 的 。 实际中 还有 优化器 等 。
Sql 分析器 就是 对 Sql 进行 语法分析, 这是 编译器 技术 的 一部分 。
关系运算器 根据 Sql 分析 的 结果 和 关系运算规则 生成 查询计划(更新计划) 。
虚拟存储 类似 操作系统 的 虚拟内存, 把 数据文件 和 内存 映射成一个 虚拟存储, 用于 数据 的 检索更新 。
虚拟存储 又 可以 分为 内存缓存 、IO 、数据文件 这样几个 模块 , 数据文件 和 操作系统 的 文件系统 差不多 。
Sql 分析器 包括 语法分析器, 语法分析器 又可以分为 很多 子模块 来写 。
所以, 模块化 以后, 一个 大型项目, 或者 复杂软件, 也可以 完成, 可以 分期 完成, 多人 完成, 灵活搭配 、局部完成 、衍生分支和副产品 等等, 总之 很灵活, 很有生命力 。
大家有兴趣的话, 以后 我 慢慢 发 。
本文已发到了 民科吧 《谈谈 软件 开源项目》 http://tieba.baidu.com/p/6429500905 。