TL;DR
这是手稿,就是我具体大概是要怎么在台上讲的一个记录,你可以去 B站 搜索 AOSCC2026,单品的话有可能看到我本人,PPT下载(pdf打印版本)
下面是手稿正文(小标题不会念,括号为舞台提示,也不会念,斜体中括号中内容为PPT页):
从水群到贡献者:我的上下游维护踩坑手记
引子
[P1]
(展示 DeepSeek 的第一张 PPT:从0到w4:舞萌DX从入门到入土)
???谁把我PPT改了?这是我测 DeepSeek 用的 PPT 啊,怎么给我放上去了,算了,既然来都来了就给大家讲讲吧。
(切换PPT,DeepSeek 模拟思考中)
[P2]
他在思考呢,我们等下吧。
(思考完成后)
[P3]
这啥呀这,打舞萌打的,已经没救了,抬走吧。
会务组肯定不想让我讲舞萌,所以我们还是切回正题吧。(切真·主页PPT)
[P4]
我今天站在这里实际上想和大家分享的是,作为一个上游的开发者和下游的打包者,还有AOSC新人,我在打包收获到了什么,也希望它们也可以帮助到大家。
(切PPT)
[P5]
所以我是谁呢?(点击,动画“我是谁”图片消失)
我是谁?
所以我是谁呢?(点击,动画“我是谁”图片消失)
我是chihuo2104,有时候又可能称作chihuo,是赤火不是吃货。
大部分平台就叫上面那个,我还在某个平台亦称作为尾巴藿藿,群友大部分时候可能叫我叫藿,藿藿或者是以巴嚯嚯(东北人的口音啊)
我呢24年开始在托腮群水群,25年在签到处当了两天志愿者,26年把自己写的 Manboster 亲手送进源,虽然现在还是安同是工作,macOS是生活,也算是功德圆满了。
哦对我还打舞萌,在座有舞萌吃吗,有的举个手?(等举手完),行,可惜我的三角纤维软骨复合体不能让我和群友拼机了,哦不,昨天跟群友去窝里爆装备打了居然还上了13分(举一下护腕,补充说明:笔者在2026.8.4遇到百年一遇的车祸,伤到了TFCC,需要戴3-5周的20cm长护腕,那时候还在戴着护腕)。
别的东西的话我在这里也不多说了,去我的个人简介里面 dig 一下就知道了。
(切PPT)
[P6]
我来这里讲什么?
那我来这里到底是想讲什么东西呢?实际上我想讲的是从开PR,到review,再到被合,最后紧急发两个版本之中我学到了什么,以及作为一个上下游为一体的开发者和打包者的一些心得和体会。
然而更重要的事情是我意识到了一件事,打包并不是把一个软件塞进发行版仓库这么简单的,你是真的要对你打的包负责,那我先讲讲我打了什么包。
(切PPT)
[P7]
我打的 Manboster 是啥玩意
Manboster 是一个主打安全和轻量的面向个人的人工智能助理。具体功能就不展开了,大家只要知道我本人既是 Manboster 的上游开发者又是下游打包者就行了。
前段时间我把它开源了,本来就想给 AOSC 打一个包,所以我决定就把它送进 AOSC 了。
行了,再讲下去要成 Manboster 产品发布会了,这个你们别急,会来的,等我把它写完再说。
那我就切入今天的正题,它是怎么进源的。
(切PPT)
[P8]
#16464 的“毒打”
多年以后,面对Manboster,chihuo2104将会回想起他把Manboster送进源里的那个忙碌的一天。
他打开了电脑里面的安同OS虚拟机,输入 ciel new,叽里咕噜研究了一通,push上了仓库开了PR,结果他没有发现,后面的一天有的是他忙的。
在处理 #16464 入源的过程中,我学到了很多东西,所以我在这里,知识,与你分享(小吉祥草王音)。那我们就开始上课吧,
(切PPT)
[P9]
这是我们的 Lesson 1,(动画)下游不仅是消费者,也可以是贡献者。
(切PPT)
[P10]
Zero King 怀疑我的命名是不是有问题,因为我这里的“stable”“rc”这些都是“channel”,管发布频率和通道,而我自己在代码里的定义是按照“Version”,意思是版本,来做定义的,我其实对这件事情还挺后知后觉的,那既然提了就改,就这样,下游也可以成为上游的贡献者,一起帮忙构建软件。
(切PPT)
[P11]
然后是我们的 Lesson 2,(动画)实践是检验“构建真理”的唯一标准。
(切PPT)
[P12]
我自己尝试在我自己MacBook发版构建的时候,我是发现只有 amd64,arm64和riscv64这三个架构才能正常编译,然后我就在 issue template里面也勾了这三个,并没有实际测过,然后网管就说了:“test builds结果以CI为准”。后面 MuTsuki 让我把所有构建脚本整合到一个文件里面去,但是文档里面没有这种写法的时候其实我也是心里挺悬的,拿不着谱,最后是告诉我 “Why not test by your own?”,你说的对,ciel一测,ok,确实这么写是没有问题的。后面确实也 test ci build 出来是这几个没啥问题,为什么其他的有问题当时还不知道,后面是要求我查出这个问题,具体是为什么那我就要放 Lesson 4 说了。
(切PPT)
[P13]
接下来是我们的 Lesson 3(点击动画),不会就“抄作业”。
(切PPT)
[P14]
其实我交PR之前就已经研究过AOSC wiki上给出的这些教程了,教程说 ABTYPE=gomod,就照用,然后也没去翻别的软件包抄作业,结果一 build 告诉我是构建失败了。然后就自作聪明的搞了一个自定义的构建脚本传了上去,当然也被他们说了。然后 MuTsuKi 就说了我这种带两个可执行文件入口的 monorepo 的情况应该用 GO_PACKAGES。
(切PPT)
[P15]
于是去 RTFM,Autobuild4 是空的, ABTYPE 没有介绍 GO_PACKAGES 怎么用。
(切PPT)
[P16]
虽然还给了我个GitHub sh文件链接,我哪里看得懂bash,这叽里咕噜地在说些什么呢,再见了只能。
(切PPT)
[P17]
后面想起来不是可以直接抄现成作业吗,那就打开 Zed,直接进 AOSC 的 abbs,搜索 GO_PACKAGES ,终于看懂怎么用了,本剧终。
(切PPT)
[P18]
但是,各位华生们有没有发现一个盲点?直接拿打包文件抄作业不失为一种好方法,但是我们最先看的东西都是文档,那文档都去哪儿了?
(切PPT)
[P19]
最后是我们的 Lesson 4(点击动画),注释不是写给现在的自己看的。
(切PPT)
[P20]
本来看到特首打了个 new-package 的 label 了,还以为马上就可以去打舞萌了,真的结束了吗?(动画)No.(乔布斯音)还没有。
(切PPT)
[P21]
特首指出了我 copy-repo 那边没有注释的问题,然后还非常贴心的给了我一个注释模版,写上去就行。最关键的还是下面的,特首说为什么会有中途退出?而且是直接 exit 1?这不可能不会出报错,后面排查了一下是一个 ffi 库只支持三个架构导致了其他架构构建失败,补了上下文,然后 push 掉打舞萌去了。
要是特首不这么做的话,那可能张三先生六个月之后想接手 Manboster 包的例行维护看到上面的注释人都傻了,这还能怎么维护,对吧。
(切PPT)
[P22]
然后来看看我们在这四个 Lesson 里面学了什么吧——
(切PPT)
[P23]
第一个是下游有些时候是上游最严厉的父亲,负责测试和 Code Review,然后是实践出真知,不要没有测就说不能用,跑了才知道,对吧。再是 RTFM,你得要有 FM 给我 R 对吧。最后是代码一定要有注释,如果我六个月之后因为没有注释看不懂我自己写的代码,我就扎聋自己的耳朵。
然后让我们来看看非常凌乱的现场:
(切PPT)
[P24]
看到那个 force-pushed 10 times 了吧,只能说我真的是力竭了,本来想去机厅休闲一会的结果comments直接如潮水般涌来。在线上 PR Review 毒打,IM 里面疯狂咨询请教,最后终于得以安心去了,在几个小时之后也成为了新贡献者,也算是圆了一个梦了。
然后让我们来看看TLDR吧——
(切PPT)
[P25]
首先,我在这里要感谢各位 reviewers 对代码、构建和注释的严谨、细致入微的指导和对细节的死磕。
尽管中间有一些误解和小冲突,但是最后这些小插曲都是得以妥善解决了。
然后我悟出来了一个点就是:打一个包就像生了一个孩子,你不能只管生不管养。你打个包送进库里那是你刚过入学考试,后面还有各种周考月考等着你呢。比如说打 patch,跟上游,做沟通,这些都是你要干的活。
但是,我的 Manboster,进源了三个小时,就…(哽咽)
(切PPT)
[P26]
打包了,进源了,然后呢?
我的 Manboster 进源 3小时后,热心群友 MultiMode Liu 就在我群里跟我反馈这匹配怎么一直说他无权限啊,这个如果扔到商业软件那边是要轰醒理科修复,级别为特别严重的P0事故的,我说这不可能啊,打开 GoLand 排查,结果完美复现,于是开始紧急修复,过了半个小时,0.2.2 来了,本来以为没啥问题了,结果热心群友再一装,配对没问题了,但是配对完又无权限了,再开 GoLand 继续修,这次仔仔细细排查了四五十分钟,测好了才发的 0.2.3,终于没问题了,版本发完大概是凌晨 0:30 了。
我们不如来看看平行宇宙的推演——
(切PPT)
[P27]
如果我不是 Manboster 的上游开发者,这个故事的剧情会怎么走呢?
(切PPT)
[P28]
还是三小时后报告问题,这时候我只能去 issues 里面开 issue 了,第二天 13:25,chihuo2105 慢悠悠的回复我说这没啥问题啊懒得修了,过了几天我实在忍不住了拉下仓库就是一顿 patch,AOSC的用户们终于可以用上能用的 Manboster 了,但是几个月之后,Manboster 发布了新版本,非常抱歉,有核心变更,导致我的 patch 直接废了,又得重新 patch 一遍…一遍又一遍,一遍何其多啊…
让我们把原来的时间线也拿上来吧——
(切PPT)
[P29]
可以发现什么?我去,天级别的更新差距!
(切PPT)
[P30]
那接下来就来讲讲像我这样上下游一体维护的 Pros & Cons 吧。
Pros 其实刚刚那个案例就能看出来了,沟通链条极短,甚至极端就是像我这样,上游修完立刻用AOSC的基础设施推送最新的版本。然后是用户反馈也能很快,定位与修复问题当然也能很快,理论上来说是可以在凉爽的夏夜进行无忧的安眠的,可惜那个凉爽的夏夜我顶着熊猫眼写代码。
当然也有很明显的 Cons,比如说你突然骑个自行车被人撞了,谁来维护这个包?你有时间和精力去学习下游的打包规范吗?这也是值得思考的,但是我个人是建议去尝试去学习。以及打包其实也挺 time-consuming 的,那我缺的时间这块谁给我补啊(otto音)
最后还有几句话想对大家说——
(切PPT)
[P31]
想说的一些话
首先是对想要尝试打包的朋友,不要害怕走出第一步,打就行了,缺什么就打什么,当然记得打之前问问作者。不要害怕开 PR,开就行了,Reviewer 们又不会吃了你。遇到问题也别慌,多请教多学就会了。
因为昨天帮助我一个朋友打包把我看的血压上升了,所以我还有关于 AI 的事情我也想在这里严肃的说一下,AI 不能代表你去学习,一个打包新人,如果是什么都不理解,什么都不会让AI写代码扔包,甚至是让 AI Harness 帮你开 PR,这在我看来真的是是一种极其不负责任的行为,我个人衷心希望大家能够从打包里面学到一些东西,毕竟学习到的东西是你自己的,而不是AI的,如果你使用了AI的话,也请参考《安同开源社区 AI 辅助工具使用及披露约定》进行披露。也希望大家也能对自己引入的包持续负责。
然后再是对上游开发者们,Works On My Machine是非常重要的,但是这并不等同于是可以或者是方便打包,作为上游开发者,我是衷心呼吁各位做好规范和文档,将版本和变更信息内容做准确,也希望大家可以尊重下游打包者的劳动,如果有时间的话也可以自己尝试打个包,体验一下下游的生活。
最后是对AOSC社区,Autobuild4 是一个好东西,但是这个好东西不能在口口相传中传递,否则像我这样的新人贡献者就非常容易抓瞎,所以我的建议是完善 Autobuild4 的文档,我承认我作为一个新人开发者虽然对 Autobuild 4 目前还是一知半解,没有像这些老登一样从头到尾都了解它在干什么,但是如果可以的话,能不能让我来做这件事?
好了,我想说的一些话说完了——
(切PPT)
[P32]
致谢
在这里非常感谢 AOSC 社区和杭电 ICU 社团可以给我这么一个上台的机会和平台,也感谢藿林郭勒的群友推我上去讲一把,还要感谢审稿志愿者们,群友 Aris 和我高中&大学同学 Muji 的 ideas 和审稿,也感谢大家能听我讲到最后,如果有任何问题想和我讨论的欢迎线下堵我或者是给我发 Email,感谢大家的聆听,谢谢大家。
(鞠躬)
后记
此为我在 2026.8.14 AOSCC 2026 上进行讲述的原手稿,无任何删改。PPT 和 录播回放链接已经提供,欢迎各位前去查看。正好搬了新宿舍,还是照样熬夜(被打)三个小时写出了这个原版,后面再做了慢慢打磨,希望它可以对你有一些力所能及的帮助。
书于 2026.7.9,湖南农业大学芷兰B宿舍
Revised in CRH380-BL Train, G7559 From Suzhou Industrial Park Station to Hangzhoudong Station, Aug 14, 2026.
以上。