Claude реализовала Direct2D для Paint.NET на WINE: 180 000 строк с нуля

Рик Брюстер, автор графического редактора Paint.NET, опубликовал текст, который на своём блоге процитировал Саймон Уиллисон (запись от 2 сентября 2026 года). Брюстер пишет, что Direct2D, графический API Windows, всегда был главным препятствием для запуска Paint.NET на WINE (слое совместимости, позволяющем запускать Windows-программы на Linux), и стало ясно, что реализация Direct2D в WINE никогда не будет доведена до нужного уровня. Просто отключить использование Direct2D тоже нельзя. Поэтому Брюстер добавил в Paint.NET собственную реализацию Direct2D, написанную с нуля методом чистой комнаты, то есть реверс-инжинирингом поведения оригинального API без обращения к его исходному коду. Она включается флагом /wine и лежит в отдельной библиотеке PaintDotNet.Windows.Direct2D1.Managed.dll. Написал её, по словам Брюстера, «наш добрый друг Claude», без которого, как он утверждает, это «было бы невозможно и никогда бы не произошло».

Брюстер прямо называет большую часть этого кода «vibe coded», написанным в стиле «поверь мне на слово», без тщательного ревью: 180 000 строк он физически не может прочитать и проверить целиком. Для сравнения, весь остальной Paint.NET, это около 700 000 строк, над которыми Брюстер работает больше 20 лет. Он описывает работу с Claude как неровную: временами модель работала «с яростью десяти вырвавшихся на свободу гениев уровня Эйнштейна», а временами, гораздо хуже. Ему приходилось приглядывать за Claude: например, какое-то время модель не выполняла COM-эквивалент AddRef() для объектов со счётчиком ссылок, то есть неправильно вела учёт времени жизни объектов, и Брюстер это заметил и поправил. Несколько раз он вмешивался и в архитектурные решения, которые счёл откровенно плохими. При этом он отмечает и сильные стороны: Claude проделала кропотливую реверс-инжиниринговую работу, чтобы вывести формулы для встроенной в Direct2D библиотеки эффектов.

Ключевые факты

  • Автор Paint.NET Рик Брюстер добавил в редактор собственную реализацию Direct2D для WINE, написанную Claude с нуля методом чистой комнаты (реверс-инжиниринг без доступа к оригинальному коду)
  • Код лежит в PaintDotNet.Windows.Direct2D1.Managed.dll и включается флагом /wine
  • Объём новой реализации, 180 000 строк кода против примерно 700 000 строк во всём остальном Paint.NET, над которым Брюстер работает больше 20 лет
  • Брюстер называет большую часть кода «vibe coded», не прошедшим тщательное ревью, потому что проверить 180 000 строк целиком физически невозможно
  • Брюстеру приходилось поправлять Claude: модель какое-то время неправильно вела подсчёт ссылок (COM-эквивалент AddRef) и допускала откровенно плохие архитектурные решения, но также проделала сложную реверс-инжиниринговую работу по формулам эффектов Direct2D

Почему это важно

Direct2D десятилетиями был тем местом, где WINE, слой совместимости для запуска Windows-программ на Linux, не дотягивал до нужного Paint.NET уровня, и обойти это отключением функции было нельзя. Вместо того чтобы смириться с ограничением, автор редактора получил рабочую замену API методом реверс-инжиниринга, и, по его собственным словам, без Claude это «было бы невозможно и никогда бы не произошло». Это конкретный пример того, что модель способна довести до работающего состояния объёмную низкоуровневую системную задачу, которую один человек физически не потянул бы в разумные сроки.

Кому это важно

В первую очередь, пользователям Paint.NET на Linux, для которых WINE-режим (флаг /wine) станет более полнофункциональным. Во вторую, разработчикам, которые сталкиваются со сложными и плохо документированными системными API вроде Direct2D и рассматривают реверс-инжиниринг как путь их обхода. И в третью, всем, кто следит за реальными кейсами применения ИИ-агентов в разработке: это не демонстрационный пример, а рабочий код в состоявшемся open-source-проекте с 20-летней историей.

Как это применить

Механика описана прямо: новая реализация Direct2D включается флагом /wine и живёт в отдельной сборке PaintDotNet.Windows.Direct2D1.Managed.dll, не затрагивая основной код редактора. Отдельного внимания стоит сам процесс работы с моделью, который описывает Брюстер: не разовая генерация, а итеративное сопровождение, он ловил конкретные ошибки (пропущенный подсчёт ссылок для COM-объектов) и вручную поправлял архитектурные решения, которые счёл неудачными, вместо того чтобы полностью полагаться на результат без проверки.

Можно ли доверять

Источник, сам автор Paint.NET, напрямую описывающий свой опыт, поэтому фактура надёжная. Но доверять стоит с той же оговоркой, которую делает сам Брюстер: код в основном не прошёл тщательное ревью, потому что 180 000 строк невозможно проверить целиком одному человеку, и он прямо называет это стилем «поверь мне на слово». Источник не уточняет, вошла ли эта функциональность уже в выпущенную версию Paint.NET или пока остаётся в разработке.

Риски и подводные камни

Главный риск назван самим автором: код объёмом 180 000 строк, написанный ИИ и не прошедший полноценного ревью, неизбежно может содержать незамеченные ошибки, Брюстер сам обнаружил как минимум одну серьёзную (некорректный подсчёт ссылок на объекты) уже после того, как код был написан. Формального процесса тестирования или QA, помимо выборочных проверок и «приглядывания» самого Брюстера, в источнике не описано. То, что модель временами принимала откровенно плохие архитектурные решения, требующие ручного вмешательства, показывает: подобная работа пока требует постоянного человеческого контроля, а не запуска в режиме «сделай и отойди».

«Это было написано нашим добрым другом Claude, без которого это было бы невозможно и никогда бы не произошло.»

— Рик Брюстер, автор Paint.NET