모든 'AI 기여 금지' 정책은 레벨 0 통제(Level 0 control)이다
요약
QGIS 프로젝트가 LLM, AI 또는 에이전트 지원 코딩 기여를 금지하는 정책을 채택했습니다. 이는 '코드 되돌림' 및 '기여자 권리 제재'와 같은 강력한 집행 메커니즘을 포함하며, 필자는 이를 실행 불가능한 '레벨 0 통제'로 분석합니다. 이 글은 기술 프로젝트가 AI 기여를 어떻게 규제하고 관리하는지에 대한 논의를 심층적으로 다룹니다.
핵심 포인트
- AI 지원 코딩에 대한 전면적 금지 정책이 QGIS에 도입됨.
- 정책 위반 시 코드 되돌림 및 권리 제재 같은 강력한 조치가 예고됨.
- 필자는 이 통제가 실질적인 집행력이 없는 '레벨 0 통제'라고 분석함.
- AI 기술 발전 속도와 개발 프로젝트의 규제 노력 간의 괴리를 지적함.
이번 주 QGIS는 QEP #387을 병합했습니다: "qgis/qgis 저장소에서는 LLM, AI 또는 에이전트 지원 코딩 기여를 허용하지 않는다." 위반자는 "코드 되돌림(code reversion)" 및 "기여자 권리 제재(contributor rights sanctioning)"에 직면하게 됩니다. 이는 인간 참여형 정책(human-in-the-loop policy)을 대체하는 것이며, 투표를 통과했고 10월 7일자로 master 브랜치에 반영되었습니다. HN 스레드는 수백 개의 댓글이 달렸으며, "주의력 배분이 공정하다"와 "이것은 우유처럼 상할 것이다"라는 의견으로 나뉘어 있습니다.
전체 논쟁을 종결지은 구절은 프로젝트 자체에서 제안서 토론 과정에 작성되었습니다. 준수 여부에 대해 묻자, 핵심 기여자 중 한 명이 다음과 같이 답했습니다: 스스로 양심적으로 코드를 작성했습니까.
이것은 집행 메커니즘이 아닙니다. 이것은 되돌림 조항(reversion clause)이 첨부된 양심 테스트입니다—그리고 이 시리즈가 구축해 온 분류법으로 볼 때, 이는 교과서적인 **레벨 0 통제(Level 0 control)**를 만듭니다. 아무도 실행하지 않아 조용히 실패하고, 그 표류가 눈에 보이지 않는 영어 단락인 것입니다. 프로젝트는 이를 알고 있으며, 이 집행 문구 역시 그것을 솔직하게 말하고 있습니다. 논쟁에서 빠진 것은 사다리—그리고 두 번째 발판이 무엇을 비용으로 요구하는지입니다.
금지를 먼저 부여해야 하는 이유, 왜냐하면 이것은 합리적이기 때문이다
어떤 것을 평가하기 전에: 작업량은 실제이며 유지 관리자들은 상상하는 것이 아닙니다. 이 제안의 근거는 "막대하고 감당할 수 없는 압박감", AI 볼륨이 "인간 검토가 진지하게 다룰 수 있는 수준을 초과한다"는 내용으로, 모든 영역의 모든 유지 관리자가 보고하는 것과 일치합니다. 그리고 이것이 QGIS의 첫 번째 통제 시도가 아닙니다: 이전에 AI 지원 PR(Pull Request)에 대한 태깅 프로세스가 시도되었으나 조용히 실패했으며, 약 50개의 PR이 태그되고 40개가 폐쇄되었습니다. 그들은 더 가벼운 통제를 시도했습니다. 그것은 유지되지 못했습니다. 한 투표자는 Nyall Dawson의 "닫힌 문으로 시작하고 선택적으로 여는 것"을 임시방편이라고 말하며, "아기가 생존 불가능할 수도 있다"고 했습니다.
전면적인 금지(blanket ban)는 "우리가 이번 분기를 어떻게 살아남을 수 있을까?"라는 질문에 대한 올바른 답변입니다. 이 글은 다음 질문, 즉 정책이 무엇으로 만들어졌으며, 그 재료가 무엇의 비용을 요구하는지에 관한 것입니다.
사다리 적용
모든 통제는 세 개의 디딤돌 중 하나에 위치하며, 무엇이 그것을 강제하는지에 따라 등급이 매겨집니다:
레벨 0 — 문장. 아무도 실행하지 않는 문서에 명시된 “AI 기여 금지”. 조용히 실패합니다. 표류(drift)는 눈에 보이지 않기 때문입니다. 트리거 조건—이 코드가 AI의 도움을 받았었나?—은 양심 외에는 어떤 것으로도 평가될 수 없기 때문입니다. QGIS 스레드에서 정의된 구멍들은 초안 작성상의 사고가 아닙니다. 그것은 트리거가 평가 불가능하다는 증거입니다. 자동 완성도 포함되나요? 번역도요? 임포트를 재정렬한 랭킹 모델은요? 범위가 결정할 수 없는 규칙은 인간의 정직한 기억보다 낮은 어떤 것으로도 강제될 수 없으며, 프로젝트는 이미 그것이 메커니즘이라고 말했습니다.
레벨 1 — 컨텍스트 내 원시적 요소. 기여자가 PR(Pull Request)에 남기는 선언입니다. 템플릿 필드, 트레일러 라인, 커밋까지 살아남는 체크박스 같은 것입니다. 눈에 띄게 실패합니다—하지만 누군가 보지 않으면 안 됩니다. QGIS가 이 디딤돌을 시도했습니다: 태그 지정 과정이었습니다. 그것은 지루한 이유로 실패했습니다—전체 역사에서 겨우 오십 개의 태그는 강제가 아니라 장식입니다. 레벨 1은 CI(Continuous Integration)가 확인할 때 작동하며, QGIS의 것은 그렇지 못했습니다.
레벨 2 — 호스트가 거부함. 통제는 누구의 기억도 신뢰하지 않고 실행되는 게이트에 존재합니다. 이것이 논쟁이 계속 건너뛰는 디딤돌입니다. 사람들은 두 가지 다른 문제를 혼동하기 때문입니다: AI 코드 감지(적대적이며, 극복 불가능함—단순한 코드는 탐지할 수 없고 항상 그럴 것입니다)와 프로세스를 서명된 이름에 바인딩하는 것(지루하고, 극복 가능하며, 영수증이 존재하는 이유입니다).
이 시리즈가 따르는 영수증 스키마는 코드에서 이 구분을 전달합니다. 모든 판결은 judged_by를 가져야 하며—필수 항목이고 기본값은 없습니다. 스키마는 레이블 없는 판결을 봉인하기보다는 오류를 발생시킵니다. LLM(Large Language Model)이 판단한 확인의 경우, spec_hash가 필수입니다: 판단을 정의하는 프롬프트가 해시되므로, 루브릭과 그 패러프레이즈는 다른 ID를 생성합니다. 어느 필드도 거짓말을 감지한다고 주장하지 않습니다. 그것들은 레이블 없는 주장을 봉인할 수 없게 만듭니다—만약 거짓말이 온다면, 서명되어 도착해야 합니다.
측정된 부분: 20개 리포지토리, 6가지 정책, 제로 강제화
데이터가 없는 분류 체계는 설교에 불과하므로, 저는 GitHub에서 가장 많은 별을 받은 20개의 리포지토리를 감사했습니다. 이 프로젝트들은 수많은 기여자들이 무엇이 정상이라고 생각하는지를 규정하는 정책들을 가지고 있습니다. 제가 사용한 방법은 다음과 같습니다: 각 리포지토리의 기여 문서와 AI 정책 파일을 가져와, 발견된 모든 정책을 전문(全文)으로 읽고, 사다리 위에서 등급을 매긴 다음, 해당 리포지토리의 GitHub 워크플로우 이름에서 AI, LLM 또는 공개를 참조하는 자동화가 있는지 확인했습니다.
20개 중 14개는 기여 문서 어디에도 AI 정책이 없습니다. — 수백 건에 달하는 AI 생성 PR을 받는 몇몇 프로젝트를 포함하여 말입니다. 6개는 하나씩 가지고 있습니다. 저는 이 6개를 모두 전문으로 읽었고, 사다리 위에서 등급을 매긴 결과, 그 어느 것도 문턱(gate) 아래에 머물렀습니다:
| 리포지토리 | 명시된 정책 | 단계 (Rung) | 기계적 강제화 |
|---|---|---|---|
| denoland/deno | AI 지원 기여: |
세 가지 발견을 관심도 순으로 나열했습니다. Deno, node, 그리고 PyTorch는 공개(disclosure)에 수렴합니다 — 생태계의 합의된 단계는 '소리 내어 말하는 것'이며, PyTorch가 가장 멀리 나아갑니다: AI 콘텐츠는 인간 주석이 첨부된 레이블링된 PR-템플릿 섹션 아래에 _포함_되어야 합니다. 이것이 누구나 배포할 수 있는 구조와 가장 가깝습니다 — 템플릿은 기본적으로 섹션을 존재하게 만듭니다. 비어 있더라도 적어도 보입니다. Home Assistant는 믿음에 기반하여 PR을 닫습니다 — '우리는 자율적으로 생성되었다고 믿는다' — 이는 샘플에서 가장 강력한 트리거이며, 가장 약한 도구에 의해 적용됩니다. 그리고 Rust가 제가 이 글을 쓰기 전에 논문을 작성했습니다: '이 정책의 많은 조항들이 집행 불가능하다는 것을 알고 있다. 우리의 목표는 모든 위반 사례를 잡는 것이 아니다... 우리의 목표는 그럴듯한 부인 가능성(plausible deniability)을 제거하는 것이다: 정책을 따르는 것과 의도적으로 위반하는 것 사이의 선택을 강요하는 것이다.'
Rust는 사다리가 공정하다는 증거입니다. 그 정책은 산문이며 — 트리거에 의한 레벨 0(Level 0)입니다 — 그리고 그것은 자신의 서론에서 소리 내어 말합니다. QGIS는 레이블 없이 같은 단계에서 되돌림 및 제재를 위협합니다. 동일한 재료, 반대되는 정직함: 한쪽은 자신이 집행해야 할 곳에 '이 조항들은 집행 불가능하다'고 썼고; 다른 쪽은 양심 테스트를 되돌림 위협으로 치장했습니다. 그들 사이의 차이는 엄격함이 아닙니다. 정책 자체의 단계가 반증 가능(falsifiable)한지 여부입니다.

AI 기여를 위한 레벨 2(Level 2) 정책의 모습
탐지(detection)가 아닙니다. 프로세스, 서명됨(Process, signed):
- 모든 커밋에 출처(provenance) 트레일러를 남기는 것.
Signed-off-by와 동일한 형태이며,Authored-by: human또는Authored-by: human, assisted-by: <tool>의 형식을 갖춘다. LLM 탐지 주장은 없다—이는 CI(Continuous Integration)에서 요구하는 선언일 뿐이며, 부재 시 게이트 단계에서 거부된다. HN에서 인용된 리눅스 커널의 답변("LLM 사용은 허용되지만, 그 결과로 생성되는 코드에 대한 책임은 전적으로 사용자에게 있다")은 이 원칙을 제시한다: 탐지 휴리스틱(detection heuristic)이 아닌 서명된 이름 자체에 책임이 귀속되어야 한다는 것이다. - 기록된 이유와 함께하는 되돌리기(reversion). QGIS가 이미 위협하고 있는 "코드 되돌림 및 제재"는, 되돌리기가 어떤 커밋인지, 어떤 규칙을 위반했는지, 누가 검토했는지에 대한 영수증(receipts)을 지니게 되는 순간 강제성이 부여된다. 사적인 대화 속에 존재하는 징계는 통제가 될 수 없다.
- 공개된 예외 로그. Dawson이 주장하는 "폐쇄적이지만 사례별로 열린" 방식(자동 완성 대체, 번역 등)은 올바른 형태이다—하지만 공공 기록이 없는 사례별 문은 조용히 복도가 되어버리는 문과 같다. 이 예외 장부 자체가 정책의 감사 추적(audit trail)인 것이다.
- 선택 사항이며, 유지보수자들이 원할 때만 적용 가능한: 문서에 대한 카나리아(canaries for docs). 기여하는 문서에 미끼 지침을 심어 누가 이를 커밋하는지 확인해 보는 것—이는 의도적으로 실패한 탐지 과정으로, 이미 에이전트 평가에 유용함이 입증되었다. 저렴하고 불완전하지만, 심판자라기보다는 경고등(tripwire)이라는 점을 솔직하게 밝힌다.
- 그 원칙을 정책에 명시하는 것. Rust의 LLM 정책은 자체 개요에서 이를 수행한다—"우리는 이 정책의 많은 조항들이 집행 불가능하다는 것을 인지하고 있다"—그리고 이 문장이 바로 아무도 Rust가 속이는 척한다고 비난할 수 없는 이유이다. 헌법이든 코드든, 표시된 약점은 보이지 않는 약점보다 낫다.
이 모든 것은 AI 코드를 탐지하는 것이 아니다. 탐지는 적대자의 게임이며, 현재 그들이 승리하고 있다. '영수증(receipts) 체제'는 더 좁고 진실된 것을 주장한다: 기여가 규칙을 위반할 때, 그 위반은 입증 가능하고, 귀속 가능하며, 기록에 남아 있어야 한다—느낌으로 발견되는 것이 아니라.
비용, 명확하게 진술하다
안전벨트세(seatbelt tax). 출처 추적 트레일러는 모든 기여자에게 커밋당 30초, 영원히 부과됩니다. 심지어 아무것도 게임할 생각이 없었던 99%의 기여자를 포함해서 말입니다. 레벨 0은 비용이 들지 않고 아무것도 잡아내지 못합니다. 반면 레벨 2는 모두에게 비용을 지우고 저작권자가 아닌 프로세스 위반 사항을 포착합니다. 가격이 없는 계단(rung)은 없습니다. '나의 기여자들은 마찰을 받아들이지 않을 것'이라고 말하는 유지보수자는 레벨 0을 선택한 것이며, 이번 주 수치를 고려할 때 — 압박감이 현실입니다 — 이는 방어 가능한 선택입니다. 다만 명시적으로 표시되어야 합니다.
두 가지 정직한 한계
이 설문조사는 노출된 조잡함이 있는 스냅샷입니다. 중요도에 따라 선정된 20개의 저장소는 정책 표면으로서 기여 문서와 정책 파일을, 워크플로우 이름은 강제 집행 표면으로 사용했습니다. 깊은 CI(Continuous Integration) 콘텐츠 감사나 해당 파일 외부에 존재하는 정책은 누락될 수 있습니다. 여섯 가지 정책 중 다섯 개는 전체 내용을 읽어 (Rust의 경우 Rust Forge에서 가져왔으며, 집행 불가능한 조항 문장은 정책 자체 개요에서 인용했습니다), 하나(QGIS)는 병합된 제안과 핵심 팀의 코멘트를 통해 평가되었습니다. 정책 작성자들이 제가 매긴 계단 배정을 받아들일지는 그들의 논쟁할 권리입니다 — 이 계단들은 그들 자신의 텍스트에서 인용되었기 때문에 논쟁이 정확할 수 있습니다.
그리고 QGIS가 이번 분기에 검증 가능성보다 생존을 선택한 것은 잘못이 아닙니다. 50개의 태그와 40개의 폐쇄된 PR(Pull Request)은 실제 숫자로 이루어진 진지한 시도입니다. '견딜 수 없는 압박감'이라는 말은 보여주기식 것이 아닙니다. 이 글은 임시방편책 역시 그 라벨을 가져야 한다고 주장합니다 — 레벨 0, 정직 기반, 추후 개정 예정 — 이 시리즈가 고백하는 모든 약점을 표시하는 방식과 Rust가 자체 조항에 라벨을 붙이는 방식과 동일하게 말입니다. 자신의 통제 계단을 정책에 명시한 프로젝트는 강제 집행 문제를 해결하지 못했습니다. 다만 강제 집행의 부재를 검증 가능한 것으로 만들었을 뿐입니다.
당신 차례
귀하의 프로젝트 AI 정책은 실제로 무엇을 강제하고 있으며, 어느 단계에 해당합니까? 만약 정책이 있다면, 댓글에 솔직하게 등급(prose, primitive, or gate)과 함께 링크해 주십시오. 그리고 기여물에 대한 집행 가능한 출처 추적 체계(provenance scheme)를 구축했다면 — 트레일러(trailers), CI 게이트(CI gates), 캐나리아(canaries), 호스트에서 거부하는 모든 것 — 증거 자료를 원합니다. 레지스트리가 작동하려면 단계가 이동해야 합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기