协会地址:上海市长宁区古北路620号图书馆楼309-313室
Jeff:做一味odoo开源模块的石头汤
作者|王剑峰,开源软件GoodERP项目发起者 / 12年odoo开发经验 / 上海开源信息技术协会监事长
到今天为止,我已经参与odoo这个开源软件及其生态12年了。
odoo是一个开源的erp开发框架,其最吸引人的就是类似wordpress的插件结构,插件模块开发者可以在完全不修改其他插件模块源代码的前提下对其他模块的界面和行为自由地定制。所以在odoo基础上衍生了一个各展其才的插件模块生态,主要有:
- odoo社区版模块 开源 LGPL
- 服务商为客户定制开发的模块 收费
- odoo企业版模块 收费 OPEL
- 浪潮 ps cloud2.5 收费 OPEL
- GoodERP 开源 AGPL3 订阅收费
- http://apps.odoo.com上的其他收费模块 OPEL
- Odoo Community Association托管模块 开源 AGPL3
odoo的实施服务商交付给最终用户使用的功能就是运行在某个odoo框架版本上的这些模块的集合。很明显使用odoo社区版+OCA模块的组合是0成本的。
遗憾的是,OCA模块越来越少。
我们来读一本叫《石头汤》的书。这是一个奇怪的书名,因为我们会想,这个故事是说用石头煮汤吗?鸡可以煮汤,鸭可以煮汤,冬瓜火腿、番茄和蛋可以煮汤,石头怎么煮汤呢?
这个故事正是说的用石头煮汤。是三个和尚用石头煮汤。这三个和尚的名字叫阿福、阿禄、阿寿。他们正在旅行的路途中,边走边谈着猫的胡须、太阳的颜色和一个人怎么才能得到快乐。
这样,他们就来到了一个村子里。这是一个历经了很多苦难的村子,很多的苦难,洪水、战争……村民们疲惫不堪了,对这个世界再也没有信心,对生活再也没有热情,别说不和陌生人交往,邻居之间也彼此猜忌,没有信任。
村子里有农人,有茶商,有读书人,有女裁缝,有医生,有木匠……他们当然也都工作,但是都只是为自己的,所以不快乐。
没有人理睬走进了村子的和尚们,没有人欢迎阿福、阿禄、阿寿,家家的窗户都关得紧紧的。他们敲谁家的门,那么谁家干脆就关了灯,假装家里根本就没有人,假装睡觉了。
odoo灵活的插件结构在2010年发挥了巨大的优势。openerp5.0在lanchpad网站上的extra_addons项目下的第三方模块有几千个,源码文件有4个G。乐于分享的程序员把客户项目上的种种奇怪需求实现了以后重新整理为可重用的模块上传到这个项目。结果是openerp5.0加第三方模块可以实现各种各样的信息化需求。
那个时候的openerp公司也在探索盈利模式,当时选择的是合作伙伴支持模式,所以官方宣称所有openerp模块都必须基于AGPL协议不得销售。
2011年,odoo公司宣布了正式的版本发布策略,确定每年的10月初发布一个新版本,用户数据升级到新版本需购买odoo公司升级服务,且升级范围不含第三方模块和自定义模块。十年来每个版本都有巨大的架构变动,使得旧版本的模块不经修改无法在新版本上运行。
2014年,软件名称换成odoo,官方宣称框架协议修改为lgpl,官方带头卖企业版模块(订阅式销售),并搭建了http://apps.odoo.com模块商店供开发者销售收费模块,官方提成30%提现。
模块程序员们不再那么快乐地分享了。
高频率不兼容的版本升级和允许出售模块的政策使得新版本上可用的第三方开源模块的数量逐年减半。要得到分享的快乐、吸引眼球的可能获益,必须要独自投入完全没有短期回报的工作。所以之前开源的一些模块被升级到新版本并挂在apps上出售。
仍然有一些人相信开源的价值,仍然有一些人愿意分享,于是odoo的几个大服务商牵头成立了OCA。OCA成立以后把散布在各种代码托管平台的odoo第三方模块搜集起来,在取得原作者同意的前提下纳入oca组织管理,统一授权AGPL3,并任命PMC组织各类模块的开发、测试和升级工作。OCA是一家非盈利基金会,我也是会员之一。和其他开源基金会一样,OCA不给贡献者付费。和其他开源组织不一样,OCA全部管理职能都是兼职,不拿工资。
OCA改变了现状,但没能改变趋势。
以web https://github.com/OCA/web 插件模块项目为例,基于8.0(2014年发布版本)的模块有近百个,基于13.0(2019年发布版本)的模块只有10个左右。五年流失了一大半。基本没有新增。
我曾组织中国社区程序员的codelab活动,内容就是参与OCA一部分模块从11到12版本的升级工作。从注册github,fork仓库,旧版本功能学习,新建分支,在新版本上测试,修改代码,本地运行自动化测试,推送到fork仓库,向主项目提交pull request。整个贡献者的时间花费根据模块复杂度、测试覆盖率及贡献者的技术能力不同,2小时到20小时不等。而且为保证质量,OCA的PR要至少三个人code review通过方能合并,而且review标准比较高,这个时间周期加上反复沟通修正短则2周长则6个月。现在还有9.0的贡献没有被合并也没有被拒绝。整个参与过程体验全靠一个开源理念支撑。没有能力的人无法参与,有能力的人很多时候都会放弃。特别是你都不知道谁会用到你的这个版本的这个模块,因为下个版本又不能用了。
OCA有很多好人,但是参与OCA说实话不太快乐。
odoo与其他开源ERP相比,最大吸引力就是上万个第三方模块。但是这些第三方模块中最开放的那一部分正在流失。
“这些人不懂得什么是快乐。”三个和尚异口同声地说。大和尚阿寿说:“可是今天,我要让他们见识一下怎么煮石头汤。”他们捡了小树枝生起火,把小汤锅架在火上,在锅里装满从井中打来的水。
与其他开源项目一样,中国的OCA项目参与者,寥寥无几。我自己以前是,现在也不是了。只是每年交个50美金的会员费表达一些敬意。
OCA的组织形式和工作成果无意是最符合开源定义的,但是我想这还不够,也许应该加点儿盐。
我自己建立了一个代码托管网站 osbzr.com,并在上面创建了一个需要捐赠100积分才能参与的gooderp_extra项目。osbzr.com/osbzr/gooderp_extra
一次捐赠,你可以随时访问项目,下载库内的所有开源模块。
当然,这个库是空的。虽然用于质量保证的集成测试服务已经部署好了。
但有个附加的规则,提交贡献的人,在贡献被合并的时候可以得到仓库剩余积分的50%
一个小姑娘看见了,她问:“你们要干什么呀?”
“我们要煮石头汤,还得要找三个又圆又滑的大石头。”阿寿说。
小姑娘帮和尚们在院子里找到了他们所要的石头,他们把石头放在锅子里煮。
“这几块石头,可以煮出好喝的汤,”阿寿说,“但是,我担心锅子太小,煮的汤不够喝。”
“我妈有个大锅子。”小姑娘说。小姑娘就跑去对妈妈说了这事,她妈妈竟然就答应了,而且她妈妈还说:“我倒想要学学怎么煮石头汤!”
原来,哪怕是在一个已经没有热情的“村子”里,也是有这样的小姑娘的;哪怕是对生活没有了信心,其实,心头总还是有着一点可以被点亮的热情。
小姑娘把大锅推到了村子的中央,和尚们点燃的柴火青烟飘散开来,和尚们翻动着锅中的石头……躲在窗子后面的没有信心和热情的人们终于打开房门走出了屋子,他们都要看一看,这石头汤是什么!
我先用小号捐赠了100积分然后贡献了OCA最新版的自动备份模块。嗯,暂时亏了50积分。
我在常用的几个qq群里发了这个想法和库的地址,基本上没人响应。
这石头汤是什么呢?
在搅动着石头汤的阿福说,如果加上了盐和胡椒粉,石头汤才好喝呢!
一个眼睛睁得大大看得津津有味的读书人立即说:“我家里有!”赶紧就跑回去取了,石头汤里加进了盐和胡椒粉。
阿寿尝了尝味道,说:“照我们的经验,这么大锅的石头汤,如果加上一些胡萝卜,那么汤会更甜。”
“胡萝卜?我家里有!”人群中的一个妇人说,赶忙地跑回家里拿了来,丢进了汤里。
“要是放些洋葱,味道是不是会更好?”阿福问。
一个农人跑回家取来了洋葱。
“再加些蘑菇呢?”
蘑菇也被取了来。而且还纷纷顺便地带来了面条、豌豆和包心菜。
当每个人打开心胸付出时,其他人付出得更多。就这样,汤锅里的东西越来越多,饺子,豆腐,云耳,绿豆,芋头,冬瓜,大蒜,百合,甚至人们还大喊着应该加一点儿酱油!和尚们搅和着咕嘟咕嘟的汤锅,心里感触地想着,多么香啊,多么美味啊,村里的人多么懂得付出啊!
社区里总有人一直无条件地支持你,一位从gooderp项目贡献上赚得了大量积分的刘先生第二个捐赠了gooderp_extra项目并马上提交了两个【快速添加按钮】的模块。
然后,我之前的同事曹同学也愿意把他的【表单上列表复选框】模块分享出来,但是他似乎对积分不太关注。
社区里一位资深顾问对【表单上列表复选框】模块感兴趣,他也捐赠了项目并马上贡献了【弹窗上的树形导航】。同时他也测试了曹同学的模块,感谢之余又提出了改进的意见。
对一个模块的维护贡献也和提交一个新模块有共同的积分奖励规则。
顺便我也给项目增加了贡献者的操作步骤,因为不是所有人都掌握了git fork-pull-push-pull request这一套流程。
汤煮好了。村子里的人聚集在一块儿。他们带来了白米饭、馒头;他们提来了茶水和灯笼。在记忆里,他们从来没有像现在这样聚在一起享用过大餐。
盛宴过后,他们说故事,唱歌,一直到深夜。他们不再锁上门,而是纷纷热情地邀请和尚们到家里去住,让他们睡得非常舒服。
一个温暖的春天的早晨,大家依依不舍地送别阿福阿禄和阿寿。“谢谢你们让我们来做客,你们是最大方的人。”和尚们说。
“应该谢谢你们,是你们让我们懂得了分享,有了永远的富足。”村民们说。
“还要想一想,”和尚们说:“快乐就像煮石头汤一样容易啊!”
正因为快乐是这样的容易,离得那么近,所以又有什么灾难和不幸能够真得让人变得灰心丧气,再也没有兴奋的精神呢?
我们的gooderp_extra项目就是这样。但汤只煮好一次,而我们熟悉的火锅,水一直是开的,有人下有人吃,吃饱了换一拨人,锅里的火不灭,可以一直吃下去。
只要积分和现金可以随时兑换。只要相信开源加了盐味道会更好。
转载自知乎文章:做一味odoo开源模块的石头汤






