原始标题: Han shot first (Friends)

发布日期: 2026-02-13 | 来源频道: @changelog

📝 深度摘要

1.节目元数据 (Meta Info)

  • 核心主题:Brett Cannon 回归《The Changelog》,畅谈 Python Steering Council 治理往事、Python 打包生态十年磨一剑的 lock file 标准幕后故事,以及 Star Wars 观影顺序的"极客之争"
  • 出场人物:Adam Stacoviak(主持人)、Jerod Santo(主持人)、Brett Cannon(Python Steering Council 创始成员、Python 核心开发者、UV/Ruff 作者 Charlie Reese 的"老对手")

2. 核心摘要 (The TL;DR)

这是《The Changelog》与老朋友 Brett Cannon 的一场重磅对话,时隔两年回归的 Brett 分享了他从 Python Steering Council 卸任的心路历程,以及他正在推进的"让 Python 安装变得更简单"的长期愿景。节目中,Brett 详细讲述了他历时六年推动 Python lock file 标准(pylock.toml)从零到落地的艰辛历程,解释了为何 Python 打包如此复杂——因为 Python 是"粘合剂语言",需要处理跨平台的 C 扩展、二进制 wheel 与 source distribution 的兼容性问题,这些复杂性是 Node.js 和 Rust 生态从未面对的。同时,Brett 也分享了他对 Astral 公司旗下 UV 快速崛起的看法:既高度认可其技术创新和用户体验革新,又表达了对单一工具主导生态的长期风险担忧——“我们必须对冲赌注”(hedging our bets),确保如果 UV 有一天倒下,社区不至于被锁定。节目后半段画风一转,主持人和 Brett 展开了关于 Star Wars 观影顺序的"极客之争",从 machete order 聊到 Anakin 与 Darth Vader 的史诗级剧透,从 Rogue One 的 cinematography 聊到"Han shot first"的原版正义,最后还讨论了 AI 克隆 David Attenborough 声音的伦理边界——这是一场横跨软件工程、治理哲学、影视文化和 AI 未来的深度漫谈。

3. 深度技术剖析 (Deep Dives)

议题一:Python Steering Council 治理机制与投票系统演进

背景/上下文

Python 社区在 2018 年经历了标志性事件——Guido van Rossum(Python 创始人兼 BDFL)突然宣布"退休",将 Python 的治理权交给社区。在此之前,Python 没有任何正式的投票机制,所有决策都靠 Guido 一人拍板。Brett Cannon 是首任 Steering Council 的五位成员之一,从 Steering Council 成立之初一直服务了五年,亲身经历了从"无 governance"到"有 governance"的艰难转型。

技术细节与挑战

Brett 在节目中详细还原了当年选择投票系统时的激烈博弈。他回忆道:“我们花了九个月的时间(从七月到十一月)就为了决定如何选择治理模式。” Guido 离职时只留下一句话——“你们自己决定怎么运行”,然后就和 Mike(另一位核心开发者)一起退出了日常决策。这意味着 Python 社区必须从零开始建立治理机制。

首先需要解决的是投票系统的选择问题。Brett 解释了几种主流投票机制的差异:

  • First Past the Post(简单多数制):北美政府选举常用,但容易导致"赢家通吃",小党派的声音被淹没。
  • Approval Voting(赞成投票):选民可以对任意数量的候选人投"赞成票",但不表达偏好程度。比如你欣赏 10 位候选人中的 5 位,你可以给这 5 位都投赞成票,但不区分你最想选谁。
  • Star Voting(评分再决选):这是 Python 最终采用的系统。选民对每位候选人打分(0-5 分),系统首先选出得分最高的两位候选人进行自动 runoff(决选),最终由在这两位之间被更多选民偏好的一方获胜。

Brett 特别强调:“Star Voting 让你真正表达偏好——你最想让谁当选打 5 分,普通满意打 1 分,不要的人打 0 分。如果把所有候选人都打 5 分,那就等于没表达偏好。” 这与 approval voting 形成了鲜明对比——后者只能表示"我认可这个人",无法区分"我强烈希望他当选"和"他当选我也接受"。

在选择具体治理模式(PEP 13)时,Steering Council 面对的选项从"继续 BDFL 模式"到"完全无政府主义"无所不包。Brett 回忆:“有人提出了一个类似无政府主义的方案,也有人提议保留 BDFL 但不指定具体人选——这让一些人感到恐慌,因为他们担心自己不喜欢的会被任命为 BDFL。”

关键结论/观点

Brett 分享了他对 Steering Council 权力本质的深刻洞察:“Steering Council 的权力不是我想让 Python 往哪个方向走就能推动它走,而是当社区有人提交 PEP 或提案时,我们有权利说 Yes 或 No。我们不是主动的推动者,而是被动的守门人。” 他还提到,由于日常工作量巨大,Council 根本没有时间制定"宏大计划"——每周的会议时间都被处理社区提交的具体请求填满了。

关于是否应该用 AI 替代自己做 Steering Council,Brett 坚决否定:“你希望有新鲜血液。你不想永远都是同一批人。你需要新人带来新想法,但也需要老人保留制度知识。” 他幽默地补充:“我可不想一个 AI 版的 Brett Cannon 永远霸占着 Steering Council 的位置。”


议题二:Python Lock File 标准的六年长征

背景/上下文

Lock file 是现代包管理器的标配——它记录了依赖树的具体版本,确保"在我机器上能跑"在任何人机器上都能跑。Node.js 有 package-lock.json,Cargo 有 Cargo.lock,但 Python 一直缺乏官方的 lock file 标准。Brett 从 2018 年开始着手解决这个问题,直到 2024 年 3 月 31 日,PEP 750(pylock.toml)才正式落地——历时将近七年。

技术细节与挑战

Brett 讲述了这个看似简单的问题为何如此棘手:

第一层复杂度:Python 是"粘合剂语言"

Python 的独特之处在于它能轻松绑定 C/C++ 库。“Node.js 也能做 native 绑定,但它们的解决方案非常 hacky——在 install script 里判断用户是什么系统,然后去下载对应的预编译二进制。” Brett 解释道,“Python 的 wheel 格式从一开始就解决了这个问题,我们有完整的元数据体系来处理 platform tags(cp312-cp312-macosx_10_9_x86_64 之类的)。”

这意味着 Python 的 lock file 必须处理:

  • 不同操作系统(Windows/macOS/Linux)的二进制
  • 不同的 CPU 架构(x86_64, arm64)
  • 只在特定平台存在的包
  • 源码编译(source distribution)与预编译 wheel 的混用

第二层复杂度:扁平命名空间

与 Node.js 的 node_modules(允许同一个包的不同版本共存)不同,Python 强制要求"同一时刻只能安装一个版本"。“如果你的项目 A 依赖 requests 2.25,项目 B 依赖 requests 2.26,Python 必须想办法协调这个冲突——这就是 resolver 要做的事情。”

第一次失败的尝试

Brett 的第一个 PEP 提案专注于安全性——只允许 lock wheel,不允许从源码构建。“我的想法是:如果你不编译,就不会有编译问题。但社区直接拒绝——很多人需要从源码构建来处理特定平台的编译需求。” Paul Moore(PEP delegate for packaging)告诉 Brett:“enough people are saying they don’t want this without this, so I’m not going to take this.”

第二次尝试:从零写一个 PIP 竞品

第一次失败后,Brett 决定自己写一个 proof of concept——一个全新的 Python 包管理器,证明 pylock.toml 格式是可行的。“我得从零实现一个 resolver,得自己解析包的元数据——因为 PIP 的很多代码不是以库的形式暴露的。” Brett 半开玩笑地说,“这就是为什么这件事花了六年——我相当于重写了半个 PIP。”

最终方案的核心是:pylock.toml 是一种格式标准,不是一种工具实现。Brett 与 UV、Hatch、PDM 等所有主流工具的维护者反复讨论,确保格式能覆盖他们的需求。“UV 说他们只差一个功能就完全满意了——workspace(monorepo 支持)。只要他们以后把这个加到标准里,就会用 pylock.toml 作为默认格式。”

关于 UV 的评价

Brett 对 Astral 公司和 UV 给予了复杂而诚实的评价:

“UV 是 2023 年 2 月发布的。我记得很清楚,因为我的 PEP 是 7 月发布的——我被他们打了个措手不及。他们发布时展示的性能数据让我也震惊了。”

但 Brett 也表达了担忧:“UV 是一家 VC 支持的公司,他们必须赚钱。虽然我认识 Charlie 和 Astral 的所有人,他们都是很好的人,但商业压力可能导致他们做出不符合社区利益的决定。我们见过太多类似的故事——Node.js 的 NPM 就是被 GitHub 收购后出现了一系列安全问题。”

“所以我正在做的是:推动 python.org 官方提供预编译 Python 二进制,让任何人不需要 UV 也能轻松获得 Python;同时标准化虚拟环境的位置标记文件,让 VS Code、Zed 之类的编辑器能统一找到虚拟环境——这样用户可以在 UV、Hatch、PDM 之间自由切换,不会被锁定。”

关键结论/观点

Brett 的核心观点是:“我们要对冲赌注”(hedging our bets)。“UV 很好,性能很棒,社区应该用它——但我们不能把鸡蛋放在一个篮子里。如果 UV 明天消失了,我们要有备选方案。标准化就是我们的备选方案。”


议题三:AI 时代的开源治理与声音克隆伦理

背景/上下文

节目中途,Adam 抛出了一个有趣的话题——他们刚刚讨论了"如果 David Attenborough 去世后,AI 能否继续用他的声音录制自然纪录片"。这引发了一场关于 AI 克隆已故艺术家声音的伦理讨论。

技术细节与挑战

Brett 提到了一个真实的案例:“James Earl Jones(达斯·维达的配音演员)已经把自己声音的录音授权给了一家乌克兰公司,这样 Disney 可以永久使用他的声音来为达斯·维达配音——即使他去世了。”

这与 David Attenborough 的情况有本质区别:

  • 达斯·维达是虚构角色,演员授权后 AI 克隆不存在"人格权"问题
  • David Attenborough 是真实的人,人们爱他不仅仅因为他的声音,还因为他这个人——如果 AI 生成的"David Attenborough"说了一些他本人从未说过的话,可能会损害他的遗产

Adam 提出了一个思想实验:“如果 David Attenborough 在遗嘱中明确允许’在我死后,我的基金会可以用我的声音继续制作自然纪录片’,你们能接受吗?”

Brett 的回答体现了典型的工程师思维:“如果这是他的明确意愿,并且有法律合同约束使用范围(比如只能用于自然纪录片、不能用于政治内容),那我支持。但如果是被某个公司偷偷克隆然后用来做广告,那我反对。”

关键结论/观点

这场讨论没有得出最终结论,但 Brett 的观点清晰:技术本身不是问题,授权和边界才是问题。“最可怕的情况是——某人可以在你死后伪造你的声音说任何话,这可能彻底毁掉你的 legacy。”


4. Homelab & 自托管车库 (The Homelab Corner)

Adam 在节目中分享了他最近的 homelab 折腾经历:

  • 投影仪计划:Adam 目前住在三层house的第三层,他计划如果孩子将来搬到楼下,就在一楼安装投影仪
  • 家庭影院:Adam 为了获得最佳观影体验,专门买了 Blu-ray 播放器来播放 4K 碟片。他抱怨在 Disney+ 上看《星球大战》的体验"像在洗热水澡"——画质和音频都对不起他的专业设备
  • 屏幕隔离:Adam 和伴侣在家里设立了"屏幕房",把电视和电脑集中在一个房间,以便控制孩子的屏幕时间。他们发现最大的诱惑是父母自己拿着手机——孩子看到 Elmo 或 Thomas the Tank Engine 的图片就立刻会要求看动画片
  • Incus + ZFS:Adam 最近在玩 Incus(下一代容器管理器)和 ZFS 文件系统,表示"这太有意思了"——这是 Linux 容器和文件系统领域的最新前沿

Brett 也提到了他的 Rust 项目——Unix 上的 Python Launcher(py 命令),这个工具可以自动在用户的 $PATH 中找到最新版本的 Python,还能自动检测当前目录或父目录中的 .venv 虚拟环境并优先使用它——“这是我史前的 workflow tool,比 UV 做的类似功能早了很多年。”


5. AI 与 Agent 工作流 (AI & Agentic Workflows)

虽然这不是本期节目的主要议题,但有几个值得记录的 AI 相关讨论点:

  • AI 辅助编程的现状:Brett 提到,他在推动 Python 预编译二进制项目时,预计 AI agent 将在未来扮演重要角色——“当一个 AI agent 在一台全新的机器上帮助一个新开发者搭建环境时,预编译 Python 是关键基础设施”
  • 代码生成与 CI/CD:Adam 提到了 GitHub Actions 的性能问题——“GitHub Actions 太慢了,我们的朋友 Namespace 解决了这个问题,他们的缓存策略可以显著加速 CI/CD”
  • Tinder Data 的 Agentic Postgres:节目中插播了 Tinder Data 的广告——他们为 AI Agent 专门设计了"agentic Postgres",集成了向量数据库、关系型数据存储和 MCP 协议支持,还支持"零拷贝 fork"让 Agent 在隔离环境中进行破坏性实验而不影响生产数据库

6. 行业洞察与"暴论" (Industry Insights & Hot Takes)

  • “Han Shot First"正义:Adam 表达了对 Lucasfilm 修改《星球大战》原版场景的强烈不满。“我不管 CGI 添加了什么外星生物——只要你敢改 Han Solo 的性格,我就跟你急。原始版本中他在酒吧先开枪,这是他作为走私犯的角色根基,也是他后来加入义军的成长弧线的起点。”
  • Lost 前三季 vs 后续烂尾:Jerod 和 Adam 讨论了 Lost 的兴衰。” Damon Lineloff 声称从一开始就想好了完整故事弧线——但实际上他只想了三季。后来收视率压力下他们被迫续订,最终结局根本无法兑现最初的承诺。" Adam 说,“这是电视剧历史上最令人失望的结局之一。”
  • Ted Lasso 第三季:Adam 认为第三季比前两季更慢、更长(从半小时延长到一小时),“第一季本质上是’如何做一个好经理’的教学故事,第三季变成了人物深度研究,不再是纯粹的喜剧。”
  • Babylon 5 的遗产:Jerod 提到 Babylon 5 是"少数从一开始就规划好五季完整故事弧线并成功兑现"的科幻剧集——这与 Lost 形成了鲜明对比。

7. 工具雷达 (Tool Radar & Shoutouts)

  • UV:Astral 出品的 Python 包管理器,以性能著称(“Exquisite performance”),支持 lock file、workspace、预装 Python 等功能
  • Hatch / PDM:Python workflow tools 的另外两个主流选项
  • Python Build Standalone:Astral 维护的预编译 Python 二进制项目,Brett 正在推动将其 patches 合入 CPython 主线,最终目标是让 python.org 直接提供可移植的 Python 二进制
  • Zed:Brett 最近从 VS Code 切换到了 Zed 编辑器
  • Namespace:Adam 推荐用于加速 GitHub Actions 的 CI/CD 工具
  • TigerData:为 AI Agent 设计的数据库,集成向量搜索和 MCP 协议
  • Incus:新一代 Linux 容器管理器(LXC 的继任者)
  • Ruff:Astral 出品的超快 Python linter,用 Rust 编写

8. 金句摘录 (Golden Quotes)

“You want turnover. You don’t want the same gray beard showing up. You want new people to come in with some old people around who have inherent knowledge of how things ended up and why they’re there.” — Brett Cannon(论 Steering Council 需要新鲜血液)

“The steering council’s job is to effectively be the final decider… It’s just a body that says yes or no for stuff that they get asked.” — Brett Cannon(Steering Council 的真实权力边界)

“I view this as hedging our bets as a community to help alleviate the load on them and anyone else who does this workflow stuff.” — Brett Cannon(解释为何要标准化而非盲目拥抱 UV)

“If someone can literally put words in your mouth after you’re gone, they can just say you’re saying things you never said—and that could ruin your legacy.” — Brett Cannon(AI 克隆声音的最大风险)

“Han shot first. Please don’t change things after the fact.” — Adam Stacoviak(原版星球大战影迷的心声)


9. 赞助商与商业信息 (Sponsors)

  • Fly.io:本期节目合作伙伴,平台宣言是"for devs who just want to ship, build fast, run any code fearlessly"
  • Namespace:GitHub Actions 加速工具,“Drop in, works right alongside your existing GitHub actions with almost zero config”,“one line change"即可提速
  • Tiger Data:Agentic Postgres,“native model context protocol servers, MCP, hybrid search, and zero copy forks”,支持 AI Agent 直接与数据库对话,支持"fork"功能让 Agent 在隔离环境中进行破坏性实验
  • Python Build Standalone:Astral 维护的预编译 Python 二进制项目,正在被 Brett 推动进入 Python 官方生态

Summary generated from transcript dated 2026-02-13, Changelog episode “Han shot first (Friends)”, featuring Brett Cannon discussing Python governance, lock file standards, and Star Wars viewing orders.


📺 播客地址


播客时长: 121分钟