读:AI 会杀死开源社区吗?从 Emacs 的故事说起
Sacha Chua 与剑桥人类学家 Matei Candea 关于 Emacs 和 AI 的对话记录,讨论了 AI 时代开源社区的命运。Sacha 从 2001 年开始用 Emacs,维护过 Planner Mode,每周编辑 Emacs News,是这个社区最老牌的长期观察者。Matei 研究科学社区的人类学,四年前开始学 Emacs,自己亲身体验了一把 AI 怎样改变一个人进入社区的方式。
一个人类学家的悖论
Matei Candea 在剑桥大学做民族志研究,采访过行为科学家,写过关于科学社区如何理解知识和技术的文章。四年前他纯粹出于好奇开始学 Emacs,一年后 ChatGPT 横空出世。
他发现自己掉进了一个悖论。他本来反对在学术工作中用 AI,觉得有点不靠谱。但恰恰是靠 ChatGPT 帮他写 Elisp 函数,他在四年内把 Emacs 用的炉火纯青,邮件走 mu4e,笔记用一个 Org ,一切都跑在 Emacs 里。但他并非纯粹 vibe coding,同时也在努力学习 Elisp,但 AI 确实把从"想做"到"做出来"的距离缩短了一大截。
Matei 自己也意识到了这个矛盾。开始自己问一些问题,比如学 Emacs 这件事在 AI 时代到底还有意义没有?AI 到底对这个社区有什么影响?带着这些问题,他和 Sacha Chua 聊了一次。从他们的对话里能看到,AI 对开源社区的冲击远比"好还是不好"复杂得多。
Emacs 社区靠什么活着
要理解 AI 的冲击,得先搞清楚 Emacs 社区为什么特别。
Sacha 的 Emacs 起源故事本身就是这个社区运作方式的缩影。她大学时在图书馆翻到 Unix Power Tools ,发现书里有个章节提到了 Emacs,还提到了 Tetris。她试了一下,觉得有意思。后来笔记本屏幕坏了,不想换。但有人做了 Emacspeak(Emacs 的语音辅助工具),让她在屏幕几乎看不了的情况下可以继续编程。从此她可以出门不带外接显示器,靠语音合成把活干完。
Emacs 里很多东西是某个人为了自己的需求做的,但做出来之后其他人也能用。就像刚才说的Emacspeak,没有哪家公司会去规划这种功能,但因为自由软件的传统,有人做了于是你就能用了。
Sacha 后来用 Planner Mode 管理笔记和博客,发现比其他待办管理工具灵活得多,她还能自己定制 RSS 导出。出于对Planner Mode的喜爱,她给作者 John Wiegley 发邮件说想帮忙修 bug,得到了同意。她当时还是菲律宾的大学生,突然就进了一个全球性的社区,邮件列表里的人对她犯了错也很包容。
这种公开学习(learning in public)是社区的核心机制。Sacha 从 2001 年开始写博客记录自己的 Emacs 学习过程。她很喜欢写博客分享她编写的那些函数,虽然经常会有人在评论区跟她说"这个功能其实内置了,你只需要改一下这个变量"。
Emacs 太大了,没人能知道所有的变量和函数,每个人搜索用的词也不一样。你把解决问题的过程公开出来,就会有人告诉你更好的方案。这些方案你不会想到去问 AI ,因为你自己都不知道自己不知道这些问题,但在别人演示或录视频的时候,你会看到他们顺手做了个操作,然后会好奇"那是怎么弄的"。这种学习方式依赖的压根不是工具,是人和人之间自愿的知识交换。
也正是因为公开学习,社区吸引了各种各样的人。不只有程序员。Sacha 每周编辑 Emacs News 时最享受的部分是发现社区里有面包师、编织者、被诊断为 ADHD 的人发现 Org Mode 是唯一能管理自己大脑的方式、高中音乐学生看了视频就自学入门、音乐人用 Emacs 做现场表演。很多人唯一写过的代码就是 Elisp,他们甚至不觉得自己在编程。Emacs 社区的多样性不是刻意营造的,而公开学习天然就有这个效果,你分享了你的用法,吸引了你没想到的受众,他们又被激发去分享自己的用法。
AI 切断了什么
AI 确实给 Emacs 新手带来了便利。你可以向一个无限耐心的"老师"提问,不用担心被嘲笑。Matei 自己就是靠这个加速了学习。但这些便利背后有代价,而且一个代价会引发另一个代价。
第一个代价:你不知道这段代码从哪来的。原来你在论坛或博客看到一段代码,顺藤摸瓜能找到原作者,看他的其他文章,学他的思路。现在 AI 给你一段代码,你不知道它抄的是谁的,也没法顺着找到更多人。你的学习范围被锁死了。
找不到原作者,你也就不去找了。以前遇到问题会去翻手册、读源代码,这些地方藏着只有深入阅读才能发现的巧妙设计。现在直接问 AI,它搜得到的东西你才看得到,你不知道自己不知道的东西,AI 也帮不了你。
顺带丢掉的还有许可证信息。Emacs 社区的代码绝大多数以 GPL 发布,意思是拿到代码的人有权修改、分享、在此基础上构建新东西。这个规则是社区运转 40 年的基础:你用我的代码,你也得让别人能用你的。但 AI 输出代码的时候从来不提这些,你拿到一段代码,不知道你无权不分享它。社区花 40 年建立起来的"用我的可以,但你也得分享"的规矩,就这么被绕过了。
最后是可维护性。有人用 AI 做出了在 Reddit 上很火的 Emacs 项目,但 Sacha 观察到这些项目往往很快就销声匿迹了。因为创建者自己不理解代码,没法持续维护。相比之下,Magit、Org Mode、consult、vertico 这些包之所以能持续地服务大量用户,是因为作者真正理解代码并持续投入。
Emacs 社区的抵抗力
尽管有这些冲击,Emacs 社区展现出了很强的抵抗力。背后原因就是40 年的 GPL 共享传统。
有人试图在 Emacs 社区做付费包(paywall package),社区的反应是有人看一眼他们的 README 就说"这个看起来是 vibe-coded 的,我可以更快地免费实现"。付费包反复被更好的免费实现打脸。
其他社区常见的 SaaS 模式在 Emacs 也行不通。原因很简单:Emacs 社区的人手里已经有所有源代码和全部使用权了,你拿一个收费的闭源包装来卖,他们自己写一个更好的免费版就是了。
Emacs 和 Org Mode 的维护者已经明确表示不会接受 LLM 生成的代码贡献,因为"必须有一个能对代码负责的人站出来"。到目前为止,Emacs 成功避免了困扰其他开源项目的 AI 生成 PR 洪水的问题。
但 Emacs 自己的老毛病也没有因此好转。Sacha 把 AI vibe coding 和 Lisp Curse 做了类比,Emacs 社区里每个人还是各写各的代码。甚至因为 AI ,这个问题变得越来越严重。因为不用看懂代码,代码的复用更难了。
出路:从"替我写"到"帮我想"
Matei 用自己的经历展示了一种AI的用法,那就是从让 AI 替你干活,变成让 AI 帮你想问题。
他最初让 AI替他写代码,后来变成解释代码,再后来变成"帮我想想这个问题有没有不同的解法",最后变成"帮我把这个问题组织好,发到论坛上"。
最后这一步很关键。他没有用 AI 来绕过社区,而是用 AI 来更好地参与社区。他担心在论坛上被人说"这问题太蠢了",所以先让 AI 帮他组织语言,让帖子更有可能得到积极回应。
Sacha 对此很认可,并建议了另一种用法,与其让 AI 生成代码,不如让 AI 问你问题,帮你理清自己到底想要什么,怎么把需求拆解成更小的任务。社区里人们对一个问题的回应往往比直接给答案更热烈,用 AI 帮你组织好问题再发到论坛,可能是一个更聪明的玩法。
Sacha 自己对 AI 的态度也印证了这一点。她但在代码方面只把 AI 当 成搜索引擎来用,而且这个搜索引擎还经常给出错误答案。
社区的本质是人
回到最初的问题,AI 会杀死开源社区吗?
从 Emacs 的故事来看,答案取决于你怎么用 AI。如果你用它绕过阅读源代码的过程,生成你不懂的项目,那它确实在瓦解社区赖以维系的东西。因为知识传承、交流、共享精神都不见了。
但如果像 Matei 后来做的那样,用它来降低参与社区的门槛,帮你问出更好的问题,加速而非替代学习过程,那它反而有助于社区的的发展。
Emacs 社区 40 年的历史证明了一件事。工具会变,但人们愿意分享、愿意互相帮助、愿意在公开场合犯蠢然后一起进步的愿望,比任何技术都持久。AI 能削弱这种愿望,也能加强它。怎么选,取决于我们自己。