iPhone은 LGPL위반? --- 사파리가 어떻게 LGPL을 만족하는가?
음... 도발적인 제목인가요? :)
아이폰이 유명하기 때문에 예를 든것이고, 기본적으로는 프로그램을 "바꿔 탑재할 수 없는" 모든 하드웨어에 탑재되는 LGPL소프트웨어와 관련된 이야기입니다. (소스를 공개하면 LGPL이 만족되는거 아닌가, 라는 이야기를 하실 분이 행여 계신다면, LGPL을 일단 먼저 읽어보셔야 하고...) 작년에 사파리 브라우저를 모바일 디바이스에 탑재하면서 법리팀과 이야기 하다가, 도저히 지킬 방법이 없다, 라는 결론을 내리려다보니, 애플이 닫힌 하드웨어 (즉,아이폰같이, 라이브러리를 바꿀 수 없는)에 싣길래, 우리도 문제가 없다 진행하자, 라고 별로 설득력없게 진행해버린 적이 있습니다만...
일단 iPhone의 사파리 브라우저(WebCore엔진 - LGPL이며 KHTML의 확장) 를 예로 들어서 설명하겠습니다.
LGPL의 핵심 조건은, 4항의 d로서, 다음 둘 중 한가지가 되어야 합니다. 0) 라이브러리(LGPL 적용을 받는)를 고친 다음 다시 링크하거나 빌드 할 수 있도록 오브젝트 등의 적절한 내용을 주거나, 1) 적절한 매커니즘(다이나믹 링킹 처럼)을 제공하는 어플리케이션이어서, LGPL라이브러리를 받은 사람이 수정한다음 다시 돌려도 동작할 수 있게 해 주어야 한다. 입니다.
아이폰에 대해서는, 가령 제가 WebCore (safari브라우저의 엔진, KHTML의 확장입니다) 를 수정했다고 해도, 수정한 라이브러리를 어떻게든 사용할 방법이 없습니다. 따라LGPL을 만족하지 못합니다.
---
포팅하면서, 넌지시 이런 질문을 사파리 개발 메일링 리스트에 물었더니... 음... 그 애플의 사파리 팀 개발짱께서 이런 이야기를 하지 말라는군요. 애플 직원들은, 라이센스 관련된 내용들이 논의되는 포럼이나 메일링 리스트를 읽는 것이 사규로 금지되어 있다고... 쩝... 죄송합니다, 했던 기억이 납니다. 그럼에도 불구하고 약간 논의가 일다가 말았는데, 아이폰 뿐 아니라, 임베디드 기계에서는 이것이 계속 문제가 될 수 있습니다... 물론 TiVo식으로 회피하는 방법도 있겠지요. "우리는 충분한 소스와 연결 방법을 마련해 두었다" -- 어느 하드웨어건, 네가 원하는 것에 심어서 테스트해라, 다만 우리 하드웨어(아이폰) 에서는 안된다. ... 라는 식으로 LGPL을 만족하는 것으로 이야기 할 수도 있겠습니다만... 역시 이상하죠. LGPL 은 명백하게 "라이브러리 수정후 돌릴 방법이 있어야 한다" 라고 명시하고 있으니까요.
---
다른 회피 방법도 있습니다. 가령, "라이브러리를 고쳐서 쓰고 싶으면", "윈도 버전이나 맥 버전이나, 아니면 웹코어 자체를 써라" 라고 말입니다. 이것은, 웹 코어 라이브러리가 위반하지 않는다는 말은 되지만, 아이폰 자체도 LGPL라이브러리가 탑재된 상품이기 때문에 사실은 말이 되지 않습니다. 최종 상품에까지 언급하라고 명시하고 있으니까요.
또 다른 회피 방법도 있을까요? ... 가령, 원칙적으로는 이렇게 해야합니다. " (이러저러해서) ... 당신이 작업한 코드를 아이폰에 쓰겠다. 오케이?" ... 라는 메시지를 모든 KHTML 및 웹코어 기여자에게 보내고 메일을 받으면, 아무 문제가 물론 없겠지요. 하지만 이것은 실현 불가능하니... 소스 기여자 중에서 LGPL 위반이라고 따지는 사람에 대해서만, 이러한 명시를 얻어내자, 라고 하는 것은 현실적으로 가능하겠지요. 가령, 저 같이 상관없는 3자는, LGPL위반이라고 말할 (혹은 제소할) 자격이 없으니까요.
---
아, 오해하지는 마시고... 애플도 좋아하고, 애플의 웹코어도 무척이나 즐겁게 잘 활용하고, 감사히 여기고 있는 입장입니다. 다만, 제가 다니던 회사에서 법리적으로 검토할때 만족하지 못한다고 잠정적으로 판단했던 난 부분을, 애플은 조용히 너무나 스무스 하게 넘어가고 있는 것 같아서...
이런 식으로 임베디드 하드웨어에 "타이트한 라이센스(GPL, LGPL)"를 사용하는 경우에 대해서 문제가 많이될텐데... 다른 포인팅 대상이나, 다른 기존 사례를 알고 계시면 좀 듣고 싶어서, 이렇게 글을 써봅니다.
감사합니다!
LGPL의 탄생 목적에 정
LGPL의 탄생 목적에 정 반대되는 더 무서운 라이센스 정책이라고 이해를 하신듯 합니다.
LPGL의 목적은 독점 소프트웨어 개발 업체에서 사용 가능 하기 위해서 만들어진 라이센스 정책입니다.
GPL만 존재 한다면 독점 소프트웨어 업체에선 답이 없기 때문이죠
이렇게 이해를 하신 주된 이유가
이 문구에서 보이는 듯 합니다.
라이브러리를 어떻게든 사용할 방법이 없다고 표현을 하셨는데 이 부분이 정확히 어떤 말씀인지를 모르겠습니다.
닫힌 하드웨어에서 재 빌드를 할 방법이 없기 때문에 하신 거라고 추측이 되는데 맞는지 모르겠네요.
근데 LGPL 상태의 라이브러리를 배포 할때 해당 제품에서 재 빌드, 링크가 가능해야 한다라는 조건이 있나요?
개발 업체에서는 수정된 LGPL의 라이브러리와 오브젝트 까지만 제공하면 라이센스를 지킨것으로 이해를 하고 있는데 라이센스 좀더 봐야 하겠군요 --
만약 이게 아니라면 이 문제는 좀 생각을 해볼 만한 부분인듯 합니다.
사실상 닫힌 하드웨어 개발사 입장에서는 저 부분을 충족 시켜주기 위해서는 하드웨어(구입한 사람은 연결 방법) SDK가 제공 되어 져야
하는 부분이네요. 배보다 배꼽이 커질 수도 있는 생각이 듭니다.
== 언제나 가을느낌 - 낙엽
http://people.sarang.net
== 언제나 가을느낌 - 낙엽
http://people.sarang.net
>> LGPL의 탄생 목적에
>> 아이폰에 대해서는, 가령 제가 WebCore (safari브라우저의 엔진, KHTML의 확장입니다) 를 수정했다고 해도, 수정한 라이브러리를 어떻게든 사용할 방법이 없습니다. 따라LGPL을 만족하지 못합니다.
아, 제가 좀 불명확하게 썼네요... 가령 iPhone 브라우저에 버그가 있었다고 가정해보죠. 제게 브라우저 라이브러리가 소스코드까지 있으니, 고칠 수 있었지만, ... 그 고친 것을 iPhone에 반영할 수 없다는 이야기입니다. LGPL은, 이러한 것이 가능해야 한다고 명시하고 있습니다.
>> LGPL의 탄생 목적에 정 반대되는 더 무서운 라이센스 정책이라고 이해를 하신듯 합니다.
아니오, GPL과 LGPL의 차이는 잘 이해하고 있습니다. 사실, 오픈 소스 소프트웨어를 팔아 먹는 일을 오래 해 왔거든요 :) GPL 라이브러리를 상품의 일부로 사용할 경우, 회사에서 작성한 소스까지 공개해야 해서, 쓰지 못하고 (비 양심적인 회사는 뭐 그냥 씁디다만), LGPL은 그럴 필요가 없으니, 우리쪽 작성 소스는 오브젝트나 바이너리의 형태로 보내고, 거기에 포함된 LGPL 라이브러리는 소스로 납품해서 많이 써왔습니다...
>> 근데 LGPL 상태의 라이브러리를 배포 할때 해당 제품에서 재 빌드, 링크가 가능해야 한다라는 조건이 있나요?개발 업체에서는 수정된 LGPL의 라이브러리와 오브젝트 까지만 제공하면 라이센스를 지킨것으로 이해를 하고 있는데 라이센스 좀더 봐야 하겠군요 --
이것이 대부분 잘못 알고 계신 부분입니다. LGPL은, 해당 LGPL라이브러리를 사용자가 개선이나 수정후에, 원래 제품을 쓸 수 있어야 한다는 명시적인 조건이 붙어 있습니다. ... 저도 잘 몰랐는데... LGPL이 들어간 소스를 라이센스와 함께 S사에 납품했더니... 거기 법무팀에서... 쿨럭. ....
>> 그 고친 것을
>> 그 고친 것을 iPhone에 반영할 수 없다는 이야기입니다.
lgplv2의 경우는 고친 것을 iphone에 올릴 수 있는 방법까지 제공할 의무는 없습니다.
>> 해당 LGPL라이브러리를 사용자가 개선이나 수정후에, 원래 제품을 쓸 수 있어야 한다는 명시적인 조건이 붙어 있습니다.
이건 표현이 조금 애매한데... lgplv2의 경우에는 개선/수정한 lgpl 라이브러리를 어차피 기기에 다시 탑재할 수 있어야 한다는 의무사항은 없기 때문에 기기 바깥에서 컴파일/빌드할 수 있기만 하면 되기에 원래 제품을 쓸 수 있는가 하는 이슈는 lgplv2와는 상관 없습니다.
전반적으로... lgpl v2와 v3의 내용을 혼용하여 이야기하고 계신 것 같은데 정확하게 구별해 주시면 좋겠네요.
넵. LGPL은 재링크(recombine or relink)가 가능해야 합니다...
LGPL라이센스를 보면, 수정된 LGPL 라이브러리는 소스까지 제공하고, 이어서 이 LGPL과 연결된 부분은 공개하지 않아도 되지만 (따라서 상용화가 편하지만), 대신에 공개된 LGPL라이브러리를 수정한 다음, 원래의 제품과 함께 돌아갈 수 있도록 제공해야 한다고 명세하고 있습니다. 그렇기 때문에, 공개되지 않은 부분의 object를 제공하거나 (1번의 방법), 공개되지 않은 부분이 라이브러리를 다이나믹 링킹으로 사용하고 있거나 (2번의 방법) 의 두가지 방법중에 하나 이상을 제공해야 한다고 명세하고 있습니다. 그래서 라이브러리의 interface(입출력)가 같은 한, 동작해야 한다. 라고 말이지요...
문제의 4. D조항입니다...
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.
>> 공개된
>> 공개된 LGPL라이브러리를 수정한 다음, 원래의 제품과 함께 돌아갈 수 있도록 제공해야 한다고 명세하고 있습니다.
이것도 lgpl v3의 내용이지 v2의 내용은 아닙니다.
lgpl v3를
lgpl v3를 이야기하시는 것 같은데 아직 많은 sw들이 lgpl v2이고 v2에는 수정된 소스코드를 제공하기만 하면 되지 그 수정된 소스코드를 컴파일해서 해당 기기에 올리는 방법까지 의무화되어 있지는 않습니다.
iphone이 lgpl v2하에 배포된 오픈소스 sw를 사용하는지, lgpl v3하에 배포된 오픈소스 sw를 사용하는지 먼저 확인이 필요합니다.
LGPL v2도 마찬가지입니다...
죄송합니다만, 역시, 잘못 알고 계시네요. ( 먹고 사는 밥벌이었는데, 제가 LGPL v2를 단어 하나 하나 해부해서 읽지 않았을리가 없지요... 쩝 ) LGPL v3를 예로든 이유는, 문장이 훨씬 간단해진 탓입니다.
LGPL v2의 6번 항을 읽어보십시오. a)에서 e)사이의 방법중 한가지를 제공해야 합니다. 기본적으로 동일한 이야기입니다. a)는 어플리케이션 오브젝트를 같이 줘서 컴파일 되게 하는 케이스, b)는 다이나믹 링크의 케이스.. c)에서 e)는 그것을 전자적/물리적으로 받을 수 있다는 보장이 담긴 문서나 통지로 그것을 대신하는 케이스들입니다.
6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
잘못 알고 있는 것은
잘못 알고 있는 것은 tailblues님입니다. 다시한번 읽어보세요. 예를 들어 아이폰에서 어떤 lgplv2하의 라이브러리를 수정해서 사용했다면 해당 라이브러리를 사용하였다는 고지와 수정된 해당 라이브러리의 소스코드를 요청하는 소비자에게 제공하면 됩니다. 만약 static link하여 사용하고 있다면 애플리케이션의 오브젝트 코드를 추가로 제공하고요.
이렇게 해서 아이폰에 들어간 실행파일을 만들어 낼 수 있기만 하면 되지 lgplv2에서는 그것을 다시 아이폰에 넣는 방법까지 제공하라는 의무는 없습니다. 그런 의무는 lgplv3에서 새로 추가된 것이구요.
만약 lgplv2에서도 그렇다면 지금 팔리고 있는 거의 대부분의 리눅스 기반 임베디드 기기들이 모두 문제가 될 것이겠지요.
위의 lgplv2 내용 어디에서 컴파일된 결과물을 다시 기기에 올리는 방법도 제공하라고 나와 있나요? 정확히 짚어봐 주세요...
그게 바로 문제라는 겁니다!
에코, 죄송합니다. "잘못 알고 계십니다" 라고 하는게 아니었는데. 어디서 이상한 사람이 이상한 이야기를 하고 있다고 화내지 마시고 :) 건설적인 논쟁으로 여겨주십시오. ( lgplv2는 수정된 소스코드를 제공하기만 하면 되지 .... 라시길래, 리빌드 가능해야 한다는 걸 모르시는가보다, 라고 생각했습니다)
권순선님이 이야기 하고 싶은 건 다음이신거죠? "Executable을 build할 수 있으면 된다." 문제는 아이폰의 경우, 그것을 제공하고 있지 않다는 것이 문제입니다.
>>위의 lgplv2 내용 어디에서 컴파일된 결과물을 다시 기기에 올리는 방법도 제공하라고 나와 있나요? 정확히 짚어봐 주세요...
저로서도 '기기에 올리는 방법을 제공해야 한다' 라고 말한 적은 없습니다... 리빌드, 리링크 가능해야 된다고 말했던것 같은데요... 쩝. ... LGPL V3는 추상적으로 "recombine" 해야 한다고 쓰고 있고, v2도 "다시 빌드" 해서 "다시 링크" 할 수 있어야 한다고 명시하고 있습니다. 가령 다음의 문장.
... so that the user can modify the Library and then relink to produce a modified executable containing the modified Library.
>> 만약 static link하여 사용하고 있다면 애플리케이션의 오브젝트 코드를 추가로 제공하고요.
이게 핵심입니다. LGPL은 "LGPL라이브러리를 사용하는 work의 완전한(complete) 바이너리나 바이너리와/소스 오브젝트"(with the complete machine-readable "work that uses the Library" as object code and/or source code ) 를 요구하고 있습니다. 가령, 아이폰을 LGPL라이브러리를 사용한 work로 볼 경우, 그 complete한 object를 제공해야 하는 겁니다...
아이폰을 비롯해서, 임베디드 기기의 제작자들이, 이것을 제공하고 싶어하지 않으니 문제인 것입니다. 제 논지가 무엇인지 아시겠지요. 아이폰이나, 혹은 아이폰에서 돌아갈 이미지를 만들어낼 방법을 제공해야 한다는 점입니다. 그렇다고 해서, 아이폰이 다이내믹 링크로 라이브러리를 교체할 수 있는 형태도 아닙니다.
라우터를 예로 하나 들어보지요.
가령 제가 라우터를 하나 샀는데, 그 라우터가 LGPL에 걸린 라이브러리를 사용하고 있습니다. 그러면 그 라우터의 LGPL 라이브러리의 버그 부분을 제가 고친 다음에, 라우터의 나머지 오브젝트를 요구할 수 있습니다. 그래서 라우터의 이미지를 빌드 할 수 있으면, 이 라우터는 LGPL을 만족합니다. (라우터의 소프트웨어를 어떻게 굽는가, 가령 rom을 어떻게 업데이트 하는 가는 문제가 안됩니다. 회사가 그것을 제공해 줄 필요도 없고, 제공할 의무도 없습니다만. 그럼에도 불구하고, 제대로 된 executable image를 만들 수 있을 때에만, LGPL v2가 만족된 것입니다)
우리의 이 "라우터"를 iPhone으로 대체해 보면... ?
iPhone이 LGPL라이브러리를 쓰고 있는, 즉 "a Work that uses LGPL Library"인 것은 동의하시는지요? LGPL V2는, 그러한 work에 대해서 다이내믹 링킹이나 (6.b), 스태틱 링킹의 경우, 나머지 오브젝트들을 제공하므로서 (6.a) relink to produce modified version of ... work가 나와야 한다고 명시하고 있습니다.
아이폰에 대해서, 우리가 새로운 "modified Executable"을 만들 수 있는지요? 만들 수 없다면, LGPL v2의 6항을 만족 시키지 못하는 것 아닌가 궁금합니다... 라고 묻고 싶은 겁니다.
---
심비안은 LGPL 라이브러리를 사용하면서, 핸드셋이지만, 개발자들이 라이브러리를 다이내믹 링크할 수 있게 마련함으로서 LGPL을 만족했습니다. (가령, 새 버전의 라이브러리를 설치하면 됩니다) 하지만 iPhone은 똑같은 라이브러리를 사용하면서도, 둘 중 어느 방법도 (오브젝트 코드도, 다이내믹 링크도) 제공하고 있지 않는 것으로 보입니다. 그러건데, 제 생각에, 이것은 위반이 되는 것이 아닌가... 싶다는 겁니다.
아유 힘들어라.... 싸우려고 드는게 아닌데, 어째 논쟁적이 되네요. 행여 제 문제 제기가, 기존의 입장이나 의지나 이익에 반대가 되는 것이라면 미리 용서를 구합니다. 그저, 저는, LGPL이 굉장히 restrictive한 (회사 법리팀에 들고 가서 일독을 권해보세요. 절대로 이딴거 쓰지 말라고 합니다....) 요소가 있다는 것을 알리고 토론해 보고 싶었습니다. ... relink, rebuild야 그렇다 손 쳐도, "reverse engineer"를 막아서는 안된다는 조건에서는 정말 법리팀 사람들은 기겁을 하죠... ...
"대부분의 리눅스 기반 임베디드 기기"가 이 LGPL을 기키기가 어렵기 때문에, 자사의 embedded 기기에서는 LGPL을 쓰지 않아야 한다고 결정한 대기업도 있습니다. 노벨 역시 그렇습니다. LGPL을 사용한 경우, 보통 임베디드 기기가 그렇듯, 스태틱 링킹이 되는데, 그렇게 되면 나머지 부분에 대한 바이너리 오브젝트를 같이 공개해야 하고, 또한 LGPL은 LGPL에 영향을 받는 라이브러리를 사용한 work에 대해서 역엔지니어링을 보장해야 한다고 정의하고 있어서, 노벨은 가능한 LGPL을 사용하지 않으려고 듭니다. 그리고 만약 사용할 경우, 아예 오픈 소스 프로젝트로 걸어버리는 게 낫다, 라고 생각하는것 같습니다.
이런 것들에 대해서 명백하게 밝히는 것은, 오픈소스 소프트웨어를 사용하지 않을래야 않을 수 없는 요즘 시대에, 도움이 될 수 있다고 생각해서 이 스레드를 시작한 것입니다... (에, 괜히 딴지 거는게 아니라, 나름대로 도움이 되고자 한다는 점입니다. 쩝...) 뭐 그렇다는 이야기입니다.... :( 뭔가 도움이 되자고, 나름대로 고민했던 이야기를 쓰는건데, "잘못들 알고 계십니다" 라고 했다가 반응이 신통치 않아서 슬퍼지고 있습니다.... 쩝...
리버스 엔지니어링을
리버스 엔지니어링을 막아서는 안된다는 조건이 lgpl에 명시적으로 있든 없든 제품을 판매하는 순간 해당 제품은 누군가 리버스 엔지니어링을 할 수 있는 가능성에 노출됩니다. 이를 명시적으로 허용하든 허용하지 않든 현실적으로 큰 차이도 없고요. lgplv2 소프트웨어를 사용하는 것이 리버스 엔지니어링을 좀더 편하게 해주는 어떤 백도어나 별도의 인터페이스를 '추가'로 제공해 주어야 한다는 의무사항을 부가하지는 않습니다. 따라서 lgplv2 소프트웨어를 사용하더라도 제조사는 리버스 엔지니어링을 막는 최대한의 기술적인 노력을 기울일 수 있고, 그렇게 하면서 lgplv2 소프트웨어를 사용하고 있습니다.
아이폰의 예로 다시 돌아가면... lgpl을 사용할 경우 아이폰의 실행 이미지 전체의 오브젝트 코드를 제공해야 할 수도, 그렇지 않을 수도 있습니다. 아이폰 제조사는 lgpl 라이브러리를 static link하고 있는 애플리케이션의 오브젝트 코드만 제공하면 됩니다. 구성에 따라서 전체 애플리케이션이 될 수도 있고 일부 애플리케이션이 될 수도 있겠지요. 그러나 tailblues님은 lgpl 라이브러리를 사용하면 제조사는 애플리케이션 전체의 오브젝트 코드를 제공해야 한다고 생각하시는 것 같은데... 그렇지 않습니다.
그리고 노벨이 lgpl을 쓰지 말아야 한다고 결정하였다는 것은 어디에서 찾아볼 수 있나요? lgpl 소프트웨어를 사용하지 않는다면 리눅스 기반 임베디드 기기를 만들 수 있는 방법이 매우 제한적이 될텐데요.
제공해야 하는
제공해야 하는 코드의 예 : 어느 정도의 오브젝트 코드를 제공해야 하는가는, LGPL v2의 "work that uses LGPL library"의 범주에 따릅니다. 가령 iPhone전체를 LGPL을 사용하는 work라고 보는 것은 무리가 있겠지만, iPhone의 safari application은, work that uses LGPL library로 보는 것이 옳을듯 합니다. ... 이 구분은 LGPL v2에서는 "법적으로도 그리 클리어하지 못하다" 라고 명시하고 있는데 (어쩌란 말인지 흐...) ... 일단 어떤 부분까지를 LGPL 라이브러리를 사용하는 work로 판단한 경우, 그 work는 전체의 complete한 object를 제공해야 한다고 LGPL은 명시하고 있습니다. (아마, 그렇지 않으면 application을 빌드 할 수 없기 때문인듯 합니다) : 같은 이야기인데요. 만약 iPhone을 work로 볼수는 없고, safari만 work로 본다면, iPhone은 LGPL라이브러리를 사용했다는 "고지"를 할 필요도 없습니다! ... 그래서, work를 iPhone전체로 보기도 그렇고, safari로만 보기도 그런 겁니다... 쩝...
리버스 엔지니어링 : 현실적으로 차이가 없지만, LGPL을 적용하고 LGPL라이센스를 포함하면, 보통의 제품처럼 라이센스에 "리버스 엔지니어링을 금한다" 라는 말도 있고, LGPL에 포함된 "리버스 엔지니어링을 허가한다" 라는 말도 있다는 놀라운 상태가 생기기 됩니다. 물론 애플 제품은 리버스 엔지니어링을 금한다는 라이센스가 포함되어 있습니다. 저로서는 LGPL을 따르면서, 이런 라이센스를 같이 보낸다는게 이해가 안되는 거죠.
LGPL코드 부분을 고치기 위한 리버스 엔지니어링을 막아서는 안됩니다. 물론 권장하거나 도와줄 필요도 없지만, "막아서는 안된다" 라는 규정은 굉장히 restrictive해 보입니다. 즉, LGPL을 쓴 제품은, "어떠한 형태의 리버스 엔지니어링도 할 수 없다"고 선언할 수가 없어지는 겁니다. (엄격히 LGPL을 지킨다면 말입니다) (실지 iPhone의 라이센스를 다시 읽어봐야 할듯 하긴 합니다만) 하긴 저라도 "우리 회사 제품"에, "리버스 엔지니어링은 금하지만, LGPL부분은 괜찮다" 라고 적고 싶지는 않을듯 합니다.
노벨과 LGPL정책 : 제 뉘앙스가 이상했네요. 노벨이 LGPL을 임베디드에서 쓰지 않기로 했다는 것이 아니고 (쩝... ), LGPL과 독점 소프트웨어를 혼합해서, 임베디드에 쓰지 않겠다 라고 결정했다는 이야기입니다. 보호해야 하는 독점 코드는 (임베디드의 경우에) LGPL과 혼합하지 않는 다고 결정했다는 이야기입니다. 또, 노벨에서 직접 작성한 코드를 LGPL로 릴리즈 하기로 한 경우에도, 임베디드의 경우에는 예외 규정을 두고, 다른 라이센스를 적용하고 있습니다. 공식적인 발표를 읽은게 아니라, 서버 시험을 위해서 만난 노벨 엔지니어에게 들은 이야기인데요. ( 살짝 찾아보니 참조할 만한 공식 페이지나 선언이 잘 안보이네요.) 최근 (대략 지난 2년전?) 노벨에서 작성한 프로젝트 코드들을 보시면 LGPL 라이센스 및 임베디드 라이센스를 따로 두고 있는게 보이실 겁니다.
EDIT : 다시 읽어보니, 노벨이 대체 왜 LGPL을 구분하겠다는 건지 여전히 이해가 안되실것 같아서, 제 경험의 예를 들어보겠습니다. 2년전에, 어찌 어찌 해서 노벨에 코덱을 하나 작성해서 납품하게 되었습니다. 소스가 아닌 바이너리 오브젝트로 납품했고, 노벨은 우리 코덱에 대한 사용권을 가지고 있습니다. 하지만 코드 양도권은 없는 형태였습니다. (즉, 노벨은 "코덱의 기능을 제공하는 제품을 만들 수는 있지만, 고객들에게 코덱 바이너리 자체를 재분배하는 것은 불가능"합니다. 우리 회사가 이런 정책을 택한것은 당연한데, 노벨 고객이 한둘이 아니고, 그 중에는 우리 고객도 있으니까요. ) 그 결과로 노벨은, 이 코덱을 사용할 작은 기기에, LGPL 로 이루어진 주요 모듈 하나를 스크래치 부터 새로 만들어야 했습니다. LGPL과 엮이는 경우, 같이 링크되는 오브젝트 코드들을 고객에게 보내야 하기 때문이라는 것이 이유였습니다. ... (사실 우리 회사 때문만은 아니고, 다른 모듈들도 노벨에서 그저 돈 주고 사온 게 있어서 그랬습니다만) ... 그때 그 장비를 같이 필드 테스트 하면서, LGPL에 소스 오픈 말고도 제한 조건이 있다는 것을 처음 알았습니다. 나름대로 그런 걸 지키면서 사는 회사도 있구나, 했었지요. 법적으로 문제가 되는 일이 몇번 있었던 모냥입니다...
오브젝트 코드를
오브젝트 코드를 제공하는 것은 lgplv2 라이브러리를 static link할 경우에 대해서입니다. 그리고 lgplv2 라이브러리를 사용하여 제품에 탑재하였다면 그 사실을 소비자에게 고지할 의무가 있습니다. 어떤 논리로 그러한 내용을 고지할 필요가 없다고 단정적으로 이야기하시는지 모르겠네요.
리버스 엔지니어링과 관련된 부분은 법무팀에서 펄쩍 뛸 부분이라고 하셨는데 법무팀 입장에서만 본다면 그럴 수도 있습니다. 그러나 제 경험에 비추어 본다면 리버스 엔지니어링을 어차피 100% 막을 수 없다는 현실적인 상황(금하더라도 경쟁사에서 몰래 하는 것까지 막을 수는 없으니)과 lgplv2 라이브러리를 도입함으로써 얻어지는 이득(개발비 절감/개발 속도 향상) 또는 도입하지 않을 수밖에 없는 상황들(예: glibc를 대체할 만한 것이 없음)이 항상 우선하였기 때문에 실질적으로 그것이 문제가 된 적은 없었고 법무팀과 맞장뜰 논리는 얼마든지 더 만들 수 있습니다. 법무팀은 대체로 무엇인가를 면피하고자 하는 조직이지 일이 되도록 하는 조직은 아니지 않습니까. :-)
노벨과 관련된 건은 정확히 모르겠지만 해당 lgpl 모듈을 dynamic link하여 개발하였다면 오브젝트 코드를 제공할 의무는 없는 것인데 아마도 어쩔 수 없이 static link하였나 보네요.
글 내용 전반적으로 gpl/lgpl v2와 v3의 의무사항을 구별하지 않은 채로 기술하시고... lgpl의 static link와 dynamic link시의 의무사항 역시 혼용하셔서 lgpl을 매우 restrictive한 라이센스라고 이야기하시는 것 같아 정확한 내용을 이야기하는 것이 좋겠다 싶어서 답하였습니다.
lgplv2는 임베디드 기기 등 여러가지로 기술적/정책적 제약사항이 존재하는 분야에 사용하기에 그렇게 문제가 되는 라이센스가 아닙니다.
답 해주셔서
답 해주셔서 감사합니다 :-) 덕분에 v3와 v2의 차이점에 대해서 인지하게 되었습니다. 제가 포스팅을 한 이유는, LGPL이 다이내믹 링크가 허락되지 않는 환경 (뉴클리어스 OS나 REX OS와 ARM CPU로 대표되는, 대부분의 전자사전, 고전적인 핸드폰, mp3등)에서는, 배포에 제한이 있는 독점 소프트웨어와 링크 하는 것이 불가능하거나 어렵기 때문에, LGPL을 만족하려면 주의해야한다는 것이었고, 이 점이 충분히 클리어 해진 듯 합니다.
고지의 의무가 없다, 라는 이야기는 : "iPhone이 work that use LGPL library"라면 고지의 의무와 동시에 (static link로 된 경우) iPhone전체의 바이너리 오브젝트를 릴리즈 해야 한다는 이야기였습니다. 반면에 safari만이 work that use LGPL 라이브러리라면 safari 프로그램에만 고지가 있으면 되고, safari 프로그램의 오브젝트가 공개되어야 하며, iPhone자체는 고지 하지 않아도 된다, 라는 이야기였습니다.
그리고, 다이내믹 링크를 할 경우에는, 아래 6.b를 따라야 합니다 : "interface-compatible"한 수정된 버전의 라이브러리를, 만약 사용자가 인스톨 하면, properly하게 동작해야 한다... 입니다. 해석의 여지가 있지만, 수정된 라이브러리를 설치할 수 있어야 하는 것 처럼 읽힙니다... (음...) 기계 자체가 라이브러리 인스톨이 안되면 몰라도, 아이폰 처럼 라이브러리 인스톨이 가능한 경우는, 이 항목에 따라 사용자의 라이브러리 인스톨을 허락해 주어야, 만족이 될것 같습니다.
A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.
----
아 법무팀... 순선님! 맞장 뜰 수 있는 자사의 법무팀 말고, 고객사의 법무팀과 싸워야 하는 상황이 되면 ... 음... 생각이 쪼매 달라지실겁니다. 말씀하신 법무팀은 면피한다! 라는 것에 절대로 동의합니다 :) 사실, 그게 그들의 의무죠. 제 경우에는, 고객사의 법무팀이 딴지를 걸때 그것을 만족시켜야 했는데, 참 어렵습니다. 가령 수출용 핸드셋 제조회사의 법무팀은, 자신들의 핸드폰에 납품 받는 소프트웨어가 특허 및 저작권의 어떠한 문제가 없는지를 긴밀히 살피는데, 가령 나중에 지재권 소송이라도 나면 수출할 때의, 수입국 통관에서 막히기 떄문에 눈에 불을 켜고, 라이센스를 살핍니다.
그런 분들(!) 을 만족시키면서 상품을 공급해야 하는 입장이기 때문에, 라이센스에 LGPL을 넣어가기가 어렵습니다. ... 가령, 핸드폰 제조사의 핸드폰에다가, LGPL 라이브러리를 사용한 브라우저를 탑재한다고 가정해 보겠습니다. 대부분의 ARM9 베이스 (스마트 폰 아닌 폰들, 즉 대다수) 폰들은 OS 자체까지 모두 static link로 연결하여 단일한 바이너리로 만들어집니다. LGPL 을 사용하는 순간, 링크된 나머지 바이너리 오브젝트를 (end user에게라도) 보낼 수 있어야 하게 됩니다. 그런데, OS (이 경우에, 제일 많이 쓰이는 뉴클리어스로 예를 들겠습니다) 의 오브젝트를 밖으로 내보는 것 자체가, 해당 고객사가 취득한, OS 사용 계약의 위반이 됩니다. 링크되는 다른 코드의 라이센스가, LGPL을 만족시키기 위한 행동(이를 테면 배포)을 금지하게 하는 경우, LGPL 라이센스를 만족할 수 없는 것이며, 링크해서는 안된다고 FSF는 명시하고 있습니다.
제 입장이 이해가 되시는지요? 뉴클리어스 OS + ARM 라이브러리로 만들어진 핸드셋이나 mp3를 만들 경우, 사실상 LGPL 과 링크 할 수가 없습니다. 해당 플랫폼의 기반이 되는, 뉴클리어스 OS나 ARM 라이브러리가, 이미 오브젝트의 재배포를 금지하고 있기 때문입니다. 그러면 그러한 고객사 제품에는, 납품이 불가능해지는 (원칙적으로는... 어디까지나 원칙적으로는..) 것입니다. 제 생각에, ARM9과 뉴클리어스 OS 등으로 대표되는 독점 소프트웨어 임베디드 기기에, LGPL 라이브러리를 쓴다는 것은 거의 불가능한 것 같습니다. (그래서 노벨과 같은 기업은, ARM + 독점OS와, ARM + Linux OS 라인업을 아예 따로 관리하는 정책을 취하는 듯 합니다)
물론 그거야 이상이고, 실지로 대형 회사 (S사, L사) 코드 보면, LGPL 코드가 들어가 있다고도 합니다. ... (저는 본적 없습니다, 라고 말할 수 밖에 없겠지요? .T.T) ... 혹시나 LGPL로 커버되는 코드가 들어가 있을 경우, 위반이 된다고, 저는 생각합니다. 그렇게 남들도 위반하는데 무슨 신경이냐, 라고 말할 수도 있겠지만, 저 역시도 LGPL 라이센스로 커버되는 어떤 대학 프로젝트의 한 부분을 맡아 진행하고 있고... 라이센스를 최대한 지켜서 천국 (그런게 있다면, 소프트웨어 엔지니어의 천국) 으로 가고 싶은 심정인지라, 이런 부분에 민감하게 굴게 되네요.
----
LGPL이 나쁘다거나, LGPL 을 써서 좋은 도구를 공급하고 있는 애플이 문제가 있다거나, 이런게 아니라... 생각보다 LGPL은 장사해먹기 좋은 라이센스가 아니며, 재링크에 대한 의무 부가가 (스태틱 링크와 독점 OS에 의존하고 있는 다수의 임베디드에서는) 발목을 많이 잡는 다는 것을 이야기 하고 싶었습니다. 좀 어렵게 왔지만, 결국 다 이야기 했네요. ;)
"LGPL을 가져다 쓴 경우 소스만 공개하면 문제가 없다,는 아니더라" 라고 인식들만 해 주셔도, 포스팅한 노력이 충분히 만족스럽습니다.
----
EDIT : 사족
PS. 누가 이 포스팅들을 보고, 앞으로 자신들의 저러한 제한된 디바이스에서 LGPL코드를 차근히 빼주기를 바라는 것은, 1) 자유 소프트웨어 발전에 도움이 되는 것일까요? 2) 자유소프트웨어를 사용하는 것을 꺼려하게 되서, 도리어 발전에 장애가 될까요.
FSF야 1)번이라고 하겠지만, 어느정도는 2)번이라고 보실 수도 있을것 같아서... ...좀 그렇습니다. 만약 모든 임베디드 기기에서 편히 쓰일 릴리즈를 하시고싶다면, LGPL 로 릴리즈 하면서 6번 relink 는 지키지 않아도 된다, 라고 릴리즈 하는 것을 고려해보시는 것도 나쁘지 않을 것입니다... 제 기억이 틀리지 않다면 OCAML 언어가 잠시 그랬었지요... 임베디드와는 상관없이, 아직 그 언어의 런타임이 다이내믹 링크를 지원하지 않는 시절에... OCAML로 짜여진 프로그램을 배포하려면 1차 컴파일된 소스나 object까지 같이 보내야 하는 문제가 있었는데, 소스를 노출 시키지 않을 방법이 없는 오브젝트 형이었거든요.
예... 요약하자면 lgpl
예... 요약하자면 lgpl 코드는 static link할 경우 오브젝트 코드를 배포할 의무가 있는데 오브젝트 코드가 원래 오브젝트 코드의 라이센스 제약 때문에 해당 의무를 지키지 못하는 경우도 있을 수 있다라는 것일텐데 이렇게 하는 것은 애초부터 문제가 있는 것이기 때문에 이 경우는 lgpl 코드를 사용할 수가 없겠지요.
이것은 lgpl의 잘못(?)이 아니라 오브젝트 코드를 배포하지 못하도록 되어 있는 쪽의 문제라고 생각합니다. lgpl에 대해서 불평(?)할 사항은 아니라는 것이지요. link에 대한 의무사항이 있긴 하지만 그래도 여전히 오브젝트 코드를 배포하지 못하는 일부 임베디드용 os들보다는 훨씬 더 자유롭고, 소스코드도 볼 수 있고, 무료이지 않습니까.
저는 lgpl이 사용할 때 주의해야 할 의무사항이 있긴 하지만... lgpl이 비즈니스에 unfriendly하다, '발목을 잡는다'는 식의 부정적인 표현을 lgpl에 대고 하는 것은 적절하지 않다고 말씀드리고 싶은 것입니다.
발목을 잡는 것은 lgpl이 아니라 그 제약사항 많은 (그러나 lgpl과는 달리 분명히 비용까지 들여서 구매했음에 틀림없는) 임베디드용 os들이라고 하는 것이 더 정확하지 않을까요?
처음부터 제가
순선님 글에 자꾸 댓글을 달게 된 것은... "LGPL을 적용한 라이브러리가 비지니스에 쓰기에 그리 문제가 없다" 에 대해서, "아니다, 지금의 임베디드 시장에서는 쓸 수 없는 경우가 더 많다" 라고 이야기 하려는 것이었는데요. 그렇게 읽힌다니 안타깝습니다만, 제 주제는 LGPL이 나쁘거나, 제한적이서 바뀌었으면 좋겠다, 가 아닙니다. LGPL을 쓸 수 없는 환경이 있으므로 주의해야 한다, 입니다. 특히나, "내가 LGPL을 이용하여 작성한 소프트웨어" 그 자체는 코드 한줄 바뀌지 않았음에도 불구하고, 적용되는 해당 환경 (OS + 링크 방법)에 따라서 그것이 갑자기 라이센스 위반이 될 수도 있기 때문에, 소프트웨어 릴리즈나 디플로이 단계까지 미리 생각해서 라이브러리를 가져와야 한다; 입니다. 그런 경우까지 생각하지 않은 경우, 어느날 디플로이 하려고 보니 오래전에 가져와서 대체하기도 힘든 어떤 라이브러리의 라이센스가, 문제 없다고 생각했던 출시의 발목을 잡을 수도 있다... 라는 거죠.
----
Copy당 돈을 받는 독점 소프트웨어가 재배포를 금지하는 것은 당연한 일이고, 아직 그런 독점 소프트웨어가 주류인 스태틱링크-임베디드 환경에서, LGPL로 커버되는 라이브러리를 쓰는 것은 어렵습니다. (임베디드 리눅스를 사용하는 경우가 아니라면 말이지요. 원하신다면 반대로 말씀하셔도 되겠지요, LGPL과 함께 쓰기에는, 임베디드 환경이 너무 restrictive하다, 기존의 상용 OS나 라이브러리들이 재배포조차 할 수 없는 독점 소프트웨어들이다... 라고)
"(LGPL v3가 아니라) LGPL v2도, 임베디드에서 사용할 수 없는 경우가 있다" 라는 것에 대해서 동의를 얻은 것만으로도, 그래서 LGPL을 쓸 수 없는 상황이 있다는 것을 널리(?) 알릴 수 있는 것만으로도, 사실 저는 만족입니다.
요약하자면 LGPL 코드를 사용 할때 잘 검토하셔야 한다는 것입니다... 내가 재배포 불가능한 ("사용권을 구매해 온") 상용 라이브러리와 연결할 예정은 없는지, 독점OS를 사용하는 하드웨어에 스태틱 링크로 넣어야할 일은 없는지... 지금 사용하고 있는 임베디드 OS의 라이브러리와 헤더를 재배포할 수 있는지, 그래서 재배포 할 수 없는 모듈이 있다면 그것은 무엇이고 어떻게 제거할 것인지 등등... 그런 부분을 꼼꼼히 따지셔야, 나중에 어디에서 라이센스 위반이 아니냐고 문제가 생길 일이 없다는 것입니다.
그리고... 아이폰에서
그리고... 아이폰에서 실행파일을 빌드하는 방법을 제공하지 않는다고 이야기하기 전에... 아이폰에서 어떤 lgpl v2 소프트웨어를 사용하고 있는지를 확인하는 것이 우선이겠지요.
만약 정말로 어떠한 lgplv2 소프트웨어가 사용되고 있는데 아이폰에서 해당 소프트웨어를 사용하고 있다는 사실을 고지하지도 않고 소스코드 제공 요청도 무시하고 static link 일 경우 오브젝트 코드 제공 요청도 무시한다면 그것은 아이폰 제조사가 lgpl을 위반하고 있는 것입니다.
아이폰에서 사용하고 있는 LGPL v2 라이브러리들과 소스 오픈 상태..
일단 OSX 내부에 사용된 GPL/LGPL 관련 소스에 대해서는 알지 못합니다. 하지만, 브라우저와 관련된 부분들은 다음과 같습니다
Xerxes : APL (XML엔진)
Cairo : LGPL v2 (rendering)
KHTML : LGPL v2 ( 애플에서 수정후 WebCore라고 부르고 있습니다)
KJS : LGPL v2 ( 애플에서 수정후 JavascriptCore라고 부르고 있습니다)
(몇가지 작은 소소한 모듈이 더 있기는 합니다만. 대략 이렇습니다) 하부에 GPL코드나 다른 LGPL기반으로 연결되던 것들을, apple은 자사의 api로 다 대체했기 때문에 그 이하로는 별로 문제가 될것 같지 않습니다.
애플은 이 모두를 모아, 관리하면서 WebKit이라고 이름 붙였습니다. 이 소스는 애플에 의해서 잘 관리되고 있는 오픈 소스 프로젝트로서 (거의 애플 내부 프로젝트이기는 합니다만) 노키아 S60 플랫폼의 브라우저 베이스가 되는 등, 여러곳에서 쓰이고 있습니다. 애플은 웹킷 자체를 LGPL / BSD 듀얼 라이센스로명시하고 있습니다. (물론 그것이 원래 LGPL기반의 소스를 LGPL로 부터 해방시키지는 않습니다)
* 소스 오픈 상태 : 모두 오픈되어 있습니다. 가령, 아이폰에 사용된 버전도 다운로드 받을 수 있습니다.
* OSX나 윈도 버전의 safari : dynamic linking으로 라이브러리를 연결하고 있습니다.
* iPhone의 경우 :
LGPL v2, 6 항을 지키기 위해서는 webcore의 경우, 소스를 제공하고(만족함) iPhone의 사파리 브라우저를 빌드 할 수 있도록 관련 object를 제공해야 하는데 (정확히 말하자면 build옵션 까지도 필요합니다... 여기에 다른 의견이 있으실 수도 있겠습니다만... 그저 오브젝트만 주는 것은 ... 그러나 이상하죠) ... 제가 직접 요청해 보지는 못했습니다만, 애플의 기본 입장은, "아이폰용 어플리케이션을 사용자가 빌드 할 수는 없다" 라는 입장입니다. (수정 : 그런 입장이었습니다... 지금은 개발 가능하고, 다만 distribution은 애플에서만 할 수 있도록 signature로 제한한다는 입장인듯 합니다)
GNU에서 홍보 담당자의 입장은 (언론에 노출된 입장은) 만약 애플은 아이폰의 소프트웨어를 업데이트 할 수 있지만, 사용자는 그것을 할 수 없다면 위반이라고 보아야 하지 않는가, 인듯 합니다. (GPL/LGPL V3 이야기입니다... 즉 하드웨어 자체의 한계로 인해 소프트웨어를 업데이트 할 수 없다면 어쩔 수 없지만, 그것이 아니라면 문제의 소지가 있다, 라는 의미로) 하지만 LGPL v2는 "다시 빌드 할 수 있는가"와 관계된 것이니까... iPhone SDK를 살펴봐야겠네요...
만약 iPhone/iPod Touch를
만약 iPhone/iPod Touch를 사용한다면 아래 동작을 통해서 탑재된 소프트웨어의 카피라이트 및 라이센스들을 확인할 수 있습니다.
설정 -> 일반 -> 정보 -> 저작권
추가:
제 iPod에서 추출해낸 저작권 정보입니다.
iPod 용 소프트웨어 저작권 정보
iPhone 용 소프트웨어 저작권 정보
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
아, 노력에
아, 노력에 감사드립니다! Webkit전체로 해당 코드들을 명하고 LGPL을 고지하고 있군요.
아마 LGPL 라이센스의 사본도 어디 있겠네요. (아마, 디지털 매체 안에라도 반드시 있을 성 싶습니다 -- 가령 맥용 사파리 브라우저의 경우에는, help안에 LGPL 라이센스와 관련된 라이센스들도 다 기록되어 있으니...)
iphone에 gplv3/lgplv3
iphone에 gplv3/lgplv3 소프트웨어가 없다면 iphone에 대해 gplv3/lgplv3의 의무사항을 논의하는 것 자체가 불필요합니다.
그리고 safari가 lgplv2 소프트웨어와 dynamic link된다면 애플이 애플리케이션의 오브젝트를 제공할 의무는 없는 것이지요. 좀더 세부적인 빌드 옵션에 대한 것은 사용자가 요청할 수 있고 애플이 이에 대해 응답할 의무는 있습니다.
>> 그리고 safari가
>> 그리고 safari가 lgplv2 소프트웨어와 dynamic link된다면 애플이 애플리케이션의 오브젝트를 제공할 의무는 없는 것이지요.
맞습니다... 이 경우에는, 사용자가 시스템에 새 라이브러리를 설치할 경우, 돌아가기만 하면 문제가 없다, 라고 라이센스가 명시하고 있으니까요...
아이폰 SDK와 ,,,
지금 beta로 준비되고 있는, iPhone SDK에서 사파리 실행파일을 빌드 할 수 있느냐 아니냐가 관건이 되는것 같아서, 조금 조사를 해 보았습니다...
애플의 iPhone SDK 정책은 대략 다음과 같다고 언론에 보도되어 있습니다... (InformationWeek에서)
>> 애플은 개별 소프트웨어 개발자들에게 자신들의 작업을 제출토록 하여 자사의 온라인 애플 스토어에서 독점 배급하려는 계획을 가지고 있다. 그렇게 되면 개발자들은 자신들의 소프트웨어 가격을 스스로 책정할 수 있지만 애플이 매출의 30퍼센트를 가져갈 것이다. 그러나 만약 해커들의 말이 사실이라면 애플이 iPhone 어플리케이션 개발을 계속 강력하게 통제할 수 있을 지 의문이다.
그리고 지금 iPhone 개발은, 해킹된 iPhone에서만 가능한 상태인듯 합니다. (가령, 정식 업데이트 1.1.1을 다운그레이드 한 다음, 어플리케이션을 올려야 한다 등의) ... iPhone 2.0은 signature를 도입하여, apple이, iPhone application을 위와 같이 관리하려는 시도를 하고 있구요.
개발툴 판매 가격으로 250불을 내는 건 문제가 안되는데... (그거야 어느 개발툴이건 마찬가지이므로) ... 어플리케이션을 "등록된 어플리케이션만" , 돌리겠다는군요. LGPL v2위반이 아니다, 라고 결론을 내려야겠네요. 대신, v3에는 위반이 되겠지요. 사파리 전체를 다시 빌드 할 수 있으니, 문제가 안되는 듯 합니다... iPhone SDK가 나오기 전에는, 이미지를 빌드할 방법이 없었기 때문에 LGPL v2위반이라고 말할 여지라도 있었지만, iPhone SDK가 있는 이상은, (그것에 금액이 얼마나 들건, 그것으로 만든 application을 돌릴 수 있건 없건) 이미지를 빌드 할 수 있을 것이고, 그러므로 문제가 없다고 봐야겠습니다. (애플이 사파리의 object들이나 다이내믹 링크를 제공하고 있다고 가정하고 있습니다.. )
결론 : (고지 의무를 지키고 있다고 가정하면) LGPL v2 를 위반하고 있지 않다. 만약 고지 의무를 웹으로 대신하고 있다고 할 수 있다면, LGPL v2를 위반하고 있지 않다고 보아야 할 것 같습니다...
호.오.....
글을 읽을 수록
궁금해지는 군요..
라이센스를 독파 해야하나..ㅠ.ㅠ
http://kldp.org/node/92636#comment-436961
권순선님 사진은 아드님이신가요??
볼때 마다 느끼지만...
무척 귀엽군요....
사모님 닮았을듯.-_-;;
농담이니...오해 마시길....
영어의 압박이...밀려오넴....
laziness, impatience, hubris
laziness, impatience, hubris
不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.
네... 지금은 더
네... 지금은 더 귀엽구요...^^
저 어릴때 모습을 많이 닮았습니다. 나중되면 저처럼 되겠지요. (이것때문에 와이프가 많이 걱정하고 있습니다.) --;;
ㅋㅋㅋ 똘망똘망 한데욤
나라의 큰일꾼이 될거라.. 믿어봅니다ㅎㅎ
근데 나라가 자꾸 기울어 가니..ㅠㅠ
미래의 자식들에게 미안하군요..
저도 언능 장가 가고 싶어요..
순선님 이미지 볼때마다..ㅠ.ㅠ
laziness, impatience, hubris 不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.
laziness, impatience, hubris
不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.
LGPL이 embedded 에 적합하지 않다는 기존 이야기들
많은 분들이, LGPL이 꽤나 강력한 조건 (사용자가 라이브러리를 업데이트 할 수 있어야 한다)을 걸고 있다는 것을 모르시는것 같네요.. 이 문제가 out of blue한 문제가 아니라는 것을 (음..... 그러니까 제가 라이센스를 잘못 읽어서 생긴 이야기가 아니라는 것을 T.T ) 이야기 하기 위해서, 기존의 관련글들을 살짝 모아보았습니다.
LGPL의 이러한 제한때문에 LGPL을 쓰지 말아야 한다는 논의라든가, 이러한 제한을 어떻게 지키고 있는가에 대한, 기존의 포스팅이나 관련 논의들을 일단 잠시 모아보았습니다.
CAIRO 라이브러리가 LGPL을 취해, 임베디드에서 쓰기어렵다는 것에 대한 Cairo 개발팀의 LGPL 변호
http://lists.freedesktop.org/archives/cairo/2004-August/001753.html
WebCore가 iPhone에서 LGPL v2를 지킬 수 있는가에 대한 논의
http://lists.macosforge.org/pipermail/webkit-dev/2007-March/001695.html
KDE의 Embedded와 LGPL... (message 4번 같은 것들)
http://lists.trolltech.com/qt-embedded-interest/2002-03/msg00031.html
MONO 라이브러리의 예 (임베디드의 경우, LGPL을 만족할 수 없으므로 별도의 라이센스를 마련한 예, see 1.4)
http://www.mono-project.com/FAQ:_Licensing
====
다시금 강조하자면, 글자그대로 LGPL을 검토해보면, "LGPL 라이센스로 배포되는 라이브러리를 사용하는 소프트웨어의 경우, 사용자가 그 LGPL라이브러리를 업데이트 할 수 있는 방법을 제공해야 한다", 라는 것을 조건으로 걸고 있다는 점입니다...
쩝... LGPL의 의도는, 새 버전의 라이브러리를 쓸 수 있어야 한다, 이지 싶은데... 임베디드 하드웨어에서는 그게 문제가 되는군요. 그래서 새 해석이나, 새로운 무언가가 있지 싶어서, 계속 주시하고 있는데... v3에서도 그것은 그대로 이어지고 있습니다. 사실, 많은 사람들이 그 조건을 좀 빼자고 했다고들도 하는데...
대개 소스를 오픈하기만 하면 문제가 없다고 생각들 하시죠. 저도 그런 수준으로 계속 작업해왔습니다만, LGPL자체의 메시지는 분명하게 저걸 언급하고 있습니다. 그래서 엄밀하게 접근할 경우, 문제가 됩니다. 가령 법적으로 중요한 코드라든가... iPhone같이 큰 제품이라거나, end-user를 대상으로 하게 된다거나... 쩝. 쩝.
>> 사용자가 그
>> 사용자가 그 LGPL라이브러리를 업데이트 할 수 있는 방법을 제공해야 한다
표현이 약간 애매합니다만... lgpl v2에서는 해당 라이브러리를 임베디드 기기 바깥에서 빌드/업데이트할 수 있어도 됩니다. 업데이트한 것을 다시 임베디드 기기에 실을 수 있어야 한다고 강제한 것은 lgpl v3이고요.
현재 대부분의 lgpl 라이브러리들은 lgpl v2이고, lgpl v3는 작년 6월에 gplv3/lgplv3가 나오면서 조금씩 확산되어 가고 있는 단계입니다.
만약 사파리 -
만약 사파리 - 웹코어가 링크된 어플리케이션 - 가 웹코어의 교체를 막는 것이 아니라 - 웹코어를 아이폰용으로 빌드할 수 없는 것은 아니므로 - 다른 구성요소가 그것을 막는다면 그에 대해서는 lgpl의 문제인지 아닌지가 궁금하네요. 사파리를 릴리즈한 주체가 그에대해서도 책임을 져야하는지...
어쨌든 무리하게 시스템을 폐쇄적으로 통제하려는 의도가 문제를 어렵게 만든다는 것은 확실하네요.
LGPL 위반이 아니라고 보는게 사실이겠지요...
웹코어가 오픈되어 있고, 웹코어를 수정해서 누구나 "자신의" device에 사용할 수 있으므로, LGPL 위반이 아니라고 보는 것이, "라이센스 따지기"와 상관없이 맞는 것으로 여겨집니다...
하지만, 라이센스를 꼼꼼히 적용해보면, LGPL 라이브러리를 사용하는 work인 iPhone은, 어떤 부분까지 선을 긋건 간에, LGPL 라이브러리를 사용하는 부분의 object를 제공하거나, 사용자가 수정한 라이브러리를 dynamic하게 링크할 수 있는 방법을 제공해야 하는데, 둘 다 불가하니... 그 불가능한 원인이, 제품의 특정한 형상으로 인한 것이다보면... 음... 이건 위반에 가까운 것인지, 위반이 아닌 것인지...
iPhone을 "a work that uses LGPL library"로 본다면 위반에 가까워 보이고, "사파리 브라우저"만을 "a work that uses LGPL library"로 본다면, 사파리를 다양한 곳에서 다양하게 빌드하고 수정후 사용할 수 있게 하고 있으니, LGPL만족인데... 그걸 잘 모르겠습니다.
제가 말씀드리고
제가 말씀드리고 싶었던 것이 바로 이부분인데요. 말씀하시는 중에 iPhone을 소프트웨어로 간주하시는 부분이
있는 것 같은데, 정확하게는 iPhone은 하드웨어 입니다. 따라서 소프트웨어인 웹코어와 기타 연결된 다른
소프트웨어가 사용가능하도록 구성될 수 있다고 해도 하드웨어인 iPhone이 그것을 차단할 경우 - 예를
들어 인증 시스템을 사용하거나 해서 - 이것이 LGPL과 관련이 될 수 있는가 하는 것이지요.
LGPL을 사용하는 제품을 만들었습니다, 어떻게 해야 할까요?
(오해의 소지가 있는 것 같아서, 조금더 문제를 정리해보았습니다)
질문 : LGPL로 구성된 브라우저를 포함하는 ARM기반의 device를 만들었습니다. 전체가 하나의 static link인 디바이스입니다. 제가 소비자에게, 무엇을 제공해야 할까요?
여기에 대해서 토론해보고 싶어 시작한 글입니다. 보통은 이에대해서 "LGPL 부분의 소스를 공개하면 된다" 라고 알고들 계십니다. 그런데 라이센스를 분석시켜보면, 그렇지 않다고 합니다.
----
라이센스에 따르면, LGPL을 사용한 제품(a work that uses LGPL library)의 경우, 다음의 방법을 제공해야 합니다. (v2 기준으로)
- LGPL 라이브러리의 소스 (수정된 경우)
- static linking 으로 생성된 경우 : 링크된 나머지 object파일들
dynamic inking으로 생성된 경우 : 사용자가 라이브러리를 수정하여 인스톨 한경우, 동작할 수 있는 매커니즘을 제공하고 있으므로 ok.
... 그리고 reverse engineering을 허락해야 한다.
----
나머지 오브젝트 전체를 공개하는 것은, (사실 정확히 리버스 엔지니어링 문제 때문에) 회사 입장에서는, 불가능한 일입니다. 그래서 LGPL 라이브러리를 빼야 하는 것으로 결론을 내립니다. ... 어쩔 수 없이 MPL라이브러리를 따르는 다른 브라우저를 사용하고자 하는 것이지요. 그런데, 애플사에서는 동일한 LGPL라이브러리를 사용하고 있습니다. 이상합니다... 그래서 우리도 그냥 사용하기로 했습니다 ...
이를 테면 위와 같은 스토리에 대해서 조언을 듣고 싶은 것입니다. LGPL을 사용하고, 사용자가 수정한 라이브러리의 Dynamic 링킹을 제공해 줄 수 없는 상황, 즉 대부분의 Embedded Device에서 겪게 될 문제로 보이기 때문입니다.
예로 드신 iphone 의
예로 드신 iphone 의 사례를 http://www.fsf.org/ 에 문의하시는 것이 정답일듯 합니다.
'남이하니까 나도 한다' 는 위험합니다.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
https://xenosi.de/
역시, 그런 수가...
:) 그렇지만 이미 프로젝트는 끝났고, 상품은 팔려서... (쿨럭) 지적인 관심사로 대하고 있는 셈입니다... 제가 잘못 생각하고 있는 것일지도 몰라서... 비슷한 정도의 결론이라면, fsf의 잠재적인 침해 신고에 작성해서 보내보겠습니다... 라이센스를 보다 적합하게 이해할 기회가 되겠지요.
프로젝트는 끝나지 않았고, 그 상품은 아직 팔리지 않은 것으로 압니다만...
그 전에 iPhone과 feature phone에 들어가는 S/W들이 같은 형태의 S/W인가 하는 점을 고려해 보아야 할 것 같습니다.
정황상 iPhone에 들어가는 S/W는 전체가 하나의 프로그램이 아닐 가능성이 높습니다. 달리 말하자면 WebKit은 dynamic link 되어 있을 가능성이 높다는 뜻입니다. 이런 경우 소스 코드도 공개되어 있고, 지금 당장은 iPhone에 다시 집어 넣을 방법은 없지만 build 및 update도 가능하므로 lgpl v2를 침해하지 않습니다.
iPhone에 들어가는 S/W는 전체가 하나의 프로그램으로 되어 있느냐 그렇지 않느냐가 관건인데 굳이 확인하지 않아도 답이 나올 것 같습니다만 ...
ps. 솔직히 말해서 WebKit을 feature phone 용으로 컴파일 하는 것이 사실상 가능하지 않아 보입니다.
WebKit 또한 template을 엄청나게 사용하고 있어서 VC++ 6.0에서도 컴파일이 안됩니다.
하물며 template 지원이 그보다 못한 ARM 컴파일러들이야...
물푸레나무님 : feature
물푸레나무님 : feature 폰이라... 아마 서로 같은 프로젝트를 이야기 하고 있는게 아닐 겁니다. (일단 phone대상의 프로젝트가 아니었으니까요.) 말씀하신 내용처럼 iPhone은 다이내믹 링크를 허락하는 OS로 여겨지며, LGPL 침해와 관련된 케이스가 안 되는것 같습니다.
템플릿 문제 : ARM용으로 compile된 WebKit은, 다른 예도 있지만... 그보다는 RVCT 2.2로 컴파일 되도록 오픈되어 있는 S60 browser의 소스 트리를 한번 보셔요. RVCT version requirement와, template과 관련된 소스 변경들도 말이지요. ARM의 컴파일러들도 Template지원이 많이 좋아졌습니다. RVCT 2.x부터 말이지요. ARM용으로 WebKit이 처음 full compile된 것은, 대략 s60 browser 개발 소스를 기준으로 하자면 2006년 경입니다. "feature폰 용으로 컴파일" 한다는 것이 어떤 것인지 잘 모르겠습니다만 (포팅을 언급하시는 것이라면 물론 알 수 없습니다만) ... 순수하게 WebKit 내부의 컴파일이라면, RVCT 2.x를 사용할 수 있는 환경이라면 문제가 없을 것입니다.
아이폰의 사파리
아이폰의 사파리 브라우저가 static link하고 있는 건 확실히 맞나요?
아이폰 터미널에서 파일시스템을 확인해 본 바로는, MacOS와 구조가 같은데 이런 환경이라면 그냥 dynamic link할 것 같은데요.
네, (아마도)
네, (아마도) 다이내믹 링크이며, SDK로 라이브러리의 새로운 버전의 빌드와 설치도 가능한 것으로 사료됩니다... LGPL고지의무도 행하고 있어서, LGPL을 만족하는 것으로 보입니다.