Agili 的 Hacker Podcast

Hacker News 每日播报 2025-07-13


Listen Later

欢迎收听 Hacker News 每日播报,今天我们聊聊为 Firefox 付费的可能性、Zig 语言全新的异步 I/O、在 C 语言中实现协程的奇技淫巧、AI 辅助编程的安全之道,以及强化学习即将迎来的“GPT-3 时刻”等热门话题。

让我为火狐浏览器付费

在 Mozilla 的官方社区,一篇题为《让我为 Firefox 付费!》的帖子引发了热烈讨论。作者是一位资深的 Mozilla 支持者,他强烈呼吁 Mozilla 推出 Firefox 的付费版本。

核心观点:摆脱广告依赖

作者认为,尽管听起来有些矛盾,但为开源软件付费与软件自由的理念完全兼容。他引用自由软件基金会(FSF)的观点,指出收费并不会损害用户的自由,因为用户总能通过其他方式免费获取和修改开源软件。

他真正担忧的是 Firefox 当前依赖广告(尤其是与 Google 的搜索合作)的商业模式。这种模式最终可能导致产品“垃圾化”(enshittification)、侵犯用户隐私,并被算法驱动。作者表示,他很乐意为那些以用户为中心的付费产品(如 Proton、Kagi)买单,也希望能够直接为 Firefox 的核心开发提供资金,而不是间接通过 Mozilla 基金会的其他项目。

他大胆提议 Mozilla 进行一次实验:发布一个“纯净版”的 Firefox,不包含任何赞助内容、遥测数据,并内置广告拦截功能。他相信,这样的版本不仅不会赶走用户,反而会吸引那些因不信任当前商业模式而离开的用户回归。

社区回响:信任与期待

这个话题在开发者社区中获得了广泛共鸣。许多人表示,他们非常愿意为一个更纯粹、更注重隐私、不与大公司深度绑定的 Firefox 付费。一个反复出现的关键点是,用户希望他们的钱能直接用于 Firefox 浏览器的开发,而不是流向 Mozilla 基金会的其他项目。以完全由用户捐款资助并发展良好的邮件客户端 Thunderbird 为例,这证明了用户愿意为他们信任的产品直接买单。

当然,也有一些谨慎的声音。有人怀疑 Mozilla 是否有决心和能力摆脱对 Google 收入的依赖。另一些人则担心,即使推出付费版,也无法保证未来不会重蹈“先付费后垃圾化”的覆辙。他们认为,免费的替代品是消费者制衡公司的重要力量。

总而言之,社区对为 Firefox 付费的呼声,反映了用户对一个独立、可信、以隐私为核心的浏览器的强烈渴望。

Zig 语言全新的异步 I/O

编程语言 Zig 在其最新的异步 I/O 设计上取得了重大突破,有望彻底解决长期困扰开发者的“函数颜色问题”(即异步函数会“感染”整个调用链)。

核心设计:Io 接口与“色盲”异步

新设计的核心是引入了一个全新的 Io 接口,它将负责所有的 I/O 和并发操作。与 Zig 处理内存分配器的方式类似,开发者现在可以为程序注入具体的 I/O 实现,无论是阻塞式 I/O、线程池,还是基于 io_uring 的高性能事件循环。

这种设计最大的亮点在于其“色盲式异步/等待”特性。通过 io.async 和 Future.await,开发者编写的库代码可以同时在同步和异步模式下高效运行,无需为两种模式维护不同的代码库。这极大地提升了代码的可重用性,被认为是“彻底击败了函数着色问题”。

性能与灵活性

新的 Io 接口不仅灵活,还兼顾了性能。虽然它使用了有运行时开销的虚表(vtable)进行函数分派,但在大多数情况下,编译器可以进行去虚拟化优化。此外,新的 Reader 和 Writer 接口将缓冲逻辑嵌入其中,并引入了 sendFile(利用内核零拷贝)和 drain(矢量化写入)等语义化 I/O 操作,旨在最大化利用操作系统级别的优化,从而显著提升性能。

这项新进展无疑是 Zig 发展道路上的一个里程碑,它为开发者提供了前所未有的控制力和性能潜力,社区正密切关注这些特性在未来版本中的实际表现。

在 C 语言中“黑”入协程

一篇题为《在 C 语言中“黑”入协程》的文章展示了如何在没有操作系统支持的 C 语言环境中,通过精妙的宏技巧实现合作式多任务。

穷人的异步运行时

在资源受限的嵌入式开发中,当无法使用实时操作系统(RTOS)时,开发者常常被迫编写复杂且难以维护的状态机。作者受够了这种非线性的代码逻辑,决定将其他现代语言中的协程(coroutines)概念“移植”到 C 语言中。

他的实现堪称一门艺术:利用一系列复杂的 C 宏,将看似线性的协程代码在编译时“转译”成一个显式的状态机。通过巧妙地使用 switch 语句和 case 标签(类似于经典的 Duff's Device),协程能够在每次 yield 后精确地恢复执行。作者甚至实现了一个小型的协程调度器和合作式的取消机制。

技术奇观与现实建议

尽管这个实现非常巧妙,作者在文末却给出了一个坦诚的“辛辣”总结。他称这套系统是“C 宏、状态机和纯粹意志力的不圣洁联盟”,并直言“这不是 2025 年理智的人应该编写软件的方式”。他强烈建议,对现代并发模型感兴趣的开发者应该“切换到 Rust”,因为 Rust 提供了原生、安全且零成本的 async/await 机制,避免了这种“不卫生的宏地狱”。

这篇文章因其技术上的巧妙和教育价值而备受赞誉,被认为是理解协程底层原理的绝佳案例。然而,几乎所有人都同意作者的观点,认为这种方法在生产环境中是不可取的,因为它极大地牺牲了代码的可读性、可维护性和可调试性。

在 2025 年初读《神经漫游者》

一位科技媒体人分享了他在 2025 年首次阅读赛博朋克圣经——威廉·吉布森 1984 年的小说《神经漫游者》的独特体验。

文章指出,这部小说的影响力是如此深远,以至于即使你从未读过它,也一定在无数后来的电影、动漫和游戏中感受过它的影子。吉布森定义了“赛博空间”(cyberspace)、“矩阵”(matrix)等核心概念,塑造了整个赛博朋克流派。

初读此书,读者会面临两大挑战。首先是吉布森密集、充满术语的写作风格,需要耐心品味。其次是“熟悉感悖论”:由于书中的创意在过去四十年里被无数作品借鉴和重混,导致今天的读者会觉得许多情节似曾相识,反而削弱了其原创性的冲击力。

有趣的是,文章将《神经漫游者》与 1982 年的电影《银翼杀手》对比,认为前者在今天看来更具现实意义。尽管《银翼杀手》是视觉经典,但其故事背景(2019年)已成过去时,而《神经漫游者》对人工智能、虚拟现实和网络空间的构想,在今天看来却愈发具有预见性。当然,书中也有一些有趣的“时代印记”,比如无处不在的公用电话和对日本科技品牌的依赖。

最终,文章总结道,科幻的价值不在于精准预测,而在于提供一个审视人类境况的框架。从这个角度看,《神经漫游者》至今仍是一部不朽的杰作。

Chrome 隐藏的 X-Browser-Validation 请求头逆向工程

一位开发者通过逆向工程,揭开了 Chrome 浏览器中一个神秘的 HTTP 请求头 X-Browser-Validation 的面纱。

这个头部的主要目的是验证浏览器实例的完整性,防止用户代理(User-Agent)欺骗等行为。作者通过分析 chrome.dll 文件,发现这个头部值的生成过程分为三步:

  1. 数据准备:获取一个硬编码的、与操作系统平台相关的 API 密钥,以及完整的用户代理字符串。
  2. 数据拼接:将 API 密钥和用户代理字符串简单地连接在一起。
  3. 哈希与编码:对拼接后的数据进行 SHA-1 哈希运算,然后将得到的 20 字节摘要进行 Base64 编码,最终形成头部的值。
  4. 作者还贴心地提供了 Windows、Linux 和 macOS 平台对应的 API 密钥,证实了 Google 在不同平台上使用了不同的验证密钥。这个发现为我们理解现代浏览器如何通过内部机制维护安全和完整性,提供了一个独特的视角。

    《用 Python 自动化无聊的事情》的“失落章节”:音频、视频与网络摄像头

    著名 Python 教程《用 Python 自动化无聊的事情》的作者 Al Sweigart,发布了书中一个未曾公开的“失落章节”,专门讲解如何用 Python 处理音频、视频和网络摄像头。

    这篇实用的指南涵盖了从录制、播放到编辑多媒体内容的方方面面,为开发者打开了自动化处理多媒体任务的大门。

    • 录制:介绍了如何使用 OpenCV 从网络摄像头录制视频和拍照,以及如何结合 SounddeviceWavio 库录制音频。
    • 播放:讲解了使用简单的 Playsound3 库播放音效,以及使用功能更强大的 Pygame.mixer 模块进行更精细的音频控制。
    • 下载与处理:展示了如何利用强大的 yt-dlp 工具下载网络视频,并使用 Python-VLC 库来控制 VLC 播放器进行视频播放和交互。
    • 编辑:最重磅的部分是详细介绍了如何通过调用命令行工具 FFmpeg 来实现各种复杂的音视频编辑任务,例如格式转换、剪辑、合并、添加水印、调整音量和画面效果等。文章提供了大量即用型的“食谱”(recipes),极大地降低了使用这个强大工具的门槛。
    • 这篇“失落的章节”无疑是一份宝贵的资源,它全面展示了 Python 在多媒体自动化领域的强大能力。

      切换到在 Docker 中使用 Claude Code 和 VSCode

      一位开发者分享了他如何通过在 Docker 容器中运行 AI 编码助手来增强安全性的经验。

      出于对 AI Agent 访问整个文件系统和敏感信息(如 SSH 密钥)的担忧,作者放弃了直接在本地运行 AI 编码工具(如 Cursor)的方案。他列举了一些 AI 意外删除用户文件或绕过安全限制的案例,认为将 AI 限制在沙盒环境中是更明智的选择。

      他的解决方案是利用 VSCode 的 Dev Container 功能,将整个开发环境(包括 AI 助手 Claude Code)都置于一个 Docker 容器内。这样做的好处显而易见:

      • 隔离性:AI 只能访问容器内的文件,无法触及宿主系统。
      • 安全性:即使 AI 出现问题,最坏的情况也只是容器崩溃,不会对本地环境造成破坏。
      • 权限控制:可以为容器精细地配置权限,例如通过一个仅有读写代码权限的 GitHub Token 来处理 Git 操作,从而保护其他敏感凭据。
      • 作者表示,这个设置过程非常简单,并提供了一个包含配置文件的 GitHub 仓库,让其他人可以快速上手。这种在享受 AI 便利的同时不牺牲安全性的做法,为广大开发者提供了一个极具价值的参考。

        解析,而非验证——一些 C 语言安全技巧

        这篇文章将“解析而非验证”(Parse, Don’t Validate)这一函数式编程中的重要原则,巧妙地应用于 C 语言,以提升代码的健壮性和安全性。

        核心思想是,不要在系统内部的多个地方反复验证来自外部的不可信数据。相反,应该在数据进入系统的边界时,就将其一次性地“解析”成一个强类型的、结构化的数据对象。

        例如,与其在多个函数中传递一个原始的 char * 字符串并反复调用 validateEmail(),不如在入口处就调用 email_t parsedEmail = parseEmail(untrustedInput)。如果解析成功,系统内部的所有代码都将处理一个已验证的 email_t 类型,如果失败则立即拒绝。

        作者建议使用“不透明类型”(opaque types)来实现这一点。通过为电子邮件、用户名等创建自定义类型(如 email_t, name_t),可以利用 C 语言的类型系统在编译时就捕获错误。比如,将一个 name_t 类型的变量错误地传递给一个期望 email_t 类型的函数,编译器会直接报错。

        这种方法有三大优势:

        1. 增强封装:将不安全的数据处理限制在系统边界。
        2. 缩小攻击面:系统内部函数只处理已验证的结构化数据。
        3. 编译时安全:利用类型系统防止参数混淆等逻辑错误。
        4. 这为在 C 语言中构建更安全的系统提供了一套非常实用的设计模式。

          Axon 的 AI 警务报告生成器 Draft One 被指在设计上规避透明度

          电子前沿基金会(EFF)发布报告,严厉批评了警用设备公司 Axon 推出的 AI 警务报告生成工具 Draft One。报告指出,该工具在设计上似乎刻意规避了透明度和问责制。

          Draft One 通过分析警员随身摄像头的音频来自动生成报告草稿。然而,EFF 的调查发现其存在严重问题:

          • “阅后即焚”的草稿:AI 生成的原始草稿在警员编辑后不会被保存,也没有任何版本历史。这使得事后无法区分哪些内容是 AI 生成的,哪些是警员修改的。Axon 称这是为了避免给客户带来“披露的麻烦”。
          • 缺乏审计功能:系统无法方便地导出使用了该功能的报告列表,使得监管机构和研究人员难以进行有效的审计和分析。
          • 信息不对称:Axon 公司内部可以追踪 Draft One 的使用数据,但这些数据并未向其客户(警局)或公众开放。
          • 这些设计缺陷使得在报告出现偏见或错误时,几乎不可能追究责任,是 AI 的问题还是警员的问题将难以界定。这不仅侵蚀了司法系统的透明度,也对公民权利构成了潜在威胁。此案例为在公共服务领域应用 AI 敲响了警钟,强调了透明度和可审计性的重要性。

            强化学习(RL)即将迎来的“GPT-3 时刻”

            一篇文章预测,强化学习(RL)正处于一个关键的转折点,即将迎来自己的“GPT-3 时刻”。这意味着 RL 模型将通过大规模、多样化的训练,实现强大的、任务无关的少样本学习能力。

            文章指出,当前的 RL 范式类似于 GPT-3 出现前的 NLP 领域:模型需要针对特定任务进行大量精细调优,泛化能力差。要实现突破,RL 需要从在少量环境中微调,转向在数千个多样化环境中进行大规模训练。

            为了实现这种规模的扩展,文章提出了一种名为“复制训练”(Replication Training)的新范式。其核心思想是,让 AI 模型去复制现有的软件产品或功能。例如,给定一个命令行工具的详细规范,AI 的任务就是生成一个行为完全一致的实现。

            这种方法有几个关键优势:

            • 可扩展性:互联网上有海量的软件可供“复制”,为生成大规模、多样化的训练任务提供了可能。
            • 客观评估:评估标准非常明确——生成的软件是否与参考实现完全一致。
            • 技能训练:复制复杂软件需要模型具备精确理解指令、长期规划、错误恢复等关键能力。
            • 作者认为,“复制训练”为 RL 提供了实现真正泛化能力所需的数万年级别的任务经验,是解锁 RL“GPT-3 时刻”的关键路径,将极大地推动 AI 在软件开发等复杂任务中的应用。

              相关链接:

              • Let me pay for Firefox
              • Zig's New Async I/O
              • Hacking Coroutines into C
              • Reading Neuromancer for the first time in 2025
              • Chrome's hidden X-Browser-Validation header reverse engineered
              • Lost Chapter of Automate the Boring Stuff: Audio, Video, and Webcams in Python
              • Switching to Claude Code and VSCode Inside Docker
              • Parse, Don’t Validate – Some C Safety Tips
              • Axon's Draft One AI Police Report Generator Is Designed to Defy Transparency
              • The upcoming GPT-3 moment for RL
              ...more
              View all episodesView all episodes
              Download on the App Store

              Agili 的 Hacker PodcastBy Agili 的 Hacker Podcast