AI가 소프트웨어를 더 쉽게 복제하는 시대에, 오픈소스에서 가장 큰 방어선(해자)이 테스트가 되는 이유와 그로 인해 상업적 오픈소스의 인센티브가 어떻게 충돌하는지를 다룬 글.
오픈소스 프로젝트는 시간이 지나면서 성장한다. 그것은 점진적 개발의 산물이다. 프로젝트는 간결하게 시작해 채택이 늘고, 그 채택을 수용하기 위해 방향을 틀고, 이 과정 전반에 걸쳐 하위 호환성을 유지한다.
이런 간결한 프로젝트는 거대한 배가 된다. 역사적으로 이것이 오픈소스의 위대한 힘이었다. 하지만 결국 여러분이 의존해 구축한 인프라는 구식이 된다. 더 현대적인 기반 위로 프로젝트의 레이어들을 다시 쌓아 올리며 _테세우스_처럼 빠져나오려 하지만, 스스로의 속도가 만들어낸 후류 속에서 배의 방향을 다시 잡기는 어렵다.
이로 인해 변화는 두 가지 형태로 나타났다. 포크와 완전 재작성이다. 누군가가 만든 기반을 가져와 갈라선 길을 간다. 혹은 그들의 계약(예: API 표면)을 가져오되, 더 현대적이고 안정적인 토대 위에 다시 구현한다. 예로 이제는 흔해진 S3 호환 API들이나, redpanda처럼 카프카 호환의 완전 재작성 프로젝트가 있다.
진정으로 자유/오픈소스 소프트웨어—즉 프로젝트 뒤에 상업적 의도가 전혀 없는 경우—라면 대체로 이 모든 것이 괜찮다. 여러분은 만드는 것에 집중하고, 다른 사람은 자기 길을 가면 된다. 하지만 상업적 오픈소스는 독특한 인센티브 집합을 갖는다. 프로젝트의 인센티브가 공개적으로는 순수한 이타심으로만 표현되더라도, 비즈니스를 운영해본 사람이라면 알 것이다. 어느 시점이든 균형을 맞춰야 하는 인센티브가 여러 가지라는 것을. 의도가 절대적으로 이타적(100%)이었다면, 필연적으로 비즈니스의 직접적 인센티브에 반하는 결정을 많이 내리게 될 것이다.
나는 일부 상업적 OSS 기업들이 실제로 단기적으로는 자신들에게 불리한 결정을 내렸다고 믿는다. 더 긴 관점을 위해 통제권이나 이익을 양보하는 식으로 말이다. 그리고 일반적으로는, 더 긴 관점—모두에게 더 나은 관점—이 비즈니스에도 더 자주 옳다고 생각한다. 하지만 그 긴장은 언제나 존재한다.
이제 AI가 점점 더 유능해지면서, 우리는 AI로 무엇을 생성할 수 있는지 그리고 무엇을 생성할 수 없는지 알아가고 있다. 오픈소스 소프트웨어에서 응축되는 가치의 지점으로 내게 가장 크게 다가오는 것은 바로 테스트다.
예전에는 훌륭한 문서, 강력한 계약, 잘 설계된 인터페이스, 포괄적인 테스트 스위트가 있으면 사용자가 플랫폼을 신뢰할 수 있었다. 더 발전시키는 데 도움도 된다. 견고하고 잘 설계됐다는 신호이기도 했다. 하지만 사실 이런 것들은 경쟁 회사가 여러분의 작업을 자기들 기반 위에서 다시 만들기 더 쉽게 해준다. 하위 호환성도 필요 없고, 속도에 갇힌 낡은 배도 없다. AI에게 모든 문서를 읽게 하고, 테스트를 가져오게 한 뒤, 기반만 바꾸면 된다.
이것이 Cloudflare가 1 1 prompt? vibe? 일주일 만에 꽤 포괄적인 next.js 대안을 만들 수 있었던 방식이다. Next.js는 문서화가 невероят하게 잘 되어 있다. Vercel이 문서를 정교하게 쓰고, 소프트웨어 계약을 정의하고, 물론 포괄적이고 강력한 테스트 스위트를 작성하는 데 투자한 무수한 시간 덕분이다. Vercel은 기반 아키텍처를 재구축하려 시도해 왔다. 새 Turbopack에서 webpack을 재구현하고, 자체 mdx 파서를 만들고, 복잡한 레이아웃 패러다임을 혁신하고, 부분 사전 렌더링(partial pre-rendering)을 발명해 사용자가 캐시된 콘텐츠와 동적 콘텐츠를 조합적으로 섞을 수 있게 했다.
하지만 Cloudflare는 그런 짐 없이도 AI에게 next.js를 재구축하라고 프롬프트를 줄 수 있다. 그들은 API 표면을 최신 버전으로만 제한할 수 있다—기존 사용자가 없으니 하위 호환성이 필요 없다. Turbopack 대신 더 성능이 좋고 성숙한 번들러인 vite 위에 기반을 두라고 AI에게 지시할 수 있다. 갑자기 더 날렵하고 더 얇은 배를 출발점으로 갖게 된다. 이 프로젝트가 결코 “완성”은 아니지만, 이미 미국 정부 웹사이트인 https://www.cio.gov에 배포되었다. 그러니 그저 장난감만은 아니다.
Cloudflare는 next.js 표면 API 커버리지의 94%가 통과한다고 주장한다. vitest 테스트 1,700개. playwright 테스트 380개. 그 테스트들은 문서 페이지의 느슨한 문장들보다 훨씬 더 가치 있다.
그래서 다시 한 번, 인센티브의 분기가 고개를 든다. next.js가 _Vercel-이라는-회사_에 가치가 있다면, 그들은 순수한 이타심과 비즈니스 인센티브 사이에서 선택해야 할지도 모른다. 내 관점에서 Vercel은 과거에는 대체로 전자 쪽으로 기울어 왔다—하지만 절대적이었다고는 생각하지 않는다—그리고 그럴 수도 없다.
언제나 그렇듯 세상이 이동하고 변화할 때, 우리는 뒤돌아보며 다른 모두보다 조금 더 멀리 내다본 집단을 발견하곤 한다. 이번 경우는 SQLite다. 핵심 전체는 오픈소스지만, 그들은 엄격한 테스트 스위트의 상당 부분을 클로즈드 소스로 유지한다. 테스트가 9,200만 줄에 달한다고 주장한다 2 2 그들의 문서에서: https://www.sqlite.org/testing.html (핵심 소스 코드의 592배). 어떤 면에서는 이런 인센티브의 절단이, 많은 사람들이 보는 오픈소스의 방식에 적대적으로 여겨질 수 있다. 다른 면에서는 프로젝트를 지속 가능하게 유지해주는 해자로 여겨진다. 어느 쪽이든, 나는 더 많은 상업적 후원을 받는 프로젝트들이 이 경로로 휘어 갈 것이라 예상한다. 그들은 자기 작업이 방임적으로 복제되는 것을 어떻게 막을지 고민할 것이다. 이 새로운 AI 세계에서, 여러분이 작업을 더 잘 문서화할수록, 더 강한 계약을 정의할수록, 누군가가 여러분의 작업을 복제하기는 더 쉬워진다.
물론 SQLite 테스트 스위트도 오픈소스라면 최종 사용자에게 더 좋을 것이다. 하지만 사용자들이 그것을 당연히 받아야 할 의무는 없다. 그것이 자신들의 해자를 구축하는 최선의 방법이라고 판단했다면, 그것은 그들의 권한이다. 마치 사용자들이 어떤 데이터베이스를 쓸지 선택할 자율성이 있는 것처럼. 오랫동안 오픈소스는 순수한 이타심인 척해 왔지만, 규모가 커지면 그것이 얼마나 여러 방식으로 무너지는지 우리는 보아왔다. 기업들이 오픈소스에 엄청나게 기여해 온 한편, 반대편도 보았다. 아무런 환원 충동 없이 그 가치를 추출하는 행태 말이다.
AI가 사람들의 작업을 복제하는 데 더 능숙해질수록, 가장 가치 있는 것은 소프트웨어 계약, 테스트, 그리고 API 표면적이 된다. 이전에는 코드를 작성하고, 이해하고, 유지보수하는 오버헤드 자체가 해자였다. 이는 상업화된 오픈소스의 인센티브와 충돌한다. 오픈소스 소프트웨어의 API를 명확히 정의하고 전달하려는 욕구와, 그 투자를 보호하려는 욕구가 맞부딪힌다.
tldraw는 전체 테스트 스위트를 공개 저장소에서 비공개 클로즈드 소스 저장소로 옮기고 있다.
https://github.com/tldraw/tldraw/issues/8082
1. prompt? vibe?
2. 그들의 문서에서: https://www.sqlite.org/testing.html
끝입니다. 생각이 있다면 이메일을 보내주세요. 또는 새 글 알림을 구독하세요.