

专家系统:Edward Feigenbaum 与 DENDRAL | 大语言模型前史05知道一份化学样品的组成,也拿到了质谱图,为什么程序还需要化学家的判断?本期《原代码》从 Edward Feigenbaum 与合作者的 DENDRAL 研究出发,追踪专家经验怎样成为可输入、可修改、也可以由程序学习的知识,再沿着 MYCIN 与 R1 的实践,讨论这套架构怎样扩展,以及它与大语言模型的不同路径。 从一张留下多个答案的谱图,到一条可以重新检查的判断:机器保留了哪个候选,我们又能不能找到它所依据的条件? 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 时间轴 00:00 数据没有直接给出答案 03:24 程序还不知道什么 06:08 把一个判断写进去 10:03 规则也成为要寻找的答案 13:01 那个还没有被排除的结构 15:18 换知识,还要不要换方法 19:50 知识进入了另一种地方 24:12 留下可以检查的判断 本期资料 - [Robert K. Lindsay、Bruce G. Buchanan、Edward A. Feigenbaum、Joshua Lederberg:DENDRAL: a Case Study of the First Expert System for Scientific Hypothesis Formation(1993)](https://digirepo.nlm.nih.gov/ext/document/101584906X1027/PDF/101584906X1027.pdf) - [Bruce Buchanan、Georgia Sutherland、Edward Feigenbaum:Heuristic DENDRAL(1969)](https://stacks.stanford.edu/file/druid:pf885vk0607/pf885vk0607.pdf) - [Bruce G. Buchanan 等:Automatic Rule Formation in Mass Spectrometry by Means of the Meta-DENDRAL Program(1976)](https://stacks.stanford.edu/file/druid:wg933hw2342/wg933hw2342.pdf) - [Bruce G. Buchanan、Edward A. Feigenbaum:DENDRAL and Meta-DENDRAL: Their Applications Dimension(1978 年技术报告)](https://ftpmirror.your.org/pub/misc/bitsavers/pdf/stanford/Stanford_CS_TR_Collection_2025-12-12/PDF/1978/CS-TR-78-649.pdf) - [Bruce G. Buchanan、Edward H. Shortliffe 编:Rule-Based Expert Systems,第 36 章 Major Lessons from This Work(1984)](https://shortliffe.net/Buchanan-Shortliffe-1984/Chapter-36.pdf) - [Judith Bachant、John McDermott:R1 Revisited: Four Years in the Trenches(1984)](https://ojs.aaai.org/aimagazine/index.php/aimagazine/article/view/445) - [Qwen Team:Qwen3 Technical Report(2025,v1)](https://arxiv.org/abs/2505.09388v1) - [Patrick Lewis 等:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks(2020)](https://papers.nips.cc/paper/2020/file/6b493230205f780e1bc26945df7481e5-Paper.pdf) 源码与工程记录 - [Qwen3.5-397B-A17B:模型说明(本期核对的固定版本)](https://huggingface.co/Qwen/Qwen3.5-397B-A17B/blob/8472618112abcbd45acbcdc58436aff4233c23f7/README.md) - [同版本 config.json:模型结构与层配置](https://huggingface.co/Qwen/Qwen3.5-397B-A17B/blob/8472618112abcbd45acbcdc58436aff4233c23f7/config.json) 访谈与历史原声来源 - [Computer History Museum:Edward Feigenbaum 接受 Nils Nilsson 采访,Session 1(2007-06-20)](https://www.computerhistory.org/collections/catalog/102658091/)——本期两段历史原声均来自这场访谈,分别谈向化学家求取知识,以及从数据中学习规则的设想与范围。[馆方整理文本](https://archive.computerhistory.org/resources/access/text/2013/05/102702002-05-01-acc.pdf)。 - [Carl Djerassi:Using Artificial Intelligence in Chemistry(2005 年录制,Web of Stories)](https://www.webofstories.com/play/carl.djerassi/88)——用于核对他对结构推断与课堂应用的回忆,本期未剪入这场访谈的声音。 说明与延伸阅读 - DENDRAL 是多方合作的结果。Joshua Lederberg 提出科学任务并研究结构枚举,Georgia Sutherland、Bruce Buchanan 与化学专家等共同推动程序实现和知识获取;MYCIN、R1 各有自己的团队,不能都归到 Feigenbaum 一人名下。 - Heuristic DENDRAL 与 Meta-DENDRAL 的任务不同:前者利用知识约束、提出并比较结构,后者研究从已知结构及质谱中形成规则。程序学习规则仍依赖既定表示和评价办法,不等于从零自行发现全部知识。 - CONGEN 找到另一个符合现有条件的结构,说明这些条件还没有唯一确定答案,不直接证明原论文的结构错误。节目使用的样品与排障例子是机制说明,不是历史实验现场的复原。 - 1978 年材料采用的是二月技术报告版,不能与同名期刊版本混用页码。2007 年原声是 Feigenbaum 的后见回忆;其中转述 Carl Djerassi 的话,并不是 Djerassi 本人的录音。 - 本期对显式知识库与推理机的讨论主要以 MYCIN / EMYCIN 为例,不代表所有专家系统都只有一种结构;规则系统也并非天然不能处理不确定性或因果知识。对语言模型的结构比较限于所引用的公开实例,RAG 的文档检索也不等于经典规则推理。 - 第七章简要回看了不同研究起点:[Cyc 的显式常识](https://arxiv.org/pdf/2308.04445v1)、[Soar 的统一认知架构](https://soar.eecs.umich.edu/home/About/)、[Rodney Brooks 的感知与行动](https://people.csail.mit.edu/brooks/papers/representation.pdf),以及 [Marcus Hutter 的通用智能理论](https://arxiv.org/abs/cs/0004001v1)。这些路线没有整体成为本期所述语言模型的底座,不等于它们没有影响,也不意味着各自已经完成通用智能。
感知机:Frank Rosenblatt 与会犯错的机器 | 大语言模型前史04一个研究人的心理学家,为什么要造一台会改变判断的机器?本期《原代码》从 Frank Rosenblatt 的心理学研究出发,跟随一张卡片在训练前后得到的不同回答,理解经验怎样改变模型中的数值;再沿着词语表示和语言模型预训练,看看后来的人如何衡量这项工作的价值。 从一张可以调整的评分单,到一张随训练移动的词语地图:机器能够改变什么,研究者就需要检验什么,而后来方法的用途,也让最初那个关于学习的问题获得了新的观察尺度。 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 时间轴 00:00 研究人的人,为什么造机器 02:08 让机器改口:训练改变了什么 05:08 再练一遍,也未必能解决 07:40 分对了,然后呢:分类装置与脑模型 10:51 词语之间,能不能借用经验 14:02 先从文本练习,再把所学用于更多任务 17:00 后人记住了什么:问题、方法与历史 20:53 再把那个输入交给机器 本期资料 - [Frank Rosenblatt:The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain(1958)](https://homepages.math.uic.edu/~lreyzin/papers/rosenblatt58.pdf) - [Frank Rosenblatt:Principles of Neurodynamics: Perceptrons and the Theory of Brain Mechanisms(1961 年技术报告)](https://archive.org/download/DTIC_AD0256582/DTIC_AD0256582.pdf) - [Joe Pater:Generative Linguistics and Neural Networks at 60: Foundation, Friction, and Fusion(2018 年待刊稿)](https://people.umass.edu/pater/pater-perceptrons-and-syntactic-structures-at-60.pdf) - [Melanie Lefkowitz / Cornell Chronicle:Professor's Perceptron Paved the Way for AI - 60 Years Too Soon(2019)](https://news.cornell.edu/stories/2019/09/professors-perceptron-paved-way-ai-60-years-too-soon) - [Yoshua Bengio、Réjean Ducharme、Pascal Vincent、Christian Jauvin:A Neural Probabilistic Language Model(2003)](https://jmlr.org/papers/volume3/bengio03a/bengio03a.pdf) - [Alec Radford、Karthik Narasimhan、Tim Salimans、Ilya Sutskever:Improving Language Understanding by Generative Pre-Training(2018)](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf) - [OpenAI:GPT-4 Technical Report(2023)](https://cdn.openai.com/papers/gpt-4.pdf) 说明与延伸阅读 - 卡片分拣和“杯子 / 碗”句子都是节目自拟的教学例子,用来解释训练和表示;它们不是 Mark I 当年的实验记录。1958 年的软件模拟与 Mark I 实体机器也不是同一件事。 - 本期引用的 Principles of Neurodynamics 是 1961 年技术报告,不是 1962 年书版。Rosenblatt 与团队已经研究过可变的前端连接和多层组织,不能用最简单的感知机示意图概括全部研究。 - 指定纠错程序找到解的保证有明确前提,包括当前分类存在可实现的解、训练输入持续重现。训练例子分对,不等于新情境表现已经得到保证,也不等于模型充分解释了大脑。 - Richard O'Brien 的评价来自 Cornell 2019 年文章对早年悼念讲话的转引;Thorsten Joachims 的意见来自该文采访。本文与 Joe Pater 的学术回顾提供不同评价角度,不能替代全部技术史证据。本期未剪入第三方历史原声。 - 对 Marvin Minsky 与 Seymour Papert 著作及其影响的讨论,采用 Joe Pater 的有归属回顾,不作“一本书单独终结神经网络研究”的判断。后来的语言模型论文说明方法怎样工作,不证明 Rosenblatt 预见了今天的模型,或全部原始脑机制设想已经实现。 - 文本预测中的目标来自原文,不是对事实的最终判决;对话里的纠正改变了上下文,也不能单凭一次改口就推断模型即时更新了参数。
信息熵:Claude Shannon 与下一个字母 | 大语言模型前史03一台完全不理解句子含义的机器,能不能只根据已经出现的字符猜中下一个字符?本期《原代码》从 Claude Shannon 在 MIT 面对复杂继电器线路的场景出发,经过一九四八年把消息写成概率选择、一九五一年让人逐字符猜测英语,再沿 Weaver 的机器翻译设想、IBM 统计语言模型、神经概率语言模型和生成式预训练,追问同一个预测错误怎样从测量语言,变成评价模型、修改表示和预训练参数的入口。 从继电器上的一次开与关,到聊天窗口里的下一个 token:数学让两者都能被写成选择、条件和概率。中间近九十年的研究不断改变预测者、表示和误差用途,却没有让概率自动回答语言为何有意义、机器是否理解自己生成的文字。 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 时间轴 00:00 在微分分析机旁认识 Shannon:机器很大,选择很小 01:38 把消息写成概率选择,先把语义放到模型外 04:15 翻一本书,生成越来越像英语的乱码 06:36 Weaver 把上下文与统计带进机器翻译问题 08:46 正确字符排在第几次:一九五一年猜字实验 12:31 预测者从人变成模型,交叉熵开始评价模型 14:50 猜错以后,词表示和网络参数也会改变 17:01 预测误差进入预训练,下一 token 仍只是系统入口 21:26 如果 Shannon 坐到今天的聊天窗口前 本期资料 - [Robert G. Gallager:《Claude E. Shannon: A Retrospective on His Life, Work, and Impact》](https://mast.queensu.ca/~math474/gallager-on-shannon-it2001.pdf) - [Claude Shannon:《A Mathematical Theory of Communication》校订重印](https://people.math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf) - [Warren Weaver:《Translation》备忘录](https://www.mt-archive.net/50/Weaver-1949.pdf) - [Claude Shannon:《Prediction and Entropy of Printed English》](https://www.princeton.edu/~wbialek/rome/refs/shannon_51.pdf) - [Peter Brown 等:《An Estimate of an Upper Bound for the Entropy of English》](https://aclanthology.org/J92-1002/) - [Yoshua Bengio 等:《A Neural Probabilistic Language Model》](https://www.jmlr.org/papers/v3/bengio03a.html) - [Radford / Narasimhan / Salimans / Sutskever:《Improving Language Understanding by Generative Pre-Training》](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf) - [OpenAI:《GPT-4 Technical Report》](https://cdn.openai.com/papers/gpt-4.pdf) - [Qwen Team:《Qwen3 Technical Report》](https://arxiv.org/abs/2505.09388) - [Claude Shannon:《The Bandwagon》](https://doi.org/10.1109/TIT.1956.1056774) 访谈与历史原声来源 本版没有剪入第三方历史原声。IEEE History Center 页面证明 Claude Shannon 1982 口述史与本人声音入口存在,但没有片段同时通过出版许可、上下文、人工句界复听和权利门禁。 - [IEEE History Center:Oral-History: Claude E. Shannon](https://ethw.org/Oral-History:Claude_E._Shannon) 说明与延伸阅读 - 一九四八年论文建立通信、熵和随机英文近似;一九五一年论文才使用人类逐字符猜测估计英语熵,实验不是机器训练。 - 语义被放到通信工程模型之外,不代表意义不存在;低熵也不直接等于有意义、高质量或被理解。 - 一九五一年论文没有给 the subject 具名,不能自行把 Mary E. Shannon 写成唯一受试者。 - Weaver 与 Brown 直接点名 Shannon;Bengio 2003 和生成式预训练论文只支撑方法 / 指标继承或方法汇流,不构成逐篇直接引用的发明链。 - 下一 token 预训练不足以解释当前聊天系统的全部行为,也不能单独证明理解;Shannon 没有留下对 LLM 的实际评论。
“冯·诺依曼架构”:从 EDVAC 到大语言模型 | 大语言模型前史02六万多个计算单元都已就位,为什么还会一起停下来?本期《原代码》从 2017 年第一代张量处理器等待权重的场景出发,回到 ENIAC 换任务需要重新设置开关和电缆、EDVAC 团队把指令与数值都放进机器的转折,再沿着嵌入式设备、云端系统、编程语言、高速缓存、脉动阵列和注意力算法,追问谁保存状态、谁决定下一步、依赖怎样抵达并被复用。 从换一类任务就要重新布置机器,到大语言模型生成下一个字词单位:机器的外形不断改变,反复出现的却是同一个工程问题——下一步需要的东西,能不能及时到达正在等待它的执行者。 时间轴 00:00 六万多个计算单元为什么一起等待 02:11 从重新接线到把下一步存进机器 07:02 门锁、云端与组织类比:关系不是蓝图 12:22 语言怎样重新分配开发者与工具的劳动 17:47 CUDA 与 Triton:性能压力让底层重新显形 22:13 高速缓存与脉动阵列怎样复用依赖 27:02 回到张量处理器与注意力算法 30:26 生成下一个字词单位前,依赖从哪里来 本期资料 - [John von Neumann:《First Draft of a Report on the EDVAC》](https://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/k-8-pdf/k-8-u2593-Draft-EDVAC.pdf) - [J. Presper Eckert / John W. Mauchly:《Automatic High Speed Computing: A Progress Report on the EDVAC》](https://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/k-8-pdf/k-8-u2736-Report-EDVAC.pdf) - [Burks / Goldstine / von Neumann:《Preliminary Discussion of the Logical Design of an Electronic Computing Instrument》](https://safari.ethz.ch/digitaltechnik/spring2018/lib/exe/fetch.php?media=preliminary_discussion_burks1946.pdf) - [Microchip:AVR32DA28/32/48 Data Sheet](https://ww1.microchip.com/downloads/en/DeviceDoc/AVR32DA28-32-48-Data-Sheet-40002228B.pdf) - [Barroso / Holzle / Ranganathan:《The Datacenter as a Computer》](https://pages.cs.wisc.edu/~shivaram/cs744-readings/dc-computer-v3.pdf) - [John Backus 等:《The FORTRAN Automatic Coding System》](https://softwarepreservation.computerhistory.org/FORTRAN/paper/BackusEtAl-FortranAutomaticCodingSystem-1957.pdf) - [Dennis Ritchie:《The Development of the C Language》](https://archive.org/download/DevelopmentOfC/10.1.1.177.9578.pdf) - [NVIDIA:CUDA C++ Programming Guide 12.4](https://docs.nvidia.com/cuda/archive/12.4.1/pdf/CUDA_C_Programming_Guide.pdf) - [Tillet / Kung / Cox:《Triton》](https://eecs.harvard.edu/~htk/publication/2019-mapl-tillet-kung-cox.pdf) - [Maurice Wilkes:《Slave Memories and Dynamic Storage Allocation》](https://www.cs.princeton.edu/courses/archive/fall10/cos375/WilkesCacheElectronics.pdf) - [H. T. Kung:《Why Systolic Architectures?》](https://www.eecs.harvard.edu/~htk/publication/1982-kung-why-systolic-architecture.pdf) - [Jouppi 等:《In-Datacenter Performance Analysis of a Tensor Processing Unit》](https://arxiv.org/pdf/1704.04760) - [Tri Dao 等:《FlashAttention》](https://proceedings.neurips.cc/paper_files/paper/2022/file/67d57c32e20fd0a7a302cb81d36e40d5-Paper-Conference.pdf) - [Pope 等:《Efficiently Scaling Transformer Inference》](https://proceedings.mlsys.org/paper_files/paper/2023/file/c4be71ab8d24cdfb45e3d06dbfca2780-Paper-mlsys2023.pdf) 访谈与历史原声来源 本版没有剪入第三方历史原声。Smithsonian finding aid 只证明相关馆藏入口存在;本轮没有取得同时通过媒体访问、说话人、上下文、人工句界复听和权利门禁的片段。 - [Smithsonian Computer Oral History Collection finding aid](https://sirismm.si.edu/EADpdfs/NMAH.AC.0196.pdf) - [Smithsonian:John W. Mauchly oral history record](https://mads.si.edu/mads/id/NMAH-AC0196_mauc730206) 说明与延伸阅读 - First Draft 没有使用后来固定的 stored program 术语;节目先解释 orders 与 numbers 都进入 memory 的具体动作,再使用后见名称。 - “冯·诺依曼架构”不等于今天所有计算机共享同一物理结构,也不等于 von Neumann 独自完成 EDVAC、IAS 或现代计算机。 - 智能门锁、云端服务和公司组织只用于比较角色关系;它们不是 EDVAC 的物理缩放,公司也没有机器式的唯一控制器和统一时钟。 - FORTRAN、C、CUDA 与 Triton 展示控制权如何在开发者与工具之间移动,不构成“语言越底层越快”的单向排名。 - TPU、FlashAttention 和大语言模型推理构成当代镜照,不证明 EDVAC 直接导致现代 AI,也不证明所有模型都由同一种内存瓶颈主导。
模仿游戏:Alan Turing 与图灵机 | 大语言模型前史01一台只按有限规则读写符号的抽象机器,为什么十四年后会进入“机器能不能思考”的讨论?本期《原代码》从 1936 年的纸带、当前格与 universal machine 出发,经过 Bombe、Colossus 和 ACE 的不同工程边界,再回到 1950 年的 imitation game,追踪一个过大的问题如何被改写成可执行动作或可观察游戏。 从一格纸带,到一台可以读取另一台机器描述的 universal machine;从专用密码分析设备,到会被讨论“能不能思考”的机器:问题没有变得更小,只是换成了可以检查、比较和继续追问的形式。 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 ## 时间轴 00:00 冷开场:先把问题换成一台机器 04:48 有效计算怎样落到可执行动作 11:13 平行定义、公开修正与人物履历 14:06 Bombe、Colossus 与“通用”边界 17:10 ACE 让抽象模型接受存储、硬件和团队约束 20:48 程序成为可以被组织的对象 23:25 从 unorganised machines 到 child machine 25:31 Jefferson、意识异议与 imitation game 29:31 从“机器能否思考”到“下一个词” ## 本期资料 - [A. M. Turing:《On Computable Numbers》](https://www.cs.ox.ac.uk/activities/ieg/e-library/sources/tp2-ie.pdf) - [A. M. Turing:《A Correction》](https://people.irisa.fr/Nicolas.Markey/PDF/Papers/plms-s2-43(6)-Tur.pdf) - [GCHQ:The Pyry Forest Meeting](https://www.gchq.gov.uk/information/the-pyry-forest-meeting) - [GCHQ:Alan Turing](https://www.gchq.gov.uk/person/alan-turing) - [GCHQ:Gordon Welchman](https://www.gchq.gov.uk/person/gordon-welchman) - [Computer History Museum:Timeline of Computer History: Computers](https://www.computerhistory.org/timeline/computers/) - [The National Museum of Computing:Colossus](https://www.tnmoc.org/colossus) - [NPL:Turing's ACE proposal](https://www.npl.co.uk/getattachment/ea5c6585-0929-4713-962c-2306f8dcf1f2/turing-proposal-Alan-LR.pdf?lang=en-US) - [NPL:Intelligent Machinery](https://www.npl.co.uk/getattachment/84156b8e-1b00-45b7-9f5e-3179cfa458c5/80916595-Intelligent-Machinery.pdf?lang=en-US) - [NPL:Progress Report on the ACE](https://www.npl.co.uk/getattachment/9ca58e00-339b-4e0c-b2a4-7c4d1c937e7c/100510714-Progress-Report-on-the-ACE.pdf?lang=en-US) - [A. M. Turing:《Computing Machinery and Intelligence》](https://courses.cs.umbc.edu/471/papers/turing.pdf) - [OpenAI:《GPT-4 Technical Report》](https://arxiv.org/pdf/2303.08774) ## 源码与工程记录 本期没有可供听众运行的独立源码仓库;ACE 的设计与协作记录见: - [King's College:ACE proposal archive record](https://turingarchive.kings.cam.ac.uk/unpublished-manuscripts-and-drafts-amtc/amt-c-32) - [AlanTuring.net:ACE archive catalogue](https://www.alanturing.net/Turing_archive/archive/index/aceindex.html) - [King's College:Intelligent Machinery archive record](https://turingarchive.kings.cam.ac.uk/unpublished-manuscripts-and-drafts-amtc/amt-c-11) ## 访谈与历史原声来源 本版没有剪入第三方历史原声。BBC 明确说明 1951 年广播没有存世录音;[Mark Gatiss 的视频重读](https://www.bbc.co.uk/videos/cqvv8n1d8dxo)不是 Turing 原声。[King's College 的 1951 广播稿目录](https://turingarchive.kings.cam.ac.uk/publications-lectures-and-talks-amtb/amt-b-5)仅作为文字与声音边界参考。 ## 说明与延伸阅读 - 1936 年的 tape 是纸带的数学类比,不是后来 Colossus 的打孔纸带,也不是已经造出的硬件蓝图。 - Bombe 是专用密码分析设备;波兰先行、Welchman 改进和制造团队必须保留,不能把它写成 Turing 单人完成的通用计算机。 - ACE proposal 和 1948 年的进度报告显示,通用计算进入了存储、硬件、编程和协作组织的约束;Turing 的 proposal 不等于整个 ACE 项目由一人完成。 - imitation game 是对“机器能不能思考”问题的替换,不是意识的测量仪,也不是今天所有“图灵测试”说法的唯一版本。 - GPT-4 technical report 只提供一个当代模型的最小技术描述;本期不把它写成 Turing 预见了 Transformer、RLHF,或已经表达过对大语言模型的明确态度。
回到未来-Python 2、Python 3 与十多年的迁移一门以容易开始著称的语言,为什么会主动发布一个不能让大量旧代码原样运行的新版本?本期《原代码》从一行可运行的 .py 文件出发,回到 Python 的发明与第一次公开分发,沿着文本与字节的断裂future 的迁移工作台、包维护者的双版本负担,以及 Dropbox 和 OpenStack 的工程路径,追踪这场迁移怎样被拆成许多可以执行的中间状态。 从两个解释器之间的兼容桥,到包、发行版、工具链和企业系统依次撤走旧路径:所谓“回到未来”,不是让过去在某一天同时消失,而是让越来越多的人终于不必再携带它。 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 时间轴 00:00 一行代码,拨回 1989 04:01 核心团队为什么选择 break 07:29 普通开发者怎样过河 12:31 包维护者站在桥中间 17:57 一个产品与一张依赖图 23:54 妥协不是一个动作 29:04 生态怎样改变默认选项 32:39 三种兼容预算 37:20 回到现在与未来 本期资料 - [Guido van Rossum:Foreword for Programming Python](https://www.python.org/doc/essays/foreword/) - [PEP 3000:Python 3000](https://peps.python.org/pep-3000/) - [What's New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) - [Brett Cannon:Why Python 3 exists](https://snarky.ca/why-python-3-exists/) - [PEP 373:Python 2.7 Release Schedule](https://peps.python.org/pep-373/) - [PEP 414:Explicit Unicode Literal for Python 3.3](https://peps.python.org/pep-414/) - [PEP 466:Network Security Enhancements for Python 2.7.x](https://peps.python.org/pep-466/) - [Python.org:Sunsetting Python 2](https://www.python.org/doc/sunset-python-2/) - [PEP 602:Annual Release Cycle for Python](https://peps.python.org/pep-0602/) 源码与工程记录 - [Python-Future:引入 futurize --stage1 / --stage2 的 commit](https://github.com/PythonCharmers/python-future/commit/e8ead804f2c7e8f6e49a574bc1e98b7c1a3dc5f3) - [Python-Future:两阶段迁移文档 commit](https://github.com/PythonCharmers/python-future/commit/c67154db82e24e4690781a37828456f8c7d21ad5) - [Python-Future v0.11 Quick-start](https://raw.githubusercontent.com/PythonCharmers/python-future/v0.11/docs/quickstart.rst) - [Django:Experimental Python 3 support](https://www.djangoproject.com/weblog/2012/aug/19/experimental-python-3-support/) - [Dropbox:How we rolled out one of the largest Python 3 migrations ever](https://dropbox.tech/application/how-we-rolled-out-one-of-the-largest-python-3-migrations-ever) - [Dropbox:Incrementally migrating over one million lines of code from Python 2 to Python 3](https://dropbox.tech/application/incrementally-migrating-over-one-million-lines-of-code-from-python-2-to-python-3) - [OpenStack:Python 3 Sprint at PyCon 2014](https://wiki.openstack.org/w/index.php?title=Python3/SprintPycon2014&oldid=49141) - [OpenStack:Python 2 Deprecation Timeline](https://governance.openstack.org/tc/resolutions/20180529-python2-deprecation-timeline.html) - [OpenStack:Drop Python 2.7 Support](https://governance.openstack.org/tc/goals/completed/ussuri/drop-py27.html) - [pip 21.0 release notes](https://pip.pypa.io/en/stable/news/#v21-0) 访谈与历史演讲来源 本版音频没有剪入第三方访谈或演讲片段;声音由 11 章旁白、原创片头《等待机器》和原创片尾《加速与混乱》组成。以下载体仅作为资料参考,未进入本版音频: - [Guido van Rossum:Python 3000,Google TechTalk,2006](https://www.youtube.com/watch?v=66NThkgfc1U) - [Python 3 Panel,PyCon Australia,2011](https://www.youtube.com/watch?v=dt3JpHo-gNg) - [Python 3 Adoption and Barriers,Montreal-Python,2014](https://www.youtube.com/watch?v=iFTqUTye5Hc) - [Dropbox:Incrementally Migrating Over One Million Lines of Code from Python 2 to Python 3,PyCon 2019](https://www.youtube.com/watch?v=O4Fuz7ubIoE) 说明与延伸阅读 - Python 3.5 不是本期认定的唯一生态转折点。2015 至 2016 年的包索引分析只能说明活跃库的 Python 3 供给在改善,不能把整个迁移归结为一个解释器版本。 - Python 2.7 的支持期限从 2015 年延到 2020 年,为不能立即迁移的用户和供应商留下了时间;现有材料不足以证明“延期本身导致拖延”。 - 2020 年标记的是 CPython 上游支持和许多共同期限的重要边界,不是所有 Python 2 系统同时消失的日期。pip、Linux 发行版、商业托管环境和嵌入式产品按各自节奏退出或保留旧运行时。 - Dropbox 的双解释器、统一源码和灰度发布只说明其桌面客户端的迁移路径;OpenStack 的依赖、CI 与治理顺序只说明其受技术委员会治理的项目。两者都不是所有企业迁移的通用模板。 - 本期把 strunicode 与 bytes 作为技术显微镜,用来观察迁移成本怎样从语法进入数据边界;这不表示 Python 3 的全部不兼容变化都来自文本模型。 - “Python 3 成为默认路径”在这里指 CPython 上游、主流工具链与多数活跃项目完成方向切换,不表示每个遗留系统都已支付完迁移成本。
Redis:创建者怎样成为参与者一个项目的创建者,为什么要先问一家公司,自己能不能回到这个项目?本期《原代码》从 Salvatore Sanfilippo 离开四年后再次输入 make 出发,回到 LLOOGG 的实时统计问题,沿着赞助、维护、退出、Redis 换证与 Valkey 分叉,追踪一个个人作品怎样在越来越多人的需要中改变作者的位置。 从一个空出来的中心,到仍在分叉运转的网络:同一条 make 命令可以把代码重新构建,却不能把创建者送回原来的位置。 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 时间轴 00:00 回来以前,先问一句 01:22 先有一个问题 04:43 让别人支付时间 06:28 喜欢的东西,变成肩上的重量 10:07 把手放开 12:30 没有他的 Redis 15:37 回来,但不回到原位 20:04 谁拥有离开的自由 本期资料 - [Redis, my new open source project](https://oldblog.antirez.com/post/Redis-my-new-open-source-project.html) - [Happy birthday Redis!](https://antirez.com/news/72) - [Thanks Pivotal, Hello Redis Labs](https://antirez.com/news/91) - [The end of the Redis adventure](https://antirez.com/news/133) - [New Governance for Redis](https://redis.io/blog/new-governance-for-redis/) - [From where I left](https://antirez.com/news/144) - [Redis Adopts Dual Source-Available Licensing](https://redis.io/blog/redis-adopts-dual-source-available-licensing/) - [Linux Foundation Launches Open Source Valkey Community](https://www.linuxfoundation.org/press/linux-foundation-launches-open-source-valkey-community) - [Redis is now available under the AGPLv3 open source license](https://redis.io/blog/agplv3/) 源码与工程记录 - [Redis historical versions from 2009](https://github.com/antirez/historical-redis-versions) - [LLOOGG README:从 MySQL 到 Redis 的应用记录](https://github.com/antirez/lloogg/blob/744a90a/README.md) - [Redis 当前 Git 历史最早保留的提交 ed9b544](https://github.com/redis/redis/commit/ed9b544e10b84cd43348ddfab7068b610a5df1f7) - [Redis 7.2.4 COPYING:BSD-3-Clause](https://raw.githubusercontent.com/redis/redis/7.2.4/COPYING) - [Valkey 7.2.5 源码树](https://github.com/valkey-io/valkey/tree/7.2.5) 访谈与历史原声来源 - [Running Redis for 8 years](https://www.youtube.com/watch?v=seLT7M3OAgk),Salvatore Sanfilippo 主讲,Codemotion Milan,2017。 - [Changelog Interviews #631:Salvatore Sanfilippo](https://changelog.com/podcast/631),Salvatore Sanfilippo 受访,Changelog,2025。 说明与延伸阅读 - Sanfilippo 在 2020 年的退出说明把原因放在创作与长期维护角色的冲突上;现有材料不支持把他的离开写成反对商业化,也不支持写成公司将他赶走。 - 2018 年模块换证、同年 IP 与商标转让、2020 年维护交接和 2024 年 Redis 核心换证是不同动作。本期按各自材料分别叙述,不把后来结果倒推成一项预先设计的计划。 - Valkey 延续的是 Redis 换证前按 BSD 发布的代码,不是八天内重写出的数据库。项目保留了大量命令、客户端与运维兼容路径,但这不表示所有模块、复制和部署行为都完全相同。 - Redis Ltd.、Redis 商标、不同版本的源码许可证,以及由命令、客户端和运维经验维持的兼容接口,不是同一个对象。本期不以公司的产品动作替代整个生态的变化。 - Redis 8 增加 AGPLv3 是在 RSALv2、SSPLv1 之外加入第三种选择,不是回到 BSD;公司对 2024 年策略的调整也不能归功于 Sanfilippo 一个人。
命令之外-为什么大家都启动 FFmpeg?摄像头二十秒没有送来新画面,Frigate 不只是重启 FFmpeg,还要在进程外数秒、验收分片、保存日志。既然应用最终仍要补上这么多控制代码,为什么桌面工具、下载器、照片服务和视频平台还会反复选择启动一条 FFmpeg 命令?本期《原代码》从这段 watchdog 出发,沿着命令生成、媒体数据流、进程监督、失败语义和替代路线,追踪一条命令究竟替应用接走了什么。 从停住的第二十秒,到一条由程序生成、又必须被进程外监督的 command line:FFmpeg 接走的是媒体数据面,留下的是产品必须自己回答的完成与失败。 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 时间轴 00:00 二十秒 04:05 命令不是人写的 07:12 一条可执行的媒体计划 11:57 原声:CLI 是一门可以生成的语言 13:02 命令外面重新长出一套系统 18:22 进程结束,任务没有完成 23:45 什么时候不要启动 FFmpeg 27:37 命令之外 本期资料 - [FFmpeg 9.0 Lei](https://ffmpeg.org/download.html) - [刘歧:以 Lei 纪念雷霄骅的版本命名提议](https://www.mail-archive.com/ffmpeg-devel%40ffmpeg.org/msg188121.html) - [雷霄骅的音视频技术项目与 FFmpeg 示例](https://leixiaohua1020.github.io/) - [FFmpeg CLI 官方文档](https://ffmpeg.org/ffmpeg.html) - [LinkedIn Engineering:LiTr,一款 Android 轻量音视频转码器](https://engineering.linkedin.com/blog/2019/litr-a-lightweight-video-audio-transcoder-for-android) - [GStreamer Application Development Manual](https://gstreamer.freedesktop.org/documentation/application-development/introduction/gstreamer.html) 源码与工程记录 - [Frigate:摄像头 FFmpeg 进程、watchdog 与重启路径](https://github.com/blakeblackshear/frigate/blob/df27e04c/frigate/video.py) - [LosslessCut:FFmpeg 进程执行、进度、取消与超时](https://github.com/mifi/lossless-cut/blob/260302b9/src/main/ffmpeg.ts) - [yt-dlp:FFmpeg postprocessor](https://github.com/yt-dlp/yt-dlp/blob/2c28ee5d/yt_dlp/postprocessor/ffmpeg.py) - [PhotoPrism:FFmpeg command builders](https://github.com/photoprism/photoprism/blob/develop/internal/ffmpeg/README.md) - [PeerTube #1147:参数在逗号处被截断](https://github.com/Chocobozzz/PeerTube/issues/1147) - [PeerTube #3596:队列完成但 HLS 产物缺少视频](https://github.com/Chocobozzz/PeerTube/issues/3596) - [Jellyfin:FFmpeg argument injection 安全公告](https://github.com/jellyfin/jellyfin/security/advisories/GHSA-wwwm-px48-fpvq) 访谈与历史原声来源 - [Lex Fridman Podcast #496:FFmpeg, with Jean-Baptiste Kempf and Kieran Kunhya](https://lexfridman.com/ffmpeg/)。本期使用的短片段实际发言人为 Jean-Baptiste Kempf 与 Lex Fridman。 说明与延伸阅读 - FFmpeg 9.0 的正式代号是 Lei;刘歧的邮件支撑命名提议及理由,但不是一份完整的正式表决记录。本期不把雷霄骅的知识传播贡献量化成单一影响数字。 - 一条 FFmpeg 命令可以描述完整媒体任务,但不会自动提供产品级的超时、重试、健康判断、日志、权限隔离和产物验收。进程正常退出也不等于业务结果正确。 - CLI 不是专业系统的必然终点。LiTr、进程内媒体项目、GStreamer 和平台原生 API 展示了实时帧访问、硬件路径、低延迟图和窄任务下的其他选择。 - Frigate、LosslessCut、yt-dlp、PhotoPrism、PeerTube 与 Jellyfin 是为不同工程问题选择的案例,不是行业采用率抽样,也不能据此推断所有媒体产品都使用 FFmpeg CLI。 - 子进程边界便于替换、超时和重启,但不会消除 decoder 缺陷或不可信参数带来的安全风险。权限、沙箱、参数构造和输入验证仍需由采用者设计。 - Lex Fridman Podcast #496 的完整节目同时有 Kempf 与 Kieran Kunhya;本期所用 CLI 是语言 短片段没有 Kunhya 的声音,不把片段中的判断扩展为整期访谈所有参与者的共同表述。
QEMU:一台可以被改写的机器一台电脑正在一部 iPhone 里面启动。UTM 把 QEMU 链接成 shared library,藏进应用的一条线程;KVM 可以拿走处理器的主要执行工作,Android Emulator 可以增加手机设备,xemu 可以把它改成一台原始 Xbox。底层不断被拆开、包裹和改写,为什么它们仍然属于 QEMU 的故事? 本期《原代码》从 Fabrice Bellard 在空闲时间里维护、没有一张通往 1.0 日程表的个人项目出发,追踪 KVM 与 Xen 的分叉怎样逐步回到共同上游,维护责任怎样从一个名字拆成许多具体位置,以及 QEMU 怎样在服务器之外进入 Android、UTM、xemu 与 GNOME Boxes。它被业界接受,并不是因为所有人最终运行同一个原版程序,而是因为越来越多人能够拿走它最显眼的部分,同时继续处理自己与 upstream 的距离。 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 时间轴 00:00 一条 iPhone 线程 02:27 从程序到机器 06:07 没有一张通往 1.0 的日程表 07:52 内核拿走处理器 10:47 -enable-kvm 15:28 分叉怎样回来 19:02 没有唯一的交接日 22:50 四个窗口,四种 QEMU 28:24 一台不再属于一个人的机器 本期资料 - [QEMU linux-user:2003 首发邮件与 user-mode 历史](http://events17.linuxfoundation.org/sites/events/files/slides/Qemu%20linux-user%20mode_1.pdf) - [Fabrice Bellard:QEMU 0.4 release](https://lkml.indiana.edu/0306.3/0656.html) - [QEMU, a Fast and Portable Dynamic Translator](https://www.usenix.org/legacy/events/usenix05/tech/freenix/full_papers/bellard/bellard.pdf) - [Fabrice Bellard:Qemu development schedule?](https://lists.nongnu.org/archive/html/qemu-devel/2004-08/msg00466.html) - [QEMU:The Role of Maintainers](https://qemu.readthedocs.io/en/master/devel/maintainers.html) 源码与工程记录 - [Linux commit 6aa8b732:KVM userspace interface](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6aa8b732ca01c3d7a54e93f4d701b8aabbe60fb7) - [Avi Kivity:kvm, the Linux Virtual Machine Monitor](https://www.kernel.org/doc/ols/2007/ols2007v1-pages-225-230.pdf) - [QEMU commit 7ba1e619:Add KVM support to QEMU](https://gitlab.com/qemu-project/qemu/-/commit/7ba1e61953f4592606e60b2e7507ff6a6faf861a) - [Anthony Liguori:QEMU 0.10.0 KVM tree](https://lists.nongnu.org/archive/html/qemu-devel/2009-03/msg00158.html) - [Ian Jackson:qemu and ioemu](http://old-list-archives.xenproject.org/archives/html/xen-devel/2008-06/msg00614.html) - [Xen 4.3 released](https://lists.xenproject.org/archives/html/xen-devel/2013-07/msg00694.html) - [QEMU Linux-style MAINTAINERS discussion](https://lists.libreplanet.org/archive/html/qemu-devel/2010-09/msg00727.html) - [AOSP Android Emulator QEMU README](https://android.googlesource.com/platform/external/qemu/+/2db80f7c1921a6f5d48b998378e3792e16c968a4/README.md) - [UTM Architecture](https://github.com/utmapp/UTM/blob/d951596ace636525efb7ebb79aa38bc7acdf53c8/Documentation/Architecture.md) - [xemu:About](https://xemu.app/docs/about/) - [GNOME Boxes:What is the technology used by Boxes?](https://help.gnome.org/gnome-boxes/supported-protocols.html) - [Apple WWDC19:Getting the Most Out of Simulator](https://developer.apple.com/videos/play/wwdc2019/418/) 公司与产品采用 - [Red Hat 收购 Qumranet](https://www.redhat.com/en/about/press-releases/qumranet) - [IBM PowerKVM: Configuration and Use](https://www.redbooks.ibm.com/redbooks/pdfs/sg248231.pdf) - [SUSE:Managing KVM Virtualization](https://documentation.suse.com/sles/16.0/html/SLES-virtualization-qemu/) 访谈与历史原声来源 - [Anthony Liguori:QEMU 2.x and Beyond: The Foundation of the Open Cloud](https://www.youtube.com/watch?v=VZSH9RzCl-k),The Linux Foundation,2013,来源标记为 CC BY。 - [Alex Bennée、Christoffer Dall、Peter Maydell:QEMU for ARMv8 and the 64-bit Android Emulator](https://www.youtube.com/watch?v=e6IjNpCKmT4),Linaro Connect,2014。 说明与延伸阅读 - “业余项目”来自 Bellard 2004 年的同期邮件;“玩具”不是他的原话,也不是本期对早期 QEMU 用途的判断。 - 2003 年 3 月 23 日首发邮件的文字来自后来维护者演讲中的转录。本期没有找到可确认的 Bellard 本人 QEMU 录音,也没有把旁白读信伪装成作者声音。 - KVM 进入 Linux 内核不表示 QEMU 被并入内核。KVM 负责受控的 guest 执行与内存、虚拟 CPU 接口,QEMU 继续提供用户空间机器和设备模型。 - Red Hat 收购的是 Qumranet、KVM 团队和相关产品,不是 QEMU。收购与 KVM 支持进入 QEMU upstream 处在相近时间窗口,但现有材料不支持把收购写成该 commit 的单一原因。 - KVM 和 Xen 的 downstream tree、upstream 支持、默认路径与兼容路径在不同时间变化。一次合入或默认值切换,都不表示分叉和维护成本立即消失。 - 现有材料只能确认到 2013 年 Bellard 已不再参与项目,不能给出唯一的正式离场日,也不能把后来的 QEMU 写成由一个人完整接手。 - Android Emulator 的固定源码快照说明它是 QEMU downstream,并保留从 upstream 合并的路径;快照日期不代表首次采用年份,也不证明全部现代 backend。 - UTM、xemu 和 GNOME Boxes 都有项目方材料支撑其 QEMU 关系。Dolphin、RPCS3、Xenia 等其他游戏主机模拟器没有进入本期 QEMU 系谱;Apple Simulator 则明确不是 emulator。
sqlite.c-公共领域SQLite 的源码属于公共领域,任何人都可以把它用于任何目的。可要让这句话真的进入手机、浏览器、操作系统和应用,还需要什么?本期《原代码》从 SQLite 首页的承诺出发,沿着 D. Richard Hipp、Motorola、AOL、Mozilla、Symbian 与 Android,追踪一段代码怎样离开许可桌、进入别人的产品,又怎样把维护压力带回核心团队。 从一份可以放进别人 source tree 的 sqlite3.c,到保险柜里证明权利来源的纸:代码向外走得越远,进入官方主线的路反而越窄。 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 时间轴 00:00 两个大得失真的数字 02:14 故事的起点 07:34 许可桌被移开以后 11:52 数据库消失进产品 18:39 一份可以搬走的 C 文件 24:40 保险柜里的纸 31:18 任何目的,不是任何工作负载 本期资料 - [SQLite 首页](https://sqlite.org/) - [How SQLite Is Tested](https://sqlite.org/testing.html) - [Most Widely Deployed SQL Database Engine](https://sqlite.org/mostdeployed.html) - [SQLite Is Serverless](https://sqlite.org/serverless.html) - [SQLite Copyright](https://sqlite.org/copyright.html) - [SQLite Consortium](https://sqlite.org/consortium.html) - [Appropriate Uses For SQLite](https://sqlite.org/whentouse.html) 源码与工程记录 - [The SQLite Amalgamation](https://sqlite.org/amalgamation.html) - [The Amalgamation Versus Canonical Sources](https://sqlite.org/amalg-v-canon.html) - [SQLite check-in 4e926efe2b:Disclaimed copyright](https://sqlite.org/src/timeline?c=4e926efe2b&y=ci) - [SQLite source repository README](https://sqlite.org/src/doc/trunk/README.md) - [Copyright Release for Contributions To SQLite](https://sqlite.org/copyright-release.html) - [Why SQLite Does Not Use Git](https://sqlite.org/whynotgit.html) - [Mozilla Bug 245745:use SQLite as the history backend](https://bugzilla.mozilla.org/show_bug.cgi?id=245745) - [Mozilla Bug 261861:initial mozStorage interfaces](https://bugzilla.mozilla.org/show_bug.cgi?id=261861) - [Mozilla Bug 266174:mozStorage-based history](https://bugzilla.mozilla.org/show_bug.cgi?id=266174) - [Firefox Source Docs:Places](https://firefox-source-docs.mozilla.org/browser/places/index.html) - [AOSP platform/external/sqlite](https://android.googlesource.com/platform/external/sqlite/+/refs/heads/main/) - [AOSP SQLite upgrade workflow](https://android.googlesource.com/platform/external/sqlite/+/refs/heads/main/README-upgrade.md) 访谈与历史原声来源 - [Changelog Interviews #201:Why SQLite succeeded as a database](https://changelog.com/podcast/201) - [CoRecursive #066:The Untold Story of SQLite](https://corecursive.com/066-sqlite-with-richard-hipp/) 说明与延伸阅读 - SQLite 项目方把部署规模描述为 billions and billions of copies,同时明确说精确数量无法取得。本期不把 copies 改写成可精确统计的设备装机量,也不把数据库文件数量与设备数量混为一谈。 - 本期提到的百分之百测试覆盖率,是当前官方文档所说的核心代码在实际部署配置下保持百分之百分支测试覆盖;它不表示 SQLite 从未有缺陷,也不表示历史上每个版本都达到同一口径。 - 公共领域承诺主要指 SQLite 核心源码和实际构建产物,不自动覆盖 SQLite 网站、商标、第三方扩展、下游补丁或本期引用的采访音频。 - free to everyone to use for any purpose 描述的是使用权,不表示 SQLite 适合每一种工作负载、免费提供支持,或允许任何人直接改变官方主线。 - Motorola、AOL 与 Symbian 的部分历史主要来自 Hipp 多年后的本人回忆;Mozilla 的同期 Bugzilla 记录、Firefox 文档与 AOSP 源码树承担的是可以独立核对的采用和维护节点。 - GitHub 上的 SQLite 仓库是从 Fossil canonical repository 单向导出的只读镜像。它不接收常见 GitHub pull request,但论坛、错误报告、合同需求和完成权利手续的正式贡献仍可以影响维护工作。
虚拟-番外:John Carmack 与 Michael Abrash一篇公开发表的技术文章,怎样先于作者本人抵达一个还没见过他的读者,并在多年后把两个人带进同一家公司?本期《原代码》从 Carmack 读到的 EGA 文章出发,经过 Abrash 的能源模拟、Thai Chef 的谈话和 Quake 制作现场,再沿两条独立推进的 VR 路径,追踪他们如何在 Oculus 重逢。 从纸上出现的一个名字,到同一张地图上的两种工作尺度:一次公开写作,怎样在读者、作者与尚未成形的未来之间留下回路。 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 时间轴 00:00 机器在别人手里 04:45 一个名字从纸上出现 09:45 作者从哪里来 17:19 先讲未来,再谈工作 24:08 这一次,读者先写信 29:18 同一张地图,两种互补尺度 本期资料 - [John Carmack 为 Michael Abrash《Graphics Programming Black Book》所写前言](https://github.com/jagregory/abrash-black-book/blob/master/src/about.md) - [Michael Abrash《Graphics Programming Black Book》公开归档](https://github.com/jagregory/abrash-black-book) - [美国能源部 OSTI:Abrash 参与的太阳能与电力系统研究记录(1979)](https://www.osti.gov/biblio/5780758) - [美国能源部 OSTI:SERICPAC 模拟程序研究记录(1982)](https://www.osti.gov/biblio/5354958) - [Wired:The Egos at Id](https://www.wired.com/1996/08/id/) - [Oculus:QuakeCon Recap and Rift News](https://www.meta.com/blog/quakecon-recap-and-rift-news/) - [Oculus:John Carmack Joins Oculus as CTO](https://www.meta.com/blog/john-carmack-joins-oculus-as-cto/) - [Michael Abrash:The Path to the Metaverse](https://www.meta.com/blog/introducing-michael-abrash-oculus-chief-scientist/) - [Michael Abrash:What VR Could, Should, and Almost Certainly Will Be within Two Years](http://media.steampowered.com/apps/abrashblog/Abrash%20Dev%20Days%202014.pdf) 访谈与本人回顾 - [Building the Open Metaverse:Metaverse Research,Michael Abrash](https://www.buildingtheopenmetaverse.org/episodes/metaverse-research) - [John Carmack 2022 年离开 Meta 的全文](https://daringfireball.net/misc/2022/12/carmack-facebook.text) 说明与延伸阅读 - 本期不把 Carmack 与 Abrash 简化为固定的师徒关系。公开写作的影响、Quake 时期的合作和 VR 阶段的再次共事,是三种不同关系。 - Abrash 的 EGA 文章影响了 Carmack,但 Commander Keen 的滚屏实现与最终产品不是 Abrash 一人的工作,也不是 Carmack 一人的作品;公开知识、具体实现和团队产品需要分开归属。 - Quake 是程序、美术、关卡、设计与发行团队共同完成的产品。两人在核心图形问题上的密切合作,不能替代 John Cash 及更大团队的贡献。 - Abrash 对 Thai Chef 谈话的回忆在用餐时段和持续时间上存在版本差异。本期只采用双方见面、Carmack 阐述未来方向并再次邀请 Abrash 加入 id 这一共同动作链。 - VR 的这次复兴不属于单一人物。Palmer Luckey、Atman Binstock、Valve、Oculus、开发者社区和更多硬件、软件与内容团队共同改变了重聚发生的条件。 - “两种互补尺度”描述的是近期产品反馈与长期系统研究的不同职责,不是对两人私人冲突的判断,也不把任何一条路线写成唯一正确答案。
虚拟-John Carmack(下):购买未来的人玩家按下方向键时,一台没有画完、算完、装下或确认整个世界的机器,为什么仍能立刻回应?本期《原代码》从 1990 年那块没有完整重画却开始移动的 PC 屏幕出发,沿着 Commander Keen、Doom、QuakeWorld、Doom 3 与 Rage,追踪实时路径如何把工作转移给预处理、缓存、预测、工具和内容团队。 从只补画屏幕边缘,到每秒六十次必须兑现的现在:玩家越不需要等待,越多工作已经在别处提前开始。 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 时间轴 00:00 没有画完的屏幕 06:38 为了速度,世界先收窄 09:09 玩家进入以前,地图已经工作 15:59 服务器还没有同意 19:07 三十分钟消失以后 22:35 一张纹理背后的工厂 31:44 回到玩家的现在 本期资料 - [John Carmack 为 Michael Abrash《Graphics Programming Black Book》所写前言](https://github.com/jagregory/abrash-black-book/blob/master/src/about.md) - [Game Developer:Monsters From the Id,Doom 制作期报道](https://www.gamedeveloper.com/game-platforms/the-game-developer-archives-monsters-from-the-id-the-making-of-i-doom-i-) - [Wired:The Egos at Id,Quake 制作期报道](https://www.wired.com/1996/08/id/) - [John Carmack:Issues and Rewards of Bleeding Edge Engine Development,GDC 2004](https://www.youtube.com/watch?v=YUF-07ab9wU) - [Digital Foundry:Face-Off: Rage](https://www.eurogamer.net/digitalfoundry-rage-face-off) - [PC Perspective:RAGE Performance and Image Quality Evaluation](https://pcper.com/2011/10/rage-performance-and-image-quality-evaluation-day-1/3/) 源码与工程记录 - [Commander Keen in Keen Dreams 公开源码](https://github.com/keendreams/keen) - [Hovertank 3-D 公开源码](https://github.com/FlatRockSoft/Hovertank3D) - [Catacomb 3-D 公开源码](https://github.com/CatacombGames/Catacomb3D) - [Wolfenstein 3D 公开源码](https://github.com/id-Software/wolf3d) - [Fuchs、Kedem 与 Naylor 1980 年 BSP 原论文](https://www.cs.unc.edu/~fuchs/publications/VisSurfaceGeneration80.pdf) - [id Software 公开的 Doom BSP 构建工具](https://www.gamers.org/pub/idgames/utils/level_edit/node_builders/doombsp.zip) - [Doom 公开源码](https://github.com/id-Software/DOOM) - [Michael Abrash:Inside Quake: Visible-Surface Determination](https://jacobfilipp.com/DrDobbs/articles/DDJ/1996/9613/9613f/9613f.htm) - [Quake 与 QuakeWorld 公开源码](https://github.com/id-Software/Quake) - [John Carmack:Quake's data access,1996](https://www.gamers.org/dEngine/quake/archive/a_june96/0133.html) - [John Carmack .plan 文件公开归档](https://github.com/oliverbenns/john-carmack-plan) - [Doom 3 renderer 与 MegaTexture 公开源码](https://github.com/id-Software/DOOM-3/tree/a9c49da5afb18201d31e3f0a429a037e56ce2b9a/neo/renderer) 访谈与历史原声来源 - [Lex Fridman Podcast #309:John Carmack,本期使用 Carmack 原声](https://lexfridman.com/john-carmack/) - [QuakeCon 2011 John Carmack Keynote,本期使用 Carmack 原声](https://www.youtube.com/watch?v=4zgYG-_ha28) - [Electric Play 1997 年 John Carmack 访谈重刊](https://www.quakewiki.net/profile-retro-interview-john-carmack/) - [John Carmack Press Interview Collection](https://archive.org/details/johnc-interviews) 说明与延伸阅读 - “购买未来”是本期用来描述工程成本交换的叙事隐喻。它受到 Carmack 2006 年关于让应用“假装拥有未来五到十年硬件”的回答启发,但不是他为这些技术建立的统一术语。 - PC 滚屏不是从真空里出现的。Carmack 明确回忆自己从 Abrash 的文章中学习 EGA 控制器知识,再发展具体技巧;Hall、Romero、Adrian Carmack 及后续内容工作又把技术接成了可以发行的游戏。Keen Dreams 公开源码保存的是后续实现,不能冒充 1990 年最初演示的逐行代码。 - BSP 在 Doom 之前已有长期的学术与工业实践。Doom 的离线 BSP 构建、运行时遍历,以及 Quake 的 PVS 和 surface cache 是不同机制,不能合并成一项由 Carmack 发明的算法。 - QuakeWorld 的客户端预测没有消灭网络延迟,权威服务器状态仍会回来;Doom 3 的实时编辑反馈也没有让完整内容生产等比例缩短。 - Rage 的 virtual texturing 不等于无限显存,接近 60 FPS 也不是单项技术或个人独立完成的结果。存储、缓存、驱动、平台、构建基础设施、内容团队与玩家端条件都会改变最终表现和代价。 - 本期用“虚拟”描述一个由被选择的信号、重新安排的计算、及时反馈和人与人的关系共同维持的世界;这不是 Carmack 的术语,也不表示重写版仍讨论 Oculus、VR、timewarp、presence 或 Metaverse。
虚拟-John Carmack(上):图形世界的王一台只租一个星期的 IBM PC,怎样把一名合同程序员带进 Softdisk,又让他的技术判断逐渐成为别人工作的前置条件?本期《原代码》从 John Carmack 必须归还的机器出发,沿着三十天交付、PC 滚屏、Commander Keen、Quake 和 Rage,追踪稳定设备、同事、发行与引擎怎样不断改变“谁在等待谁”。 从一台到期必须归还的电脑,到一批不能让市场停下来等待的项目:机器留在原处以后,时间却越来越难被留住。 你可在官方网站 https://yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。 时间轴 00:00 一个星期 02:37 三十天 05:08 屏幕滚动的夜晚 12:25 技术基础 15:44 终于 21:07 九个月 23:53 省下来的时间去了哪里 27:47 任务完成 29:00 时间有重量 本期资料 - [John Carmack Answers,Slashdot 1999](https://games.slashdot.org/story/99/10/15/1012230/john-carmack-answers) - [Apogee 保存的 1990 年 Commander Keen 提案信](https://www.apogeeent.com/devblog/when-you-have-an-amazing-history-share-it) - [3D Realms:A Look Back at Commander Keen(互联网档案)](https://web.archive.org/web/20240104222226/http://legacy.3drealms.com/keenhistory/) - [Jay Wilbur:id Software - The Entrepreneur's Mind(互联网档案)](https://web.archive.org/web/20230305003152/https://entrepreneursmind.com/id-software/) - [Game Developer:Monsters From the Id,Doom 制作期报道](https://www.gamedeveloper.com/game-platforms/the-game-developer-archives-monsters-from-the-id-the-making-of-i-doom-i-) - [Wired:The Egos at Id,Quake 制作期报道](https://www.wired.com/1996/08/id/) - [Digital Foundry:Face-Off: Rage](https://www.eurogamer.net/digitalfoundry-rage-face-off) - [Game Developer:John Carmack 正式离开 id Software](https://www.gamedeveloper.com/programming/john-carmack-officially-leaves-id-software) 源码与工程记录 - [John Carmack 为 Michael Abrash《Graphics Programming Black Book》所写前言](https://github.com/jagregory/abrash-black-book/blob/master/src/about.md) - [Commander Keen in Keen Dreams 公开源码](https://github.com/keendreams/keen) - [Doom 公开源码](https://github.com/id-Software/DOOM) - [Quake 公开源码](https://github.com/id-Software/Quake) - [John Carmack:Quake's data access,1996(互联网档案)](https://web.archive.org/web/20170114004010/http://www.gamers.org/dEngine/quake/archive/a_june96/0133.html) - [John Carmack .plan 文件公开归档](https://github.com/oliverbenns/john-carmack-plan) 访谈与历史原声来源 - [Lex Fridman Podcast #309:John Carmack,本期使用 Carmack 原声](https://lexfridman.com/john-carmack/) - [The Examined Game:The Dial Up Entrepreneur,本期使用 Scott Miller 原声](https://www.theexaminedgame.com/the-dial-up-entrepreneur-scott-miller-apogee-entertainment-duke-nukem-3d-wolfenstein-3d/) - [Joe Rogan Experience #1342:John Carmack,本期使用 Carmack 原声](https://www.youtube.com/watch?v=udlMSe5-zP8) - [Electric Play 1997 年 John Carmack 访谈重刊](https://www.quakewiki.net/profile-retro-interview-john-carmack/) - [QuakeCon 2011 John Carmack Keynote](https://www.youtube.com/watch?v=4zgYG-_ha28) - [David Kushner:Masters of Disruption,John Carmack 系列访谈](https://davidkushner.substack.com/p/masters-of-disruption-post-2-john) 说明与延伸阅读 - “图形世界的王”描述的是 Carmack 的技术判断如何成为产品和他人工作的边界,不是把 Commander Keen、Doom、Quake 或 Rage 写成他的单人作品。Tom Hall、John Romero、Adrian Carmack、Scott Miller、Michael Abrash 以及更多程序、美术、关卡、工具和发行成员共同改变了最终结果。 - Carmack 从 Michael Abrash 的文章中学习了 EGA 控制器知识,又发展了自己的实现;公开知识、Carmack 的具体实现,以及 Hall、Romero、Adrian Carmack 等人把技术接成 Commander Keen 的贡献需要分开归属。 - Shareware 发行、商业引擎授权、产品内的 mod 与数据接口,以及多年后的商业源码公开是不同事件;其中任何一项都不能代替其他几项。 - Rage 的开发周期和最终结果涉及技术、美术、设计、工具、平台、发行与组织决策。Carmack 在 2019 年关于降低部分技术雄心、更早发布的说法是后见判断,不能把项目结果归因于他一人。 - “任务已经完成”是 id Software 在 Carmack 离职时的公开表述。Carmack 自己的公开说明只支持顾问安排未能实现,以及同时分配注意力很困难,不足以证明一场未公开的人际决裂。
跨过山丘-V8、Dart 与 FlutterDart 为什么没有进入 Chrome,却成为了 Flutter 的核心语言?本期《原代码》从 Lars Bak 的“我没有时间”出发,追踪 V8、Dart、TypeScript、Sky 与 Flutter 如何围绕开发者等待、浏览器治理和真实产品工作负载,走出几条不同的路。 从 Chrome 里空下的位置,到手机屏幕上的一次 Hot Reload:Dart 如何跨过 Web 没有跨过去的那座山。 时间轴 00:00 我没有时间 02:38 把等待藏在语言下面 08:14 两只钟 13:23 原声:更稳妥的赌注 15:39 空位与开关 21:25 Flutter 把时间写进 Dart 28:46 一秒以内 本期资料 - Dart 2011 年发布:https://developers.googleblog.com/en/dart-a-language-for-structured-web-programming/ - Dartium 技术预览:https://blog.chromium.org/2012/02/tech-preview-of-chromium-with-dart.html - Dart for the Entire Web:https://news.dartlang.org/2015/03/dart-for-entire-web.html - V8 十周年官方回顾:https://v8.dev/blog/10-years - TypeScript 2012 年发布:https://learn.microsoft.com/en-us/archive/blogs/somasegar/typescript-javascript-development-at-application-scale - Dart 团队欢迎 TypeScript:https://news.dartlang.org/2012/10/the-dart-team-welcomes-typescript.html - ECMA-408 官方页面:https://ecma-international.org/publications-and-standards/standards/ecma-408/ - Dart 2 stable:https://dart.dev/blog/announcing-dart-2-stable-and-the-dart-web-platform - Dart 2.3 UI-as-code:https://dart.dev/blog/announcing-dart-2-3-optimized-for-building-user-interfaces - Dart VM 十年回顾:https://mrale.ph/talks/vmil2020/ - Flutter 1.0 发布:https://developers.googleblog.com/en/flutter-10-googles-portable-ui-toolkit/ 源码与工程记录 - Flutter 2014 Open the Sky 初始 commit:https://github.com/flutter/flutter/commit/00882d626a478a3ce391b736234a768b762c853a - Sky-Dart 构建开关 commit:https://github.com/eseidel/skydart/commit/8c05f989d2cfa2171504305d4a30582db121df90 - 首个功能性 Sky-Dart commit:https://github.com/eseidel/skydart/commit/0fc92de0468213f621cba0fbdfd96c1625052ba7 - Sky 正式切换 Dart 的 Mojo revision:https://chromium.googlesource.com/external/mojo.git/+/a6a07e06560b24546177088301a0c42ad25b209f - Flutter iOS 预编译 snapshot commit:https://github.com/flutter-team-archive/engine/commit/d6ff8e90b07c1729d968e4f1ba8ee6d1e0607281 - Flutter 仓库:https://github.com/flutter/flutter - Dart SDK 仓库:https://github.com/dart-lang/sdk 访谈与历史原声来源 - GOTO Aarhus 2012,Anders Hejlsberg and Lars Bak:https://www.youtube.com/watch?v=5AqbCQuK0gM - Dart Developer Summit 2015,Sky: An Experiment Writing Dart for Mobile:https://www.youtube.com/watch?v=PnIWl33YMwA - GOTO Chicago 2016,Want to be a Better Programmer?:https://www.youtube.com/watch?v=P8ltWIqDPzo 说明与延伸阅读 - Dart 和 Go 最初面向不同的问题域,不能写成直接的内部竞品。 - TypeScript 的兼容路线与 Dart 有部分重叠,但没有证据证明它直接导致 Chrome 终止 Dart VM 计划。 - Sky 的 Dart 迁移早于 2015 年 3 月的 Chrome 路线转向;Flutter 不是随后临时创造的“救援项目”。 - ECMA-408 的规范发布不等于多浏览器原生 Dart VM 的采用。 - Flutter 深刻影响了 Dart 的运行时与产品语境,但 Dart 2 的类型和语言演进还受到 Web 编译器、Google 内部大型应用与工具链等多重压力影响。
等待机器-BunBun 为什么会出现?本期节目从“保存文件以后等浏览器更新”的几秒钟讲起,追踪 Bun 如何从 Jarred Sumner 的开发等待中诞生,如何把 JavaScript 工具链压进一个 all-in-one 二进制,又如何在 Anthropic、Claude Code 和 Rust rewrite 的语境里,被重新定义为 AI coding agents 时代的基础设施。 这不是一集 Bun 教程,也不是一场性能榜单复述。它是一集关于等待、注意力、工具链、开源维护和软件世界如何不断重造轮子的故事。 时间轴 01:30 等待的史前史 06:08 一个游戏被等待吞掉 08:54 一只大轮子 14:59 掌声变成 issue 19:21 为什么不能让 Node 更快一点 20:38 从人类开发者到 AI agents 24:23 轮子被重铸 30:51 等待没有消失 本期资料 本期主要资料包括 Bun 官方博客、Bun GitHub 仓库与 PR、Jarred Sumner 的公开访谈、Anthropic 收购新闻稿、Claude Code 安装文档,以及 Hacker News、Lobsters、Ziggit 等社区讨论。 核心资料 - Bun 官网:https://bun.sh - Bun 1.0 官方博客:https://bun.sh/blog/bun-v1.0 - Bun joins Anthropic:https://bun.sh/blog/bun-joins-anthropic - Anthropic acquires Bun:https://www.anthropic.com/news/anthropic-acquires-bun-as-claude-code-reaches-usd1b-milestone - Bun GitHub 仓库:https://github.com/oven-sh/bun - PR #30412 Rewrite Bun in Rust:https://github.com/oven-sh/bun/pull/30412 - Bun single-file executable docs:https://bun.com/docs/bundler/executables - Claude Code setup docs:https://code.claude.com/docs/en/setup 访谈与原始音频来源 - PodRocket: Bun with Jarred Sumner:https://podrocket.logrocket.com/bun - Syntax #544: Supper Club x Bun with Jared Sumner:https://syntax.fm/show/544/supper-club-bun-with-jared-sumner - DevTools FM Episode #37: Jarred Sumner - Bun:https://www.devtools.fm/episode/37 - InfoWorld Jarred Sumner interview:https://www.infoworld.com/article/2338698/interview-with-jarred-sumner-buns-creator-talks-tech-funding-and-startups.html 社区讨论与背景资料 - HN launch thread:https://news.ycombinator.com/item?id=31993429 - HN Bun 1.0 thread:https://news.ycombinator.com/item?id=37434117 - HN Rust rewrite merged thread:https://news.ycombinator.com/item?id=48132488 - OSSInsight Bun stargazers history:https://api.ossinsight.io/v1/repos/oven-sh/bun/stargazers/history/ - Star History Bun chart:https://www.star-history.com/#oven-sh/bun - DevClass Oven announcement:https://www.devclass.com/development/2022/08/24/bun-announces-oven-promises-first-bake-in-six-months/1620543 - DevClass Anthropic acquisition:https://www.devclass.com/development/2025/12/03/bun-javascript-runtime-acquired-by-anthropic-tying-its-future-to-ai-coding/ - DevClass Rust rewrite:https://www.devclass.com/ai-ml/2026/05/15/anthropics-bun-rust-rewrite-merged-at-speed-of-ai/5240541 - RedMonk Bun analysis:https://redmonk.com/sogrady/2026/06/04/bun-two-lessons/