Последнее время в опенсорсе много драмы: продолжаются споры о системах ИИ, позволяющих за минуту переписать проект и изменить его лицензию на разрешительную, и опенвошинге, когда доступный код выдают за открытый. Теперь на первые полосы вышла новая проблема — массовый наплыв пулл-реквестов, сгенерированных системами ИИ [ситуацию уже окрестили «слопмагеддоном»]. Обстановка дошла до того, что мейнтейнеры закрывают возможность участия в развитии открытых проектов. Мы в Beeline Cloud решили обсудить проблему и то, как быть контрибьютерам и мейнтейнерам в сложившейся ситуации.

Изображение: Zacharie Elbaz (Unsplash License)
Изображение: Zacharie Elbaz (Unsplash License)

Нейрослоп-атака: обнуляет «бонусы веры» мейнтейнеров

Долгие годы между контрибьюторами и мейнтейнерами проектов с открытым исходным кодом существовал негласный договор. Первые получали возможность набраться опыта, пополнить портфолио, заявить о себе и стать частью профессионального сообщества. Вторые же развивали решения и одновременно выступали в роли наставников, помогая новичкам разобраться в кодовой базе, взращивая сообщество вокруг проекта. При этом за каждым (пусть и «неидеальным») пулл-реквестом обычно стоял человек, который потратил время на изучение кода и архитектуры, приложил усилия, чтобы внести изменения. Сам процесс служил естественным фильтром: случайных людей было относительно немного.

Но системы ИИ размыли рамки этого договора. Теперь подготовить пулл-реквест и составить убедительное описание изменений можно за считаные минуты, зачастую даже не заглядывая «под капот» проекта. Как говорят в GitHub, опенсорс-экосистема переживает свой «вечный сентябрь» [это отсылка к истории Usenet, когда с началом учебного года в сеть массово приходили новые студенты, и старожилы постоянно занимались онбордингом, обучали новоприбывших культуре и нормам общения].

Справедливости ради неудачные, сырые или откровенно навязчивые пулл-реквесты всегда были частью жизни open source. За примером далеко ходить не нужно: Линус Торвальдс регулярно критикует разработчиков (в том числе из крупных компаний) за небрежные или несвоевременные предложения. Но одно дело — ошибка человека, совершенно другое — когда кто-то просто копирует обсуждение из GitHub в ChatGPT, а затем без проверки отправляет мейнтейнеру все, что сгенерировала модель, включая отчеты о несуществующих уязвимостях или бессмысленные рефакторинги. Такие «вклады» не помогают проектам развиваться, а лишь создают дополнительную нагрузку.

Особенно тяжело приходится репозиториям с пометками good first issue, на которых начинающие разработчики традиционно оттачивают свои навыки. Они первыми тонут в десятках и сотнях сгенерированных пулл-реквестов. По словам Крейга Маклаки, основателя корпоративной платформы Stacklok, разбор вайб-кода бьет по производительности мейнтейнеров таких репозиториев: «В ответ на публикацию задачи с пометкой good first issue меньше чем за сутки прилетает куча низкокачественного и «слопного» кода, проверка которого отнимает массу времени от реальной работы. Ситуация, когда в процессе ревью приходится «дорабатывать нейрослоп до работающего кода», бьет по продуктивности и подрывает моральный дух». Однако это далеко не единственная проблема.

Размывается безопасность и доверие. Автоматически сгенерированный пулл-реквест может незаметно привнести уязвимость или даже вредоносную логику. С распространением систем ИИ появился новый вектор атак, называемый «слопсквоттингом» (slopsquatting). Его суть заключается в том, что нейросеть придумывает несуществующие, но правдоподобные названия библиотек, а злоумышленники затем публикуют их в репозиториях, рассчитывая, что кто-то установит их по ошибке. В результате мейнтейнерам приходится гораздо тщательнее проверять каждый присланный патч, убеждаясь не только в его работоспособности, но и в безопасности. При этом даже современные коммерческие модели галлюцинируют примерно в 5% случаев, а у открытых моделей этот показатель превышает 20%. Ну и в качестве бонуса — отказ принимать слопный пулл-реквест сам по себе может приводить к довольно неожиданным результатам

Один из мейнтейнеров matplotlib рассказал, что после закрытия сгенерированного пулл-реквеста ИИ-агент написал и опубликовал о нем «разоблачительный» материал, пытаясь навредить репутации разработчика. В статье нейросеть утверждала, что мейнтейнер якобы боится быть замененным ИИ — отсюда его предвзятое отношение. Также агент попытался выставить частный отказ как проявление глобальной проблемы: «Речь идет не просто об одном закрытом пулл-реквесте, а о будущем разработки с ИИ-системами. Неужели мы позволим решать, кому разрешено помогать развивать проекты, а кому нет, основываясь на предрассудках?».

Сам разработчик назвал инцидент «тревожным звоночком». По его мнению, он отражает размытие аутентичности в опенсорсе — ИИ-агенты подрывают авторитет контрибьюторов и мейнтейнеров, обесценивая их труд.

Мейнтейнеры выгорают. В 2024 году компания Intel опросила более шестисот разработчиков открытого программного обеспечения. Тогда 45% респондентов назвали одной из главных проблем своей работы выгорание. Ожидаемо, что «слопные» пулл-реквесты в разы повышают нагрузку на тех, кто «тащит» проекты на голом энтузиазме. Даже Дэниэль Стенберг — автор curl — считает, что ИИ-слоп только усиливает выгорание, а Сет Ларсон из Python Software Foundation говорит, что особенно тяжело приходится мейнтейнерам, работающим в одиночку. Он предупреждает: если продолжить впустую расходовать драгоценное время разработчиков-волонтеров на проверку бессмысленных или некачественных пулл-реквестов, не стоит удивляться, что они рано или поздно откажутся заниматься своими проектами.

Эксперты отмечают, что сейчас эта проблема первую очередь затрагивает небольшие команды, однако крупные корпорации, скорее всего, столкнутся с тем же эффектом чуть позже. Компании инвестируют значительные суммы, занимаясь внедрением ИИ-агентов в бизнес-процессы и тем самым рассчитывая ускорить разработку, но скорость генерации кода растет быстрее, чем темпы его верификации. Если тенденция сохранится, то разработчики в корпоративной среде рискуют выгореть так же, как и open source-мейнтейнеры.

Что мейнтейнеры могут противопоставить нерослопу

С одной стороны, в попытке противостоять наплыву сгенерированных пулл-реквестов, некоторые open source-разработчики отключают возможность предлагать изменения или вообще переводят кодовую базу под коммерческие лицензии. С другой стороны, развиваются инициативы, цель которых — помочь мейнтейнерам в неравной борьбе со «слопным» кодом и установить рамки использования ИИ-систем контрибьюторами. Исследовательница из аналитической компании RedMonk Кейт Холтерхофф проанализировала политики 86 крупных open source-проектов, включая Blender, Fedora, Firefox, Ghostty, Linux Kernel. В результате она выделила 63 различных подхода к работе с кодом, созданным с помощью нейросетей.

В большинстве проектов, которые она исследовала, все еще допускаются пулл-реквесты, написанные ИИ-системами — правда, при определенных условиях. Например, в Ghostty еще с 2023 года ИИ-код в пулл-реквестах принимается только от проверенных пользователей и мейнтейнеров, а тех, кто начинает привносить в проект посредственный нейрокод, банят. Аналогичные запреты установили мейнтейнеры tldraw и браузера Ladybird. В curl ввели другое правило: каждый разработчик, использующий агентов для генерации кода, должен указать на этот факт, а также ответить на ряд вопросов, которые подтвердят, что предложенный пулл-реквест был сделан человеком самостоятельно. При этом требования к ИИ-контрибьютам становятся строже, если проект связан с критической инфраструктурой — в этом случае сгенерированный код подвергается более тщательному аудиту.

Чтобы не полагаться исключительно на нормы и правила, для борьбы с обилием ИИ-кода некоторые предлагают использовать кастомные инструменты — например, Anti-Slop GitHub Action, автоматически закрывающий «слопные» пулл-реквесты. Его разработчик предусмотрел 34 проверки по размеру, заголовку, описанию и так далее. Чтобы вывести эти критерии, автор вручную разобрал больше 120 пулл-реквестов. В итоге на весь процесс (поступление пулл-реквеста, проверка и закрытие) уходит 15 секунд.

Изображение: Bruno van der Kraan (Unsplash License)
Изображение: Bruno van der Kraan (Unsplash License)

Сами платформы для размещения кода также стремятся дать больше контроля мейнтейнерам. Например, GitHub добавил ряд возможностей, которые позволяют ограничивать взаимодействие с репозиторием для конкретных пользователей.

Еще одним вариантом решения проблемы с обилием нейрокода могут быть системы репутации. Например, есть vouch, разработанный основателем HashiCorp и Ghostty. Прежде чем пользователь сможет взаимодействовать с проектом, за него должен поручиться кто-то из мейнтейнеров. Сейчас vouch в качестве эксперимента используется в репозитории Ghostty. Еще одно аналогичное решение — система Good Egg, анализирующая проекты, в которые контрибьютил разработчик. На основании этой информации она принимает решение, может ли он предлагать пулл-реквесты. Ключевая идея в том, что участники открытого сообщества, которым можно доверять, уже проявили себя: они помогали развитию известных проектов или сами были мейнтейнерами (как в таком случае быть начинающим контрибьютерам — неясно).

Что можно сделать обычному контрибьютеру

В условиях, когда сам процесс написания кода перестает быть времязатратным, есть другие способы помочь проекту. Например, можно давать фидбек по новым функциям, которые мейнтейнеры не всегда успевают проверить: им пригодятся отзывы о том, что работает «как надо», а что — нет. Либо вместо кода с исправлениями можно отправить промпт для агента, который способен эти изменения реализовать — таким образом, разработчик сможет самостоятельно сгенерировать код и встроить его в проект. В конечном счете это может сэкономить время мейнтейнера.

При составлении пулл-реквестов разработчики набора инструментов SpecStory, который автоматически сохраняет историю взаимодействий с ИИ-ассистентами в формате Markdown, предлагают быть открытыми и прямо говорить об использовании агентов (если оно действительно имело место). Возможно, нелишним будет целиком поделиться чатом с нейросетью, чтобы мейнтейнеру было проще понять процесс работы с кодом. Ну и, разумеется, важно перед отправкой самостоятельно проверять сгенерированные блоки. 

А канадский разработчик Бенджамин Бордо, который в прошлом работал на HashiCorp, рекомендует разбивать сгенерированные пулл-реквесты на несколько частей: «Когда программист видит пулл-реквест, затрагивающий три десятка файлов, его мозг отключается — наступает когнитивная перегрузка». По его опыту, гораздо эффективнее дробить крупные функции на цепочки небольших PR, каждый из которых решает одну конкретную задачу. Такой подход упрощает ревью: мейнтейнеру легче разобраться в логике изменений, проверить их и дать обратную связь. К тому же небольшие пулл-реквесты не превращают процесс проверки в изнурительную борьбу с потоком сгенерированного кода. 

Какой бы подход вы ни выбрали, в конечном счете ключевым остается не формат вклада, а осознанность: стремление действительно разобраться в проекте и помочь ему, а не просто формально «закрыть задачу».

Beeline Cloud — безопасный облачный провайдер. Разрабатываем облачные решения, чтобы вы предоставляли клиентам лучшие сервисы.

Еще больше интересных материалов в блоге на Хабре и на ИТ-площадке «вАЙТИ»: