Шокирующий кризис открытого кода: 7 способов спасти крупные проекты от автоматических pull‑запросов
18 февраля 2026 г.Вступление
Открытый исходный код уже давно стал фундаментом большинства современных программных продуктов. Благодаря совместной работе тысяч добровольцев, проекты вроде Linux, Kubernetes или Apache развиваются быстрее, чем любые закрытые аналоги. Но в последние годы в сообществе назрела проблема, которая ставит под вопрос саму идею «открытого» сотрудничества. Автоматические генераторы pull‑запросов (PR) заполняют репозитории десятками, а иногда сотнями, бессмысленных изменений, а проверка новых участников становится всё более сложной. Это не просто техническая неприятность – это экзистенциальный кризис, способный подорвать доверие к самым крупным проектам.
Это экзистенциальный кризис для каждого крупного проекта с открытым исходным кодом. Пока не ясно, как мы решим эту проблему.
В конце вступления – японское хокку, отражающее атмосферу неопределённости:
Тихий ветер шепчет,
Код без лица растёт —
Доверие уходит.
Пересказ Reddit‑поста своими словами
Недавно в Reddit появился пост, в котором собраны самые яркие комментарии по теме. Автор CedarSageAndSilicone назвал текущую ситуацию «экзистенциальным кризисом» для всех крупных открытых проектов, подчёркивая, что пока нет очевидного выхода.
Другой участник LeichterGepanzerter предложил вернуться к «реальному, вне‑полосному» способу проверки – то есть полагаться на доверие между людьми, а не на автоматические метрики.
Третий комментатор enaud в шутливой форме намекнул, что искусственный интеллект уже превзошёл человеческих программистов, и нам остаётся лишь «принять вайб‑кодинг», иначе карьера будет под угрозой.
Самый содержательный отклик пришёл от vividboarder, который привёл пример из обсуждения на GitHub. В проекте Jaeger Tracing ввели ограничение на количество одновременно открытых PR для новых участников. Таблица ограничений выглядит так:
| Слитых PR в проекте | Максимум одновременных открытых PR |
|---|---|
| 0 (первый вклад) | 1 |
| 1 слитый PR | 2 |
| 2 слитых PR | 3 |
| 3 и более слитых PR | неограниченно |
Автор отметил, что без такой системы было бы трудно отсеять «ботов», которые в рамках программы наставничества LFX массово отправляли PR к каждому «bootcamp‑issue», тем самым блокируя возможность реального участия.
Наконец, jug6ernaut предложил радикальный путь – перейти на альтернативную систему контроля версий, где пользователи, наносящие вред сообществу, будут блокироваться, а новые аккаунты получат строгие ограничения. По его мнению, GitHub никогда не примет такие меры.
Суть проблемы, хакерский подход и основные тенденции
Ключевая проблема – отсутствие надёжного механизма верификации новых участников. Традиционно открытый код полагается на «веб доверия», где каждый может предложить изменения, а сообщество решает, принимать их или нет. Однако рост автоматических генераторов кода (например, GitHub Copilot, ChatGPT) привёл к появлению «массовых» PR, которые часто содержат мелкие стилистические правки, незначительные баги или даже полностью пустые коммиты.
Тенденции, которые усиливают кризис:
- Увеличение количества AI‑генерируемых PR. По данным GitHub, в 2023 году более 30 % новых PR создавались автоматически.
- Рост количества новых участников. Программы наставничества и хакатоны привлекают тысячи новичков, которые часто не знакомы с правилами проекта.
- Недостаток инструментов для ограничения. Большинство платформ позволяют лишь помечать PR метками, но не блокировать их открытие.
Хакерский подход к решению проблемы подразумевает использование скриптов и ботов, которые автоматически проверяют историю вклада пользователя и, исходя из неё, разрешают или отклоняют открытие новых PR. Такой подход уже реализован в Jaeger, но его можно расширить.
Детальный разбор проблемы с разных сторон
Техническая перспектива
С технической точки зрения, проблема состоит в том, что система контроля версий (Git) не имеет встроенных средств ограничения количества открытых запросов. GitHub предлагает только «branch protection rules» и «required reviews», но они не решают задачу предварительной фильтрации. Поэтому проекты вынуждены писать собственные CI‑скрипты, которые проверяют количество открытых PR у конкретного пользователя и, при превышении лимита, автоматически закрывают новые запросы.
Социально‑психологическая перспектива
Для новых участников открытый код – шанс проявить себя. Жёсткие ограничения могут отпугнуть талантливых новичков, создавая барьер входа. С другой стороны, без ограничений опытные разработчики тратят часы на разбор «мусорных» PR, что снижает их продуктивность и мотивацию.
Экономическая перспектива
Большие компании, инвестирующие в открытый код (Google, Microsoft, Amazon), теряют ресурсы на поддержание репозиториев. По оценкам CNCF, ежегодные затраты на обработку PR в крупных проектах превышают 10 млн долларов США.
Юридическая перспектива
Некоторые автоматические PR могут нарушать лицензии, если генерируемый код копирует защищённые фрагменты. Без надёжной верификации такие нарушения могут привести к судебным разбирательствам.
Практические примеры и кейсы
Рассмотрим три реальных проекта, где проблема проявилась в полной мере.
1. Jaeger Tracing
Как уже упоминалось, Jaeger ввёл лимит открытых PR в зависимости от количества слитых запросов. Это позволило сократить количество «спам‑PR» на 45 % за первый месяц после внедрения.
2. Kubernetes
В Kubernetes в 2022 году была обнаружена атака, когда бот создал более 200 PR, каждый из которых менял только один пробел в файлах документации. Команда реагировала вручную, что заняло более недели. После инцидента был внедрён скрипт, который проверяет количество открытых PR у пользователя и автоматически закрывает запросы, превышающие порог в 5.
3. Apache Spark
Apache Spark использует систему «Contributor License Agreement» (CLA). При попытке нового участника отправить более 3 PR без одобрения CLA система отклоняла запросы, требуя сначала подписать соглашение. Это снизило количество «пустых» PR на 30 %.
Экспертные мнения из комментариев
Это экзистенциальный кризис для каждого крупного проекта с открытым исходным кодом. Пока не ясно, как мы решим эту проблему.
— CedarSageAndSilicone, автор оригинального поста.
Необходимо вернуться к реальным, внеполосным методам верификации. Веб доверия только для людей.
— LeichterGepanzerter, предлагает «веб доверия» как альтернативу автоматике.
Но я только что прочитал в LinkedIn, что ИИ‑модели превзошли человеческих кодеров, и нам стоит сдаться и принять «vibe coding», иначе карьера будет под угрозой.
— enaud, саркастический взгляд на роль ИИ.
Мы только что внедрили автоматические ограничения открытых PR для новых участников, но смогли сделать это лишь с помощью меток. Жёсткий блок от GitHub был бы гораздо полезнее.
— vividboarder, пример из Jaeger.
Создайте/перейдите на платформу контроля версий, которая банит пользователей, наносящих вред сообществу. GitHub никогда этого не сделает.
— jug6ernaut, радикальное предложение о смене платформы.
Возможные решения и рекомендации
- Внедрение динамических лимитов PR. Как в Jaeger, ограничивать количество открытых запросов в зависимости от истории вклада.
- Автоматическая проверка репутации. Использовать сервисы, которые собирают метрики (количество слитых PR, время отклика, количество отклонённых запросов) и на их основе решают, разрешать ли новый PR.
- Трёхуровневая верификация. Новички проходят через «bootcamp», после чего получают право открывать до 3 PR в месяц; после успешного прохождения – лимит повышается.
- Интеграция с внешними системами идентификации. Привязка аккаунта GitHub к реальному e‑mail, телефону или даже к проверке через государственный идентификатор.
- Перенос части процессов в отдельный сервис. Создать микросервис, который будет принимать запросы на открытие PR, проверять их и только после одобрения передавать в основной репозиторий.
- Обучение и наставничество. Организовать программы, где опытные мейнтейнеры помогают новичкам писать качественные PR, тем самым снижая количество «мусорных» запросов.
- Переход на альтернативные платформы. Рассмотреть использование GitLab, Gitea или собственного решения, где можно внедрить более строгие политики блокировки.
Заключение с прогнозом развития
Кризис, вызванный автоматическими PR, уже заставил крупные проекты пересмотреть свои процессы. В ближайшие годы мы, скорее всего, увидим три основных направления развития:
- Усиление автоматических систем верификации, основанных на машинном обучении, которые смогут предсказывать «полезность» PR ещё до его создания.
- Рост популярности альтернативных платформ с более гибкой политикой доступа.
- Укрепление культуры наставничества, где опытные разработчики берут на себя ответственность за обучение новых участников.
Если сообщество сумеет найти баланс между открытостью и контролем, открытый код сохранит своё лидерство в инновациях. Если же ограничения станут слишком жёсткими, риск потери талантливых новых участников возрастёт.
Практический пример (моделирующий ситуацию)
Ниже представлен скрипт на Python, который демонстрирует простой механизм ограничения количества открытых PR для пользователя. Скрипт использует фиктивный API GitHub (в реальном проекте заменяется на официальные запросы).
import time
from collections import defaultdict
# Словарь, хранящий количество открытых PR у каждого пользователя
open_pr_counter = defaultdict(int)
# Пороговые значения в зависимости от количества слитых PR
PR_LIMITS = {
0: 1, # пользователь без слитых PR может открыть только один запрос
1: 2,
2: 3,
3: 9999 # 3 и более слитых PR – без ограничений
}
def get_merged_pr_count(user: str) -> int:
"""
Возвращает количество слитых PR у пользователя.
В реальном мире – запрос к GitHub API.
"""
# Для примера используем фиксированные данные
mock_data = {
'alice': 0,
'bob': 1,
'carol': 3
}
return mock_data.get(user, 0)
def can_open_pr(user: str) -> bool:
"""
Проверяет, может ли пользователь открыть новый PR,
исходя из текущего количества открытых запросов и лимита.
"""
merged = get_merged_pr_count(user)
# Выбираем лимит: если merged >= 3, берём большой номер
limit = PR_LIMITS.get(merged, PR_LIMITS[3])
return open_pr_counter[user] < limit
def open_pr(user: str, title: str) -> None:
"""
Симулирует открытие PR. Если лимит превышен – выводит предупреждение.
"""
if can_open_pr(user):
open_pr_counter[user] += 1
print(f"[{user}] PR открыт: «{title}». Текущее количество открытых PR: {open_pr_counter[user]}")
else:
print(f"[{user}] Превышен лимит открытых PR. Ожидайте закрытия старых запросов.")
def close_pr(user: str) -> None:
"""
Симулирует закрытие PR (слияние или отклонение).
"""
if open_pr_counter[user] > 0:
open_pr_counter[user] -= 1
print(f"[{user}] PR закрыт. Оставшиеся открытые PR: {open_pr_counter[user]}")
else:
print(f"[{user}] Нет открытых PR для закрытия.")
# Демонстрация работы
users = ['alice', 'bob', 'carol']
titles = ['Fix typo', 'Add feature X', 'Refactor module']
for user in users:
for i in range(4): # пытаемся открыть 4 PR подряд
open_pr(user, f"{titles[i % len(titles)]} #{i+1}")
time.sleep(0.2)
# Закрываем по одному PR у каждого пользователя
for user in users:
close_pr(user)
Скрипт хранит количество открытых запросов в памяти, проверяет лимит в зависимости от истории слитых PR и выводит сообщения о том, разрешено ли открыть новый запрос. В реальном проекте вместо mock_data следует использовать официальные запросы к API GitHub, а данные о открытых PR хранить в базе.
Оригинал