GNU와 AI 재구현
원문은 Salvatore Sanfilippo님이 에 게재했습니다. 이 블로그 구독하기
과거를 기억하지 못하는 자는 그것을 반복할 운명에 처한다. 그다지 좋아하지 않던 문장이다. 그리고 AI를 둘러싸고 벌어지는 일, 소프트웨어 프로젝트의 재구현을 둘러싼 논쟁은 그런 생각이 얼마나 한계적인지를 여실히 보여준다. 많은 사람들이 AI를 이용해 기존 프로젝트를 다시 쓰는 것이 공정한지 문제를 제기하고 있다. 하지만 그런 사람들 중 상당수는 이미 90년대에 현업에 있었다. 80년대에 시작된 리처드 스톨먼과 그 추종자들의 행적, GNU 프로젝트를 위해 UNIX 유저스페이스를 재구현하던 그 마지막 국면을 지켜본 사람들이다. 지금 AI를 이용한 재작성에 반대하는 바로 그 사람들이, 당시에는 GNU 프로젝트의 행보에 환호를 보냈다(내 관점에서는 정당하게 — 나 역시 환호했던 사람 중 하나다).
스톨먼은 단순한 프로그래밍 천재가 아니다. 그는 학문을 넘나드는 넓은 시야를 지닌 사람이며, 그중에서도 저작권의 미묘한 뉘앙스에 정통했다. 그는 다른 프로그래머들에게 UNIX 유저스페이스를 특정한 방식으로 재구현해 달라고 요청했다. 원본과 비교했을 때 각 도구가 독특하고 식별 가능해지도록 만드는 방식이었다. 더 빠르거나, 더 기능이 풍부하거나, 스크립트로 다룰 수 있게 하는 식이다. 이러한 특성들은 두 가지 목표를 동시에 달성했다. GNU Hurd를 더 좋게 만드는 것과 동시에, 소송에 대비한 보호막을 제공하는 것이다. 누군가 GNU 구현물이 단순히 아이디어와 동작을 베낀 수준(이건 합법이다)을 넘어 “보호되는 표현물”(즉, 소스 코드 그 자체)을 복제했다고 주장하더라도, 추가된 기능과 의도적으로 특정 설계 방향을 추구한 점이 판사들이 이해할 수 있는 반론이 되어줄 것이었다.
그는 또한 실제 구현을 들여다보지 말고, 명세와 도구를 직접 실행해 확인한 현실 세계의 동작만을 보고 그 행위 자체를 재구현하라고 당부했다. 그럼에도 GNU 프로젝트에 참여한 많은 이들이 UNIX 소스 코드에 노출되었거나 접근할 수 있었을 것이라고 추측하는 것은 무리가 아니다.
리누스가 UNIX를 재구현해 리눅스 커널을 작성했을 때 상황은 한 겹 더 복잡해졌고, 한 단계 더 간접적인 형태를 띠었다. 그는 UNIX를 사용자 자격으로 접했을 뿐, UNIX 소스 코드에는 접근하지 못한 것으로 보인다. 반면 그는 Minix 소스 코드(마이크로커널을 사용한 UNIX 구현체)와 그 구현을 설명하는 책에 지대하게 노출되어 있었다. 그런데 다시, 타넨바움이 Minix를 쓸 당시 그는 UNIX 소스 코드에 깊이 노출된 상태였다. 그래서 SCO는(IBM 소송 당시) 리눅스에 보호되는 표현물이 포함되어 있다고 주장하는 데 큰 어려움을 겪었다. 그럼에도 리누스가 Minix에서 영감을 얻었을 때, 그는 UNIX 코드를 알고 만들어진 것(Minix)에 이미 매우 익숙했을 뿐 아니라, 더 흥미롭게도 Minix의 라이선스는 제한적이었고 2000년에 이르러서야 오픈소스가 되었다. 그럼에도 그런 상황에서도 타넨바움이 항의한 것은(유명한 논쟁에서) 아키텍처에 대해서였지 저작권 침해에 대해서가 아니었다. 따라서 타넨바움이 리누스가 Minix에 노출되었음에도(그리고 그 자신도 Minix를 쓸 때 유사한 과정을 거쳤음에도) 재작성을 공정하다고 여겼다고 합리적으로 추정할 수 있다.
저작권법이 실제로 말하는 것
이 모든 것을 올바른 맥락에 놓기 위해 저작권의 실제 경계를 확대해 보자. 법은 “보호되는 표현물”을 복제해서는 안 된다고 말한다. 소프트웨어의 경우, 보호되는 표현물이란 코드 그 자체, 동일한 구조와 변수, 함수, 특정 작업이 수행되는 정확한 메커니즘을 의미한다. 단, 이미 알려진 알고리즘은 예외다(표준 퀵소트나 이진 탐색은 매우 유사하게 구현되더라도 위반이 아니다). 문제는 프로그램의 비즈니스 로직이 원본 구현과 거의 한 줄 한 줄 일치할 때 발생한다. 그 외의 경우 복제는 합법이며 원본 라이선스를 따를 필요가 없다. 코드가 비슷한 일을 하더라도 잘라 붙이거나 다른 언어로 기계적으로 번역하거나, 그저 조금 다르게 보이도록 외관만 수정한 것이 아님이 분명하다면 말이다(보라, 이는 법원이 정확히 가려내려 하는 악의적인 수법이다). 이 글을 읽는 유능한 프로그래머라면 누구나 *재구현*이 무엇이며 어떻게 생겼는지 정확히 알 것이라고 생각한다. 불가피한 유사점은 있겠지만, 코드가 복제된 것이 아님은 명백할 것이다. 법적 구조가 그렇다면 왜 사람들은 클린룸 구현에 신경 쓰는가? 현실은 이렇다. 그것은 소송에 대비한 최적화일 뿐, 법정에서 이기기를 더 쉽게 만들 뿐이다. 어떤 프로그램의 원본 소스 코드에 노출되었다 하더라도, 그 노출이 아이디어와 동작에 대한 지식을 얻는 데만 쓰였다면 괜찮다는 것이다. 게다가 우리는 오늘날 리눅스와 GNU 유저스페이스, 그리고 유사한 길을 걸어온 수많은 다른 오픈소스 프로젝트가 존재함을 기쁘게 생각한다. 나는 규칙이란 그 결과가 마음에 들 때나 그렇지 않을 때나 동일하게 적용되어야 한다고 믿는다.
AI의 등장
결국 재구현은 언제나 가능했다. 지금 달라진 것은 그것이 잔인할 정도로 더 빠르고 저렴해졌다는 사실이다. 과거에는 개발자를 고용하거나, 사업적 야심이나 세상에 공유하고 싶은 마음 때문에 스스로 재구현을 만들 만큼 열정적이고 헌신적이어야 했다.
이제 코딩 에이전트를 실행해 두 가지 방식으로 진행할 수 있다. 구현물을 명세로 바꾼 뒤, 새로운 세션에서 에이전트에게 재구현을 요청하는 것이다. 이때 특정한 품질을 강제할 수도 있다. 예를 들어 더 빠르게 만들라거나, 구현을 믿을 수 없을 만큼 쉽고 이해하기 쉽게 만들라거나(이건 다른 구현과 매우 멀어지는 좋은 요령이다. 많은 코드가 정반대의 목표를 위해 설계된 것처럼 보이기 때문이다), 더 모듈식으로 만들라거나, 원본 구현의 근본적인 한계를 해결하라는 식이다. 이런 힌트들은 모두 원본 설계와 크게 달라지도록 만드는 것을 훨씬 쉽게 해준다. LLM을 이런 식으로 사용하면 과거에 본 것을 그대로 복사해 내지 않는다. 그럼에도 마지막에 에이전트를 이용해 위반 사항이 있는지 꼼꼼히 검증하고, 있다면 새로운 코드로 교체할 수 있다.
겉보기에는 덜 엄격해 보이지만 현실에서는 매우 효과적일 수 있는 또 다른 접근법은, 소스 코드 자체를 제공하고 에이전트에게 완전히 새로운 방식으로 재구현하라고 요청하는 것이다. 소스 코드를 명세로 활용하는 동시에, 구현이 코드 자체로부터 최대한 멀어지도록 유도하는 것이다. 프론티어 LLM은 매우 유능해서, 무언가를 명시적으로 베끼지 않기 위해 활용할 수도 있고, 서로 다른 구현 접근법을 신중하게 시도할 수도 있다.
위와 같은 시도를 한 번이라도 해본 사람이라면 “압축 해제된 복사본”이라는 것이 실은 환상임을 안다. 에이전트는 매우 “유기적인” 방식으로 소프트웨어를 작성한다. 오류를 저지르고, 뒤늦게 드러나는 한계 때문에 설계를 여러 번 바꾸며, 작은 것에서 시작해 점진적으로 기능을 추가하고, 종종 이미 혼란스러운 이 과정 중에 우리는 프롬프트와 힌트, 바람으로 그 작업을 대대적으로 조종한다. 많은 생각들은 위안이 되는 만큼이나 거짓이다. “압축 해제된 복사본”도 그중 하나다. 그럼에도 이제 재작성 과정은 너무나 간단해졌고, 많은 사람들이 이 사실에 불편함을 느낀다. 여기에는 더 근본적인 진실이 있다. 소프트웨어의 본질이 변했다는 것이다. 다른 라이선스 하의 재구현은 그 본질이 영원히 어떻게 변모했는지를 보여주는 한 사례에 불과하다. 자동 프로그래밍의 각 발현과 싸우기보다는, 새로운 사고 모델을 구축하고 적응하는 편이 낫다고 나는 믿는다.
법을 넘어서
나는 조직화된 사회가 법을 준수할 때 번영한다고 믿지만, 그렇다고 존재한다는 이유만으로 규칙을 맹목적으로 받아들이지는 않으며, 내 윤리에 비추어 질문을 던진다. 그것이 개인과 사회, 그리고 법 자체가 진화할 수 있게 하는 길이다. 우리는 스스로에게 물어야 한다. 저작권법은 윤리적으로 옳은가? AI가 기존 과정에 제공하는 속도 향상은 그 과정 자체를 근본적으로 바꾸는가?
소프트웨어가 다른 대부분의 인간 분야보다 훨씬 빠르게 진화할 수 있었던 한 가지 이유는, 이 분야가 특허와 보호에 덜 얽매여 있다는 점이다(그리고 이는 다시 소프트웨어를 둘러싼 공유 문화 덕분일 가능성이 크다). 저작권법이 더 엄격했다면 우리는 오늘날 가진 것을 갖지 못했을 가능성이 높다. 개인과 기업의 이익 보호가 인류 문화의 전반적인 진화보다 더 중요한가? 나는 그렇지 않다고 생각하며, 게다가 저작권법은 공동의 경기장이다. 규칙은 모두에게 동일하다. 더 나아가, 비교적 느슨한 접근에도 불구하고 소프트웨어는 여전히 돈을 벌기 가장 쉬운 분야 중 하나로 남아 있다고 말해도 무리가 아니다. 재구현의 가능성이 사업적 측면에 타격을 준 것처럼 보이지 않는다. 아마 그 반대일 것이다. 오픈소스 소프트웨어 스택 덕분에 가능해진 사업이 얼마나 많은지 생각해 보라(OSS가 대부분 복제물이라는 얘기는 아니지만, 분명 과거 시스템들의 많은 아이디어를 계승했다). 나는 AI 시대에도 이러한 근본적인 긴장 관계가 여전히 모두 유효하다고 믿는다. 재구현은 저렴하게 만들 수 있지만, 이는 우리 모두를 위한 새로운 경기장이며, 아이디어나 엔지니어링, 기능 측면에서 새로운 것을 담지 않은 채 단순히 자동화된 방식으로 무언가를 재구현하는 것은 장기적으로는 미미한 가치만을 가질 것이다. 중요한 것은 무언가를 만드는 정확한 방식이다. 잘 설계되었는가, 사용하기 흥미로운가, 지원되는가, 어느 정도 새로운가, 빠른가, 문서화되어 있고 유용한가? 게다가 이번에는 힘의 불균형이 올바른 방향으로 기울어져 있다. 대기업들은 언제나 천문학적인 돈을 쏟아 시스템을 복제하고, 사용자에게 거부할 수 없는 방식으로(예를 들어 수년간 무료로 제공한 뒤 모델을 전환하는 식으로) 제공하며, 자신들이 실제로 발명하지 않은 아이디어의 선두 주자로 자리매김할 능력이 있었다. 이제는 소규모 개인 집단이 대기업의 소프트웨어 시스템을 상대로 같은 일을 할 수 있다. 합성 노동력이 많은 이들에게 더 저렴해진 지금, 그들은 아이디어로 경쟁할 수 있다.
우리는 거인의 어깨 위에 서 있다
우리 모두가 내면화해야 할 또 다른 근본적인 생각이 있다. 소프트웨어는 점진적이고 연속적인 과정으로 만들어지고 진화하며, 각각의 새로운 혁신은 누군가 우리보다 먼저 발명한 것 위에 구축된다. 우리는 모두 무언가를 만들고 그것을 “소유”한다고 믿는 데 매우 빠르다. 우리가 정확히 작성한 코드에만 국한한다면 이는 맞는 말이다. 하지만 우리는 이미 이루어진 작업과 아이디어 위에 무언가를 짓는다. 그리고 현재 IT의 발전이 아이디어와 동작은 저작권으로 보호되지 않는다는 근본적인 패러다임 덕분임을 고려하면, 우리는 재구현이 공정한 과정임을 받아들여야 한다. 그것이 아무런 새로움을 담고 있지 않다면 어쩌면 게으른 노력일 수는 있다. 그럴 수도 있다. 하지만 그것은 공정하며, 누구도 무엇인가를 위반하는 것이 아니다. 그럼에도 우리가 생태계의 좋은 시민이 되고 싶다면, 어떤 작업을 복제할 때 그것을 함께 발전시키고 새로운 것을 발명하려 노력해야 한다. 더 적은 메모리 사용을 위해 구현을 특화하거나, 특정 맥락에서 더 유용하게 만들거나, 버그를 줄이는 식으로 말이다. 바로 스톨먼의 방식이다.
AI의 경우, 우리는 거의 집단적으로 기술이 소프트웨어와 인류에게 고립된 채로 좋거나 나쁘다고 생각하는 오류를 범하고 있다. AI는 오픈소스 소프트웨어 분야에서 많은 좋은 것들을 가능하게 할 수 있다. 많은 열정적인 개인들이 낮의 직업을 싫어하기 때문에 오픈소스를 작성하고, 자신이 사랑하는 무언가를 만들고 싶어서 작성하거나, 경제적 이해를 넘어선 더 큰 무언가의 일부가 되고 싶어서 오픈소스를 작성한다. 많은 오픈소스 소프트웨어는 여가 시간에 작성되거나, 프로젝트에 배정된 인원에 심각한 제약을 받은 채 작성되거나, 더 나쁜 경우 개발 비용을 지불하는 기업이 부과한 제한적인 조건 속에서 작성된다. 이제 코드가 날마다 아이디어보다 덜 중요해지는 상황에서, 오픈소스는 AI에 의해 크게 가속될 수 있다. 주말에 할애하는 네 시간은 올바른 사람의 손에서 10배의 결실을 가져올 것이다(AI 코딩이 모두를 위한 것이 아닌 것처럼, 훌륭한 코딩과 설계도 모두를 위한 것이 아니다). 예를 들어 리눅스 장치 드라이버는 독점 블롭을 자동으로 디스어셈블함으로써 구현될 수 있다. 혹은 간신히 유지되던 라이브러리가 보다 합리적인 시간 안에 충분히 관리될 수 있는 프로젝트로 탈바꿈할 수도 있다.
AI 이전에 우리는 소프트웨어의 상품화를 목격했다. 품질은 떨어지고 돈에만 집중하며, 미니멀리즘과 자원에 대한 존중에는 전혀 신경 쓰지 않는 것이다. 그저 대부분 고장 난 채 부풀려진 더미들뿐이다. 하드웨어 성능이 높아질수록 부풀림은 커지고 관심은 줄어들었다. 이미 상황은 매우 나쁘게 흘러가고 있었다. AI가 이를 더 악화시킬 것이라는 점은 자명하지도, 자동적인 것도 아니다. 그리고 다른 소프트웨어 시스템을 재구현할 수 있는 능력은 우리 분야에 어느 정도의 흥미와 건전함을 되돌릴지도 모르는 더 큰 그림의 일부다.
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기