Bambu Studio는 AGPLv3 기반 PrusaSlicer 수정 버전이지만, 독점 네트워킹 라이브러리의 전체 소스와 설치 정보를 제공하지 않았음
AGPLv3의 Corresponding Source에는 생성·설치·실행·수정에 필요한 코드와 밀접히 결합된 동적 링크 라이브러리 소스가 포함됨
Bambu는 Paweł Jarczak이 Orca Slicer를 Bambu 서버 구성 요소와 연동하도록 수정한 포크를 삭제하라고 요구해 추가 제한 금지 조항과 충돌함
SFC는 baltobu 프로젝트로 네트워킹 라이브러리 역공학, Orca Slicer for Bambu 유지, Bambu Studio 대체 포크인 viscose를 추진함
SFC는 3D 프린터 소프트웨어 수리권 활동을 위해 두 달간 US$250,007 모금을 시작하고, 2026년 6월 상설 위원회 세부 내용을 공개할 예정임
확인된 AGPLv3 위반
libbambu_networking 소스 코드 미제공
Bambu Lab의 3D 프린터용 소프트웨어와 펌웨어에 대한 AGPLv3 준수 조사에서 두 가지 위반이 확인됨
Bambu Studio는 STL 같은 디지털 설계 모델을 프린터가 출력할 수 있는 수평 2D 레이어로 나누는 Slicer임
Bambu는 4년 동안 Bambu Studio가 경쟁사의 AGPLv3 라이선스 Slicer인 PrusaSlicer의 수정 버전이라고 공개해 왔음
PrusaSlicer는 Alessandro Ranellucci가 처음 만든 Slic3r의 수정 버전임
Bambu Studio의 일부 소스 코드는 Bambu의 GitHub 조직 계정에 있지만, Bambu는 Bambu Studio를 독점 라이브러리와 결합해 UI의 상호작용 프롬프트를 통해 사용자에게 배포한다고 밝혀 왔음
AGPLv3는 적용 대상 저작물을 오브젝트 코드 형태로 전달할 때, 기계가 읽을 수 있는 Corresponding Source도 같은 라이선스 조건으로 함께 전달해야 한다고 규정함
Corresponding Source에는 오브젝트 코드를 생성·설치·실행·수정하는 데 필요한 소스 코드와 스크립트가 포함됨
저작물이 밀접한 데이터 통신이나 제어 흐름으로 요구하도록 설계된 공유 라이브러리와 동적 링크 하위 프로그램의 소스 코드도 Corresponding Source에 들어감
Bambu가 libbambu_networking.so, bambu_networking.dll, libbambu_networking.dylib의 완전한 Corresponding Source Code와 Installation Information을 제공하지 않는 것은 심각하고 계속되는 AGPLv3 위반으로 판단됨
Paweł Jarczak 포크 삭제 요구
Bambu가 네트워킹 라이브러리를 독점으로 유지한 것과 별개로, 개발자이자 Bambu Lab 사용자인 Paweł Jarczak을 상대로 한 조치도 AGPLv3 위반으로 제시됨
Paweł Jarczak은 동적으로 링크된 라이브러리를 교체하거나 수정하지 않고, Bambu Studio의 서버 측 구성 요소와 통합하는 다른 방식을 공개함
그는 Bambu Studio의 불완전한 소스 코드를 검토한 뒤, 다른 AGPLv3 Slicer인 Orca Slicer를 수정했음
수정된 Orca Slicer는 사용자가 Bambu Studio를 대체하면서, Bambu Lab 서버에서 실행되지만 현재 소스가 공개되지 않은 부분과 밀접한 데이터 통신으로 결합할 수 있게 했음
Bambu는 Paweł에게 해당 변경이 포함된 OrcaSlicer 포크를 GitHub에서 삭제하라고 요구함
Bambu는 자사 서비스 약관이 AGPLv3보다 우선한다고 주장했지만, AGPLv3§10¶3은 라이선스로 부여되거나 확인된 권리 행사에 추가 제한을 부과할 수 없다고 명시함
이 노력 자체는 고맙게 봄. 오래된 오픈소스 사용자이자 가끔 기여자이고, Bambu 프린터도 쓰고 있지만, 상태가 좀 꼬인 Debian 머신에서 Bambu Studio나 소스에서 빌드한 OrcaSlicer를 제대로 돌리는 데는 실패했음
FLOSS 라이선스도 오래 따라봤고, AGPLv3는 동기는 이해하지만 늘 약간 불편하게 느껴졌음. Bambu가 이 일을 처리하는 방식도 마음에 들지 않고, 법적으로까지는 몰라도 적어도 오픈소스의 정신은 분명히 위반하고 있다고 봄
걸리는 부분은, 여기서 말하는 바가 AGPLv3 소프트웨어는 비자유 바이너리에 dlopen()을 호출할 수 없다는 건지, 아니면 AGPLv3 소프트웨어와 함수 포인터 시그니처 일부만 공유하는 .so 파일을 배포하는 게 라이선스 위반이라는 건지임. 이번 건은 같은 주체가 수정된 AGPLv3 소프트웨어와 비자유 바이너리를 같이 내고 있으니 거부감이 이해되지만, 일반화하면 머릿속에 잘 안 들어옴
극단적으로 보면 표준화된 형식의 플러그인을 로드할 수 있는 AGPLv3 소프트웨어가 자기 라이선스와 양립 불가능하다는 뜻처럼 보일 수도 있음. 예를 들어 AGPLv3 오디오 소프트웨어가 VST(https://en.wikipedia.org/wiki/Virtual_Studio_Technology)를 로드할 수 있는 경우는 라이선스 함의를 제대로 이해하기 꽤 복잡해 보임
이 스레드를 보면 Bambu가 모든 네트워킹을 의도적으로 이 비공개 라이브러리를 거치게 만드는 것으로 보임. 이게 없으면 소프트웨어가 사실상 쓸모없어지고, 동작을 들여다보려 하면 충돌시키는 안티 디버깅 기능까지 있는 듯함
“AGPLv3 소프트웨어가 비자유 바이너리에 dlopen()을 호출할 수 없다는 뜻인가?”라는 해석은 FSF의 입장이 아님. FSF는 플러그인에 관한 FAQ 항목에서 메인 프로그램이 플러그인을 어떻게 호출하는지에 따라 하나의 결합 프로그램인지가 달라진다고 설명함 fork와 exec로 단순히 실행하고 긴밀한 통신이 없으면 별도 프로그램일 수 있지만, 동적 링크를 하고 서로 함수 호출과 자료구조 공유를 한다면 하나의 결합 프로그램으로 봐야 한다는 입장임. 복잡한 자료구조를 공유 메모리로 주고받는 것도 동적 링크와 거의 같다고 봄
이건 모든 GPL 버전에 대체로 적용된다고 알고 있음. 간단히 말하면, 그 플러그인이 GPL 프로그램용으로 작성되기 전에도 다른 소프트웨어에서 쓸 수 있었는지를 기준으로 봄. 해당 GPL 프로그램에서만 쓸모가 있다면 사실상 그 프로그램의 일부에 가깝다고 판단함
SFC가 라이선스 본문에서 관련 부분을 인용했음. Corresponding Source에는 해당 저작물이 특별히 필요로 하도록 설계된 공유 라이브러리와 동적 링크된 하위 프로그램의 소스 코드가 포함된다는 내용임
따라서 플러그인 지원 자체는 괜찮음. 문제는 애플리케이션의 일반적인 기능을 위해 특정 플러그인을 사실상 필요로 할 때 생김. SFC 글에 나온 .so는 네트워킹과 관련 있어 보이고, 네트워크 접근 없이 프린터를 편하게 쓰기 어렵다는 점도 그럴듯함
더 넓은 맥락에서는, 객체 코드 형태의 저작물에 대한 “Corresponding Source”가 객체 코드를 생성·설치·실행하고 수정하는 데 필요한 모든 소스 코드와 스크립트를 뜻하지만, 시스템 라이브러리나 수정 없이 쓰는 범용 도구·일반적으로 구할 수 있는 자유 프로그램은 제외한다고 되어 있음
특히 Apple이 모든 OSX 머신에 제공하는 독점 SDK에 의존하는 AGPL 소프트웨어를 OSX에서 개발하는 것은 가능함. Windows 애플리케이션이 Windows 쪽 구성요소에 의존하는 경우도 마찬가지임