Lobsters

Did Ente Locker copy my code without attribution?

Ente Locker가 출처 표시 없이 내 코드를 복사했을까요?

FairScan 개발자는 Ente Locker의 문서 스캔 기능에 FairScan 코드가 출처 표시 없이 사용됐다고 주장합니다. Kotlin과 Rust 구현의 구조, 함수명, 변수명, 상수값이 비슷하다는 근거를 제시하며, Ente가 6,000줄 넘는 코드를 다시 쓴 뒤에도 문제에 답하지 않았다고 말합니다. 논쟁은 코드 유사성과 GPL 준수 여부를 둘러싸고 이어집니다.

에디터 노트

현재 공개된 내용만으로는 코드가 파생 저작물인지, 라이선스 위반이 있었는지 확정하기 어렵습니다. FairScan 개발자는 구조와 이름, 상수값까지 겹친다는 비교 근거를 제시했고 Ente는 해당 코드가 표준적인 방식이며 이후 다시 썼다고 답했습니다. 6,000줄 넘는 변경은 배포된 Locker 1.0.9의 코드를 바꾸지 않았다는 지적도 남습니다. 댓글에서는 GPL과 AGPL의 호환성만으로 문제가 풀리지 않는다는 반론과, 동일한 이름과 구조라면 출처 표시가 필요하다는 의견이 맞섭니다. GPL 준수 여부와 코드의 실질적 유사성은 별도로 따져야 하며, 댓글의 AI 재작성 의혹도 확인된 사실은 아닙니다. 이 논쟁에서 설득력 있는 다음 단계는 코드 비교에 대한 구체적 답변과 라이선스 관점의 설명입니다. 공개된 자료에는 Ente의 상세한 반박이나 법적 판단이 없습니다.

AI 요약

FairScan 개발자는 9월 16일 Ente 엔지니어에게서 Locker의 새 문서 스캔 기능이 FairScan의 분할 모델을 사용한다는 연락을 받았습니다. Ente는 당시 이미지 처리 코드를 처음부터 작성했다고 설명했습니다. 개발자는 FairScan의 이미지 처리 구현을 살펴본 뒤 여러 부분이 Kotlin에서 Rust로 거의 그대로 옮겨진 것처럼 보인다고 판단했습니다.

코드 유사성에 대한 주장

개발자는 9월 17일 Ente에 비교 링크를 보내고 저장소에서 FairScan 출처 표시를 찾지 못했다고 알렸습니다. Ente 엔지니어는 이미지 처리 방식이 일반적이며 코드도 이후 전부 다시 썼다고 답했습니다. 개발자는 저장소에서 6,000줄이 넘는 변경이 담긴 PR을 확인했지만, 그 변경이 이미 배포된 Locker 1.0.9의 코드를 바꾸지는 않는다고 지적합니다.

개발자가 공개한 비교 자료에는 두 구현의 전체 구조, 알고리즘, 함수와 변수 이름, 하드코딩된 값이 같다는 주장이 담겼습니다. 그는 FairScan을 만들며 Retinex, 단일 시점 계측, gray world 화이트 밸런스 같은 기법을 조사하고, 분할 모델에 맞는 이미지 처리 과정을 구성했다고 설명합니다. 윤곽선 방향을 바탕으로 사각형을 근사하는 알고리즘을 직접 만들고, 수백 장의 이미지로 동작과 매개변수 값을 시험했으며 여러 버그를 수정했다고 덧붙입니다. 이런 작업을 단순히 표준적인 이미지 처리 방식이라고 부르면 자신이 쏟은 개발 과정과 코드의 유사성을 설명하지 못한다고 주장합니다.

라이선스와 대응

FairScan 개발자는 Ente 코드가 GPL 적용 대상일 만큼 FairScan에서 파생됐다면 배포 과정에 라이선스 준수 문제가 생길 수 있다고 봅니다. 다만 법적 조치를 원하지는 않는다고 밝힙니다. 처음에는 Ente와 사적으로 연락했고, 9월 29일에는 Mastodon에 코드 비교 자료를 공개했습니다. 회사의 공식 답변을 요청했지만 10월 12일까지 받지 못했다고 합니다.

이번 일로 그는 오픈소스 공개가 코드의 정직한 출처 표기를 보장하지 않는다고 말합니다. 오픈소스는 사용자가 소프트웨어를 검토하는 수단이지만, 오픈소스 프로젝트도 다른 프로젝트의 코드를 출처 없이 가져갈 수 있다는 점을 직접 겪었다고 설명합니다. 이 경험은 FairScan 개발 동기에도 영향을 주고 있습니다.

Lobsters 반응

  • @ploum — FairScan은 GPL이고 Ente 코드는 AGPL로 보이는데, 둘 다 허용되므로 문제가 무엇인지 잘 모르겠습니다. Ente는 꽤 공개적으로 처리했고, 블로그 글에서 저자에게 연락했다고도 했습니다. 제목대로라면 코드에 출처를 적는 문제일 뿐입니다. 코드가 새 언어로 다시 작성되면서 별생각 없이 표시가 빠졌을 수도 있다고 이해합니다. FairScan 코드를 옆에 두고 Rust로 다시 썼더라도 솔직히 저작권이 적용되는 동일한 코드는 아닙니다. Ente 엔지니어가 여러 학술 자료를 참고했을 수도 있고, 여러 함수에서 주된 출처가 하나였다는 점을 기억하지 못했을 수도 있습니다. 원 글 작성자가 무엇을 바라는지는 잘 모르겠습니다. 코드에 이름을 넣는 것인지 다른 곳에 표시하는 것인지 불분명합니다. 그래도 Ente가 감사의 뜻을 더 잘 표현하고 세심하게 대응할 수는 있었습니다. Ente 사람들이 원 글 작성자의 요구를 제대로 이해하지 못했을 수도 있습니다. 블로그에서 FairScan을 언급했고 저자에게 연락도 했으니까요. 참고로 FairScan은 좋아 보입니다. OSS Docs Scanner와 어떻게 다른지 궁금합니다.
    • @spinda — 블로그에 나온 나란히 보기로 보면 Ente 코드는 변수명까지 같은 FairScan 코드의 1대1 번역처럼 보입니다. 출처 표시는 당연히 필요하며 GPL 조건상 요구된다고 이해합니다.
    • @SamRW — 변호사는 아닙니다. 제 생각에는 GPL에 이름을 적는 것 이상의 구체적인 법적 요건이 있습니다. 쟁점은 AI로 다시 쓴 코드가 깨끗한 재작성으로 인정받아 이를 피할 수 있느냐입니다. 이를 지지하는 쪽은 그렇다고 주장하고, 반대하는 쪽은 깨끗한 재작성이라고 보기 어렵거나 특정 상황에서는 그렇지 않을 수 있다고 말하는 것 같습니다. 저도 GPL 코드를 작성한 적이 있는데, 서비스를 판매하는 회사가 기능을 요청한 뒤 자신들이 코드베이스에 적용한 변경을 공개하지 않았습니다. 저는 보수 없이 1,000시간 넘게 일했는데 회사는 제 작업으로 돈을 벌고 한 푼도 주지 않았습니다. 허용되는 일이라고 해도 힘이 빠집니다. 계속 소프트웨어를 만들고 싶지만 유급 업무를 마치면 작업할 힘이 거의 남지 않습니다. 무료로 한 일을 다른 사람들이 돈 버는 데 쓰는 것도 그렇습니다. 거기에 LLM이 그 코드를 학습한 뒤 제가 하는 일이 AI 쓰레기로 대체될 수 있으니 해고해야 한다는 주장을 뒷받침하는 데 쓰입니다. 조금 하소연했습니다.
  • @valpackett — 이메일을 보낸 뒤 3일 만에 6,000줄 넘게 다시 썼다고요? 슬롭이 개입한 것 같아 걱정스럽습니다.
  • @lenny — Ente 유료 고객으로서 마음이 아픕니다. 처음으로 서비스를 떠날지 고민합니다. Ente에서 이 글을 읽는 분이 있다면 더 잘 대응해 주세요.
  • @untrusem — 유료 구독자이고 갱신하지 않을 예정입니다. Ente에서 좋지 않은 경험을 한 적도 있어서 이 일이 놀랍지는 않습니다. 코드베이스에서 Claude 커밋을 발견한 뒤 이미 대안을 찾고 있었습니다. FairScan은 개발자가 진심으로 공을 들인 앱 중 찾기 어려운 사례라 더 화가 납니다. 처음부터 사용했고 개발자의 블로그 글도 읽었으니 저는 편향돼 있습니다. 이 일로 구독을 취소할지 모르겠지만, 2025년에 Ente에 보낸 메일을 공유합니다. 문법 실수는 양해해 주세요. 메일에 쓴 내용은 지금도 그대로입니다. F-Droid 앱 용량은 345MB이고, 웹사이트에서는 Discord를 Matrix보다 앞세웁니다. 채널을 떠나서 Matrix 상황은 모릅니다. 당시 메일에서 저는 Ente 사진 서비스 유료 사용자이며 서비스를 좋아한다고 먼저 썼습니다. 다만 개인정보 보호와 오픈소스를 중시하는 서비스가 주요 소통 창구로 Discord를 쓰는 점이 걱정된다고 했습니다. Matrix 채널에 요청을 여러 번 남겼지만 팀에서 답하지 않았고, 나중에야 팀이 Matrix 채널을 살피지 않는다고 알게 됐습니다. 유료 고객으로서도, 무료 사용자라도, 문제를 팀에 전달할 수 없다고 느꼈습니다. 앱 용량이 350MB를 넘어서 저사양 기기에서 부담이 됩니다. 용량을 줄이고 기기 아키텍처별 앱을 제공하면 범용 APK보다 절반으로 줄일 수 있다고 제안했습니다. 요청을 이번에는 들어주길 바란다고 썼습니다. Ente는 의견을 개발팀에 전달해 내부에서 논의하겠다고 답했습니다.

원문: FairScan 블로그 / 번역·요약: Trawling