高手创造工具

今天整理出来了自己这些年碰过的软件包,不算 M17N 之类拥有 repo maintainer 角色的源里的软件包,就有 178 个。加上那些总量要过 300 了。

金融领域,一个基金经理维护 20 只左右股票组成的资产池就需要一个庞大的团队。300+ 的软件包几乎可以说是早到了 upper limit 了。至于技术,基本上再提高就不会是在打包这里了,而是去真正的学习各种编程语言来解决编译错误了,这其实做的已经是 upstream developer 的事情了。我的 github profile 这些年累积下来很好看,它说我的主力编程语言有 4 种(笑~),还被 Google HR 发过邮件(笑~)。

我维护着很多的中文社区相关的包。偶尔有一种莫名其妙的责任感:有用户在 forum.suse.org.cn 说哪个软件 openSUSE 没有,就想赶紧包出来,潇洒一 post。或者谁说 openSUSE 出了什么 bug,感觉就跟自己系统不能用了一样。几乎每天在 build.opensuse.org 和论坛上面站台,打包点东西,帮 factory 修修 bug。

这一年我掉到了 nodejs 和 go 这两个我到现在依然不会写的语言的大坑里去了。npm 有 200+ 个依赖,导致我其它包的维护几乎就是停滞了。

现在来看还是要上帝的归上帝,凯撒的归凯撒。论坛我不去,他们几个管的也挺好的,phoenixlzx 也没伸手要钱; 有些软件包不是我打的,比如 bcloud,大家也用上了;Leap 发布我没组织,用户一样也不少。有些空白总是能够填补的。openSUSE 是一个社区,能成长起来一批有自治意识、能够且有能力自主奉献的人就是对开源的贡献了。

而我自己的打包工作,我学了一些 ruby。元旦把之前实验性的 github.com/marguerite/golang-packaging 形成生产力了。这个项目简单说就是用 ruby 实现了一些 rpm macros。可以让你不需要真正懂 golang 的编译环境是怎么构建的、环境变量是怎么设置的,甚至连最后的 rpm 文件列表(%file)都不用你来写。你都不需要知道 openSUSE 的 golang 软件包安装到什么路径就能做出包,大大降低了打包需要了解的背景知识(当然这些知识还是记录在了 wiki 上面),只需要根据错误提示写固定格式的编译依赖(运行依赖 Requires 和 Provides 是自动处理的。甚至 Requires 都只是为了以后 golang 支持 shared linking 做的准备)。

过段日子再做一个自动填充剩余 tag 的 go2rpm(可能会有图形界面哦),再写一个 autoupdater 实现 devel:languages:go 的自动化任务,就像 perl/rubygems 源那样,我就可以撒手干别的去了,由维护几百个包变成只维护一个工具。

然后就是去对 devel:languages:nodejs 做同样的事情。那个工具的设计我会在以后的文章讲。

现在在做的是 github.com/marguerite/upstream-notifier,就是检查我目前的 300 多个包里哪个有更新的工具。

Written on January 12, 2016