Paint.NET 为 WINE 推出 Claude 构建的 Direct2D 重写

Simon Willison··作者 Simon Willison

关键信息

Brewster 说这部分代码大约有 18 万行,而且还没有经过彻底审查,因此他把它形容为更像“信我就行”,而不是完全审核过的实现。他还提到开发过程中需要处理实际问题,例如修正 COM 引用计数行为(如 AddRef)以及一些糟糕的设计决策,同时也称赞了 Claude 在逆向 Direct2D 特效公式方面的工作。

资讯摘要

2026 年 9 月 2 日,Simon Willison 转引了 Paint.NET 作者 Rick Brewster 的一段话,介绍该软件在 WINE 下运行时的一项重要绕行方案。Brewster 说,Direct2D 长期以来一直是 Paint.NET 在 WINE 上遇到的最大障碍,而且他认为微软的实现永远不可能完善到足以满足 Paint.NET 的需求。由于 Direct2D 不能简单地被关闭,Paint.NET 现在改为随程序内置一个专门面向 WINE 的、从零开始、干净室式的逆向工程重写版本。这个功能通过 /wine 开关启用,并实现于 PaintDotNet.Windows.Direct2D1.Managed.dll 中。Brewster 表示,这段代码主要由 Claude 编写,如果没有 Claude,这件事根本不可能完成,也不会发生。

Brewster 还说,这部分代码很多都是所谓的“vibe coded”,也就是并没有经过他希望的那种彻底审查,更像是“信我就行”的风格。他承认自己不可能手工审查 18 万行代码,尤其是相比之下,Paint.NET 其余部分大约有 70 万行,而且他已经开发了 20 多年。Brewster 还提到,在开发过程中他必须频繁监督 Claude,修复资源管理问题,例如 COM 引用计数没有正确处理 AddRef,以及纠正一些糟糕的设计和架构决策。不过,他也对 Claude 在逆向 Direct2D 内置特效库公式方面展现出的耐心和能力表示惊讶。

资讯正文

2026年9月2日

Direct2D 一直是 Paint.NET 在 WINE 上遇到的最大障碍,而且很明显,它永远也不会完善到足以满足 Paint.NET 的使用需求。而我也不能 просто把 Direct2D 的使用“禁用”掉。所以,作为替代,Paint.NET 现在有了一个内部的、从零开始、洁净室式逆向工程重写版本的 Direct2D,并在 WINE 上使用它(通过使用 /wine 触发)。它位于 PaintDotNet.Windows.Direct2D1.Managed.dll 中。这是由我们的好朋友 Claude 编写的,如果没有它,这一切都不可能实现,也永远不会发生。[……]这段代码的大部分,正如他们所说,是“vibe coded”出来的。我的意思是,它没有经过彻底审查,更像是“相信我兄弟”这种风格。我不可能审查 180,000 行代码,那实在是太多太多了。作为参考,Paint.NET 的其余部分大约有 700,000 行代码,而我已经为它工作了 20 多年。[……]有时,Claude 的工作状态像是 10 个刚刚挣脱束缚的爱因斯坦级别 10x 工程师的怒火;而有时……嗯,就没那么厉害了。我不得不花很多时间“看着”Claude,以确保它正确处理资源管理(有一段时间,它甚至没有对引用计数对象执行相当于 COM 的 AddRef(),哎呀)。当我发现一些非常糟糕的设计或架构决策时,我也不得不敲打它几下。而且,对于它在弄清实现 Direct2D 内置效果库所需的所有公式时所做出的相当巧妙且不知疲倦的逆向工程工作,我也印象深刻。

Direct2D 一直是 Paint.NET 在 WINE 上遇到的最大障碍,而且很明显,它永远也不会完善到足以满足 Paint.NET 的使用需求。而我也不能 פשוט把 Direct2D 的使用“禁用”掉。所以,作为替代,Paint.NET 现在有了一个内部的、从零开始、洁净室式逆向工程重写版本的 Direct2D,并在 WINE 上使用它(通过使用 /wine 触发)。它位于 PaintDotNet.Windows.Direct2D1.Managed.dll 中。这是由我们的好朋友 Claude 编写的,如果没有它,这一切都不可能实现,也永远不会发生。[……]

这段代码的大部分,正如他们所说,是“vibe coded”出来的。我的意思是,它没有经过彻底审查,更像是“相信我兄弟”这种风格。我不可能审查 180,000 行代码,那实在是太多太多了。作为参考,Paint.NET 的其余部分大约有 700,000 行代码,而我已经为它工作了 20 多年。[……]

有时,Claude 的工作状态像是 10 个刚刚挣脱束缚的爱因斯坦级别 10x 工程师的怒火;而有时……嗯,就没那么厉害了。我不得不花很多时间“看着”Claude,以确保它正确处理资源管理(有一段时间,它甚至没有对引用计数对象执行相当于 COM 的 AddRef(),哎呀)。当我发现一些非常糟糕的设计或架构决策时,我也不得不敲打它几下。而且,对于它在弄清实现 Direct2D 内置效果库所需的所有公式时所做出的相当巧妙且不知疲倦的逆向工程工作,我也印象深刻。

—— Paint.NET 作者 Rick Brewster

Claude Fable 5.1 给我做了一只非常漂亮的动画鹈鹕 - 2026年9月1日

Understanding ChatGPT Work - 2026年8月30日

这是一段由 Simon Willison 收集并于 2026年9月2日发布的引语。

来源与参考

  1. 原始链接
  2. A quote from Rick Brewster

收录于 2026-09-03