rust-lang/rust 모노레포 기여 시 대규모 언어 모델 사용을 규정하는 새 정책의 배경, 내용 및 기여자에게 미치는 영향을 설명합니다.
최근 Rust 프로젝트의 다섯 팀이 제가 처음 작성한 정책을 채택했습니다. 이 정책은 rust-lang/rust 모노레포에 기여할 때 대규모 언어 모델을 어떻게 사용할 수 있는지 규정합니다. 특히 이 새 정책은 LLM에 대한 공식 입장이 아니며, Rust 프로젝트의 모든 곳에 적용되지도 않습니다. 저는 아래에 설명한 매우 구체적인 목적을 위해 이 정책을 작성했습니다.
이 글에서는 이 정책을 만든 이유, 정책의 내용, 그리고 이것이 기여자에게 미칠 영향을 다룹니다.
이 정책은 다음 사람들에게 영향을 줍니다.
rust-lang/rust의 PR을 검토하거나 관리하는 사람.rust-lang/rust에서 LLM이 생성한 코드로 PR을 작성하는 사람.rust-lang/rust에 게시하는 사람.rust-lang/rust에서 LLM의 내용을 직접 인용하는 이슈나 댓글을 작성하는 사람.이 그룹 중 어느 곳에도 속하지 않는다면, 작업 방식에서 바꿔야 할 것은 없습니다.
Rust 프로젝트는 기술 산출물의 집합인 동시에, 그 산출물을 함께 만들고 유지하며 확장하는 사람들의 _커뮤니티_이기도 합니다. 우리가 “Rust 프로젝트에 기여한다”고 말할 때, 그 산출물에 대한 작업을 뜻하는 부분도 있지만, 기존 구성원들이 있는 그 커뮤니티에 참여하여 함께 협업한다는 뜻도 있습니다.
이 정책이 만들어지기 전부터 사람들은 rust-lang/rust에 기여하기 위해 LLM을 사용하고 있었습니다. 그중 일부 사용은 우리 커뮤니티를 존중했습니다. 예를 들어 사람들이 모국어로 초안을 작성할 수 있도록 메시지를 영어로 번역하거나, Rust 신규 기여자가 작성할 법한 코드 조각에서 좋지 않은 진단을 찾거나, 설계에 영향을 줄 수 있는 언어의 다른 부분에 관한 논의가 빠졌는지 확인하기 위해 RFC를 분석하는 경우입니다. 일부 사용은 때로는 의도치 않게 그러지 못했습니다.
저는 LLM이 우리 커뮤니티에 세 가지 주요 문제를 일으키는 것을 보았습니다.
시간이 흐르며 이 문제들은 점점 커졌고, 결국 이를 다루기 위한 전용 채널과 관리 정책을 만들어야 했습니다. 하지만 새 기여자는 규칙이 무엇인지 전혀 알 수 없으므로, 그런 채널은 투명하고 환영받는 환경이 되려는 우리의 목표에 어긋납니다.
새 정책은 이 규칙을 공개적으로 공식화합니다. 따라서 새 기여자는 이해하지 못하는 이유로 PR이 닫히지 않고 커뮤니티에 참여하는 방법을 알 수 있으며, 기존 검토자는 규칙을 따르지 않은 PR을 닫을 때 실행 가능한 근거로 쉽게 이 규칙을 가리킬 수 있습니다.
과거에는 오픈 소스 프로젝트에 잘 다듬어지고, 충분히 테스트되며, 상세한 PR이 들어오면, 반대편에 그 PR에 시간과 노력, 이해를 쏟은 사람이 있다는 뜻이었습니다. 이는 여러 방식으로 Rust의 문화에 영향을 주었습니다.
LLM이 등장하면서 이 신호들은 어느 것도 신뢰할 수 없게 되었습니다. 잘 다듬어진 PR은 더는 노력을 나타내지 않습니다. 잘 다듬어진 PR의 작성자가 반드시 자신의 코드를 이해하는 것도 아니며, 자율 에이전트의 경우에는 아예 반대편에 사람이 없습니다. 또한 코드를 작성하는 일이 훨씬 쉬워졌기 때문에, 잘 다듬어진 PR은 누군가가 장기적으로 계속 남아 있을 가능성을 더는 나타내지 않습니다.
이 글을 쓰는 시점에 rust-lang/rust에는 열린 PR이 1,281개 있습니다. 이는 작성자와 검토자 모두가 투입한 엄청난 시간을 뜻합니다. 우리는 코드를 작성하려는 사람보다 이를 검토하려는 사람이 적다는 문제를 오래전부터 겪어 왔습니다. LLM의 등장으로 이 문제는 더 악화될 뿐입니다.
검토 작업의 대부분은 단순히 버그를 잡아내는 일이 아닙니다. 상당 부분은 이 방향이 좋은 접근법인지, PR 자체가 좋은 생각인지 결정하는 일입니다. 다시 말해, 검토는 결정으로 이루어집니다.
검토자에게 PR을 “산탄총식으로” 던지는 것은 그들에게 큰 정신적 비용을 부과합니다. LLM PR의 작성자 대부분은 진심으로 도움을 주고 있다고 생각한다고 봅니다. 하지만 우리의 관점에서 코드 자체는 변경 사항 중 가장 작고, 어떤 면에서는 가장 덜 중요한 부분입니다. 우리는 작성자가 코드가 무엇을 하는지 이해하고, 미래에 어떻게 바뀔지 계획하며, 어떤 모습이어야 하는지 결정하는 일을 훨씬 더 중요하게 여깁니다. 코드 자체는 그 어느 것에도 도움을 줄 수 없습니다.
검토 의견을 자신의 LLM에 복사해 붙여넣고, 그 응답을 다시 GitHub에 복사해 붙여넣는 사람을 흔히 보게 됩니다. 단도직입적으로 말해, 이는 모두의 시간을 낭비합니다. 우리가 LLM의 의견을 원했다면 직접 물어볼 수도 있었습니다. 우리는 기계의 생각이 아니라 여러분의 생각을 듣고 싶습니다.
더욱이 이는 검토자와 작성자 사이의 신뢰를 저버리는 일입니다. 우리가 검토할 때의 전제는 최선의 작업을 하고 싶어 하는 실제 사람과 대화하고 있다는 것입니다. LLM 텍스트를 붙여넣으면 의심이 생깁니다. 작성자가 정말 관심을 갖고 있는가? 여기에 사람이 있기는 한가?
이 정책 이전에 우리는 관리에 대해 “무법지대”식 접근을 하고 있었습니다. LLM PR은 수십 개 있었고, 공개 규칙은 없었으며, 위험한 MIR 최적화를 첫 PR로 추가하려는 사람도 있었고, 마치 무언가를 하는 것처럼 PR 설명에 “검증: git diff --check”를 게시하는 사람도 있었습니다. 관리자가 가리킬 수 있는 것으로서 “검토자가 부담스러운 PR을 거부할 수 있도록 권한 부여”가 있기는 했지만, 집행은 일관되지 않았고 규칙은 어디에도 공개되어 있지 않았습니다. 실제로 규칙은 “명백하게 끔찍하지만 않다면 무엇이든 가능하다”였습니다. 이전 상황과 비교하면 새 정책은 훨씬 더 엄격하면서도 훨씬 더 명확합니다.
LLM이 좋은지, 나쁜지, 혹은 비밀스러운 제3의 무엇인지에 관한 여러분의 의견과 관계없이, 이제 LLM은 무시할 수 없습니다. 우리의 선택지는 “정책 없음”이나 “정책”이 아닙니다. 관리 메모의 비공식 목록으로 정책을 둘 것인지, 아니면 우리가 공개적으로 지지하는 것으로 만들 것인지가 선택입니다.
왜 LLM을 전면 금지하거나, 친사회적이라고 생각하는 LLM 사용을 모두 허용하지 않을까요? Rust의 거버넌스는 그런 방식으로 작동하지 않기 때문입니다. 우리에게는 “코드든 산문이든 LLM 생성 콘텐츠는 허용하지 않는다.” 또는 “AI는 우리가 사용하는 다른 도구와 마찬가지로 도구다”라고 말할 수 있는 자애로운 독재자가 없습니다.
Rust는 합의로 운영됩니다. 정책은 다음과 같이 말합니다.
Rust 프로젝트 내부에는 AI 기반 도구를 언제, 어떻게, 어디서 사용하는 것이 허용되는지에 관한 합의가 없으며, 아마 앞으로도 없을 것입니다. Rust 프로젝트와 커뮤니티의 많은 구성원은 AI에서 가치를 찾습니다. 다른 많은 이들은 사회와 기후에 미치는 부정적 영향이 너무 심각하여 어떤 사용도 허용될 수 없다고 느낍니다. 또 다른 이들은 자신의 의견을 정립하고 있습니다.
이러한 차이에도 불구하고, 우리 모두가 공유하는 가치는 많습니다.
- 공동 프로젝트에 관한 깊은 전문성을 갖춘 커뮤니티 만들기.
- 모두가 환영받고 존중받는다고 느끼는 포용적인 커뮤니티 만들기.
우리는 미래에 정책을 변경할 수 있기를 바랍니다. 이 정책에는 처음 채택하는 것보다 변경하기 쉽게 만드는 여러 조항이 있습니다. 리더십 위원회도 “악몽 같은” 30명 승인 요건을 줄이기 위해 LLM 정책을 다룰 하위 팀을 만드는 일을 검토하고 있습니다.
저는 이 정책의 모든 규칙이 완전히 좋다고 생각하지는 않습니다. 하지만 규칙을 적어 두는 편이 적어 두지 않는 것보다 낫고, 모두가 어느 정도 싫어하는 정책이 우리의 거버넌스 구조를 개선하도록 우리를 이끈다고는 생각합니다.
정책은 자신을 다음과 같이 요약합니다.
LLM을 질문에 답하고, 분석하고, 정제하고, 다듬고, 확인하고, 제안하고, 검토하는 데 사용하는 것은 괜찮습니다. 그러나 생성에는 안 됩니다.
첫 번째 범주의 사용은 허용되며, 때로는 공개가 필요합니다. 두 번째 범주의 사용은 엄격히 제한됩니다.
작성자를 제외한 누구도 원하지 않는 한 LLM 출력을 읽을 의무가 없습니다. 명확히 표시되지 않은 LLM 출력은 공개 문서, PR 설명 또는 GitHub 댓글에 허용되지 않으며, 검토자는 원하지 않으면 LLM PR을 볼 의무가 없습니다.
누구도 rust-lang/rust에 기여하기 위해 LLM을 사용할 의무가 없습니다. 정책은 먼저 사람을 위해 작성되어야 하고, 그다음에만 기계를 위해 요약되어야 하며, LLM 검토는 사람의 검토나 자체 검토를 대체할 수 없습니다.
우리에게 읽거나 검토해 달라고 기대하는 곳에 게시하지 않는 한, 자신만 보는 LLM 콘텐츠를 공개 없이 생성할 수 있습니다.
기계 번역, “사소한” 변경, 버그 발견, LLM을 사용한 다른 사람의 작업 검토에는 공개가 필요합니다. 우리는 여러분의 모국어로 게시된 메시지를 환영하며, 기여하기 위해 영어 번역이 필수는 아닙니다.
LLM이 생성한 코드 변경에는 매우 엄격한 지침이 있습니다.
사전에 합의되었고, 중요하지 않으며, 고품질이고, 충분히 테스트되고, 충분히 검토된, LLM이 처음 생성한 코드 변경은 공개와 함께 허용됩니다.
정책은 LLM 생성 변경에 사람 작성 변경보다 더 높은 기준을 적용하며, 더 낮은 기준을 적용하지 않습니다. LLM PR에는 그것이 얼마나 어려운지와 관계없이 예외 없이 테스트가 필요하며, 그 밖에도 여러 제한이 적용됩니다. 작성자가 이미 해당 분야 전문가가 아닌 한 LLM은 건전성에 중요한 변경을 생성해서는 안 되며, 전문가인 경우에도 강하게 권장하지 않습니다.
일반적으로 정책은 기계적으로 올바르게 작동하는 산출물만이 아니라 우리 코드의 정신적 모델을 갖도록 돕는 _이해_에 초점을 맞춥니다. 우리의 동기는 Isaac Asimov의 Profession에서 영향을 받았습니다. 프로그래머 테이프는 안 됩니다.
LLM 생성 콘텐츠를 반드시 공개해야 합니다. LLM 콘텐츠를 게시하지 않거나, 게시하고 그 출처를 공개할 수 있습니다. LLM의 관여를 숨겨서는 안 됩니다.
괴롭힘은 허용되지 않습니다. 정책에서 사용이 금지되었는지와 관계없이, LLM을 사용했다는 이유로 사람을 괴롭혀서는 안 됩니다. Rust 프로젝트와 상호작용할 때는 항상 행동 강령을 따라야 합니다.
더 자세한 정보는 정책 자체를 참조하세요.
정책의 일부는 집행할 수 없습니다. 이는 결함이 아닙니다. 목표는 모든 위반을 적발하는 것이 아니라, 명확하고 분명한 규칙을 만드는 것입니다. 정책에서 구체적으로 면제하지 않는 한, 모든 공개 LLM 텍스트에는 공개가 필요합니다. 이를 통해 관리자는 의도가 아니라 _행동_을 기준으로 위반을 식별하고, 대응 방식을 결정할 때만 의도를 고려할 수 있습니다.
이슈를 발견하거나 보고하는 과정에서 LLM이 관여했다면 반드시 공개해야 합니다. LLM을 사용해 이슈를 찾았다면 알려야 합니다. 보고서 중 어떤 부분이 LLM이 생성한 것인지 명확히 인용하고 표시해야 합니다. “LLM 생성 댓글 금지” 규칙은 여러분에게도 적용됩니다.
LLM 생성 코드로 rust-lang/rust에 PR을 만들 경우 따라야 할 지침 목록을 작성했습니다. 정책의 이 간단한 지침을 따른다면, 그 지침을 생각하거나 목록 전체를 읽을 필요조차 없습니다.
LLM을 질문에 답하고, 분석하고, 정제하고, 다듬고, 확인하고, 제안하고, 검토하는 데 사용하는 것은 괜찮습니다. 그러나 생성에는 안 됩니다.
그 의미의 전체 목록은 정책의 “허용됨” 섹션을 참조하세요. 전체 지침 목록은 rustc-dev-guide를 참조하세요.
정책을 따르지 않는 PR은 묻지도 따지지도 않고 닫을 수 있습니다. 동시에 작성자를 #llm-mentoring으로 안내해 주세요. 정확한 상황과 권장 문구는 개발자 가이드를 참조하세요.
PR이 LLM 생성인지 판단하는 일은 여러분의 책임이 아닙니다. 그 책임은 작성자에게 있습니다. 이 문제가 드물게 발생하도록, 작성자의 코드가 LLM 생성인지 묻는 PR 템플릿을 추가할 것입니다.
작성자가 자신의 코드가 LLM 생성이 아니라고 주장하지만 여전히 확신이 없다면, 해당 PR을 관리팀에 비공개로 신고해 주세요. 문체는 증거가 아닙니다. 사람을 LLM 사용으로 비난하지 마세요. 신고는 처벌을 목적으로 하지 않으며, 관리팀은 위반뿐 아니라 비위반 사례에도 관심이 있습니다.
LLM PR을 검토하기로 자원했다면, 다음 섹션이 적용됩니다. 자원하지 않은 한 누구도 LLM PR을 검토할 의무가 없습니다.
작성자뿐 아니라 모두가 새 정책을 따라야 합니다. 이는 문서, 진단 또는 건전성에 중요한 변경처럼 정책에서 허용되지 않은 영역을 LLM 생성 PR이 건드리는지 확인하는 것이 여러분의 책임이라는 뜻입니다. 작성자에게 LLM 생성 코드 없이 다시 작성해 달라고 요청할 수 있으며, 그 경우 이 섹션은 적용되지 않습니다.
여러분이 집행해야 할 규칙의 더 상세한 요약은 개발자 가이드에 있습니다. 공식 정책은 계속해서 기준 문서입니다.
관리자, 팀 리드, 검토자, 위원회 대표자, 그리고 프로젝트 안팎의 여러 사람이 이 일에 상당한 노력을 기울였습니다. 그 작업의 일부는 정책 자체가 작성되기 몇 달 전부터 시작되었습니다. 직접적으로든 간접적으로든 기여한 모든 분께 감사드리고 싶습니다.
이것이 이야기의 끝은 아닙니다. 정책의 목표 중 하나는 데이터를 수집하도록 돕는 것입니다. 사람들이 LLM으로 흥미롭고 유용한 일을 하고 있는가? 배우고 있는가? 반복해서 기여하고 있는가? 이 질문들의 답은 미래에 정책이 어떻게 바뀔지 결정하는 데 도움이 될 것입니다.
이것은 Rust 프로젝트의 팀들이 공개한 첫 LLM 정책이 아니며, 바라건대 마지막도 아닐 것입니다. 현재 정책은 rust-lang/rust 모노레포에만 적용되지만, 채팅, 포럼, 공개 소통, 명시적 정책이 없는 저장소 및 기타 프로젝트 전반 영역에서 우리가 기대하는 바를 규정하는 프로젝트 전체 정책이 Rust에 도움이 될 것이라고 저는 여전히 믿습니다.