LINUX.ORG.RU

Может ли GPL-приложение линковаться с закрытой библиотекой?


1

0

Есть программа под GPL. Можно ли в ней использовать закрытую бинарную библиотеку (dll/so)? Функционала нужно немного, но без нее программа работать не сможет. Знатоки подскажите пожалуйста. В гугле что-то зарылся.

★★★★

правильный ответ такой: линковка с несвободной библиотекой нарушает GPL, если она не является системной или не входит в состав компилятора. В этом случае нужно вносить в лицензию специальное исключение, разрешающее линковку с этой бибилотекой (если у тебя используется сторонний GPL-код, тебе не повезло:)

annulen ★★★★★
()
Ответ на: комментарий от annulen

Тогда следующий вопрос к знатокам GPL - можно ли расспространять заранее нерабочий код под GPL? К примеру закоммитил ты себе на публичный сервер полурабочий (или недоделаный) проект, использующий библиотеку под GPL. Могут на тебя из-за этого подать в суд?

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

можно

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

annulen ★★★★★
()
Ответ на: комментарий от annulen

То-есть я могу написать вот такой код:

const char * pathToLib = resolvePathToLib();
void * handle = dlopen( pathToLib, 0 );
typedef void (*myfunc)();
myfunc func = (myfunc)dlsym( handle, "myfunc" );
if ( func )
    func();

При этом в описании программы будет сказано, что она просто загружает произвольную библиотеку по выбору. Такой код не нарушает GPL?

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

нет

предвидя следующий вопрос, отвечу, что если загруженная бибилотека окажется несвободной, ты нарушишь лицензию на свой же код. Три дня самобичевания

annulen ★★★★★
()
Ответ на: комментарий от annulen

только маленькое «но»: ты не можешь распространять такую программу (бмнарь) под GPL, но ни кто не мешает тебе _любой_ _свой_ код (даже вышепреведенный) залицензировать под GPL, а уж кто и как будет делать из него «бинарь» - не твоё дело.

yyk ★★★★★
()
Ответ на: комментарий от annulen

нет

То-есть вот этот написаный мною код уже нарушает GPL? Если да, то получается любой код с использованием dlopen()/dlsym() нарушает GPL.

что если загруженная бибилотека окажется несвободной, ты нарушишь лицензию на свой же код

Как вы можете смотря на код знать какая библиотека окажется загруженой у человека, который на другом конце земного шара его скачал и собрал? Мы пока говорим просто про код, вот этот конкретный код.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

>Как вы можете смотря на код знать какая библиотека окажется загруженой у человека, который на другом конце земного шара его скачал и собрал?

в этом случае лицензию нарушит тот, кто запустит

annulen ★★★★★
()
Ответ на: комментарий от annulen

>этопочему?

ты сам выше сказал про линковку с либами, за исключением системных и прочее... Или мы друг друга не поняли?

yyk ★★★★★
()
Ответ на: комментарий от annulen

> в этом случае лицензию нарушит тот, кто запустит

Вот вам расширенный пример. Программа сканирует директорию и находит в ней 10 динамических библиотек. Она их последовательно открывает и вызывает оттуда одну функцию. У тут оказывается, что одна из тех 10 библиотек расспространялась под лицензией, несовместимой с GPL. Кого вести под суд, разработчика, который написал этот цикл, или же пользователя, который (самым преступным образом!) положил разные библиотеки в одну директорию?

Dendy ★★★★★
()
Ответ на: комментарий от annulen

>в этом случае лицензию нарушит тот, кто запустит

ненене, GPL ограничивает только распространение, а не использование.

yyk ★★★★★
()
Ответ на: комментарий от Dendy

1. Подать в суд на разработчика в любом случае никто не в праве (хотя такая программа вполне может быть вредоносной - это уже другая статья)

2. Если разработчик тролль, он может попробовать преследовать пользователя, но доказать что-либо вряд ли удастся

annulen ★★★★★
()
Ответ на: комментарий от annulen

Итак мы выяснили:
a) Разработчик программы может полностью оформить работу со сторонней библиотекой только с помощью dlopen()/dlsym() оставаясь в рамках лицензии GPL.
б) Если вы скачали такую программу под GPL и просто её запустили - на вас могут подать иск в суд за нарушение лицензии GPL.

Интересный ход мыслей. Есть ещё мнения по этому поводу?

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

>Разработчик программы может полностью оформить работу со сторонней библиотекой только с помощью dlopen()/dlsym() оставаясь в рамках лицензии GPL.

этого не утверждалось. Если разработчик намеревается таким образом работать с какой-либо конкретной несвободной бибилотекой (а не просто брутфорсить все подряд), тогда он 100% нарушает свою лицензию (естественно, никто не может наказть его за это, разве что авторы GPL-кода, который он позаимствовал). В чем разница - в этом случае разработчик сознательно распространяет несвободную либу вместе с продуктом или требует ее наличия для работы программы

annulen ★★★★★
()

По-моему, вы все всё путаете.

В GPL шла речь о derivative work (далее DW). То есть, если ваш код есть DW от какого-то другого кода, лицензированного под GPL, то и ваш код обязан быть под GPL. LGPL делает исключение для случая, когда DW - программа, использующая динамическую библиотеку.

В вашем же случае, библиотека не является DW от вашего кода, строго наоборот. Поэтому, если лицензия на библиотеку не нарушена, то вы можете линковаться с закрытой библиотекой.

P.S.

А ещё прошу вышеотписавшихся объяснить физический смысл выражения «разработчик нарушил свою лицензию». Это типа «обокрал/обманул сам себя»?

Divius ★★
()
Ответ на: комментарий от annulen

> разработчик сознательно распространяет

Не расспространяет и не требует. Как уже было сказано выше - просто выложил код на публичный сервер. И да - код под GPL, никоим образом его не нарушая.

Dendy ★★★★★
()
Ответ на: комментарий от Divius

>В вашем же случае, библиотека не является DW от вашего кода, строго наоборот.

именно так, но GPL-код не может быть DW от проприетарной бибилотеки, это нарушение

Это типа «обокрал/обманул сам себя»?

Примерно так

annulen ★★★★★
()
Ответ на: комментарий от Divius

аналогично, GPLv2-код нельзя линковать с библиотекой под LGPL3 - это не нарушит LGPL3, но нарушит GPL2

annulen ★★★★★
()
Ответ на: комментарий от annulen

именно так, но GPL-код не может быть DW от проприетарной бибилотеки, это нарушение

Где это сказано? Пожалуйста, точную цитату, я там такого не находил.

Divius ★★
()
Ответ на: комментарий от annulen

you should affix an explicit notice giving permission to link your program with them

Короче, надо себе это разрешить.

И да, этот faq не очень-то выдержан в букве GPL (хотя и соответствует духу).

Divius ★★
()
Ответ на: комментарий от Divius

>Короче, надо себе это разрешить.

не надо ерничать. Лицензия GPL в исходном виде здесь неприменима, если ты ее применяешь - ССЗБ

annulen ★★★★★
()
Ответ на: комментарий от annulen

>Лицензия GPL в исходном виде здесь неприменима, если ты ее применяешь - ССЗБ

ещё раз - неприменима при распространении программы в бинарном виде (в комплекте с самой библиотекой?). Выложить для публичного доступа исходник - никаких проблем.

yyk ★★★★★
()
Ответ на: комментарий от annulen

>распространение этой библиотеки никоим боком не связано с проблемой

да и хрен с ней =)

yyk ★★★★★
()
Ответ на: комментарий от annulen

не надо ерничать. Лицензия GPL в исходном виде здесь неприменима

Не надо умничать. Что значит: «неприменима»? Столлман запретил? Как я уже сказал, букве лицензии это не соответствует, faq - не часть лицензии.

Divius ★★
()
Ответ на: комментарий от Divius

>Столлман запретил?

пожалуйста, применяй и нарушай ее требования, никто жаловаться не будет

annulen ★★★★★
()

А если сделать к этой закрытой библиотеке биндинг к DBus, и дергать ее функции через dbus? Как к этому отностся gpl?

Nakgidveef
()

Нет. В проприетарных драйверах nvidia и ati, например, есть связующая открытая обкладка, из которой вызываются GPL-ные интерфейсы ядра.

ttnl ★★★★★
()

GPL говорит, что использовать открытый код в закрытом (т.е. ловить халяву) нельзя. Наоборот конечно можно, просто тогда эта программа будет открытой, но не свободной.

PayableOnDeath
()

>>Наоборот конечно можно, просто тогда эта программа будет открытой, но не свободной.

Кхм.. это что-же получается: любые программы созданные под Виндоус уже сами по факту будут несвободными т.к. ВСЕ они линкуются ВСЕГДА с виндовыми *.dll ? O_o

kuzulis ★★
()
Ответ на: комментарий от kuzulis

т.е. Open Source для любых ОС отличных от *.nix - это мистика!? :)

kuzulis ★★
()
Ответ на: комментарий от kuzulis

>>они линкуются ВСЕГДА с виндовыми *.dll

Имею ввиду если в программе используется АПИ ОС.

kuzulis ★★
()
Ответ на: комментарий от proud_anon

Программа моя. Использует qscintilla, то есть линкуется с GPL библиотекой. Поэтому решили ее открыть под GPL.

Но эта же программа линкуется с нашей библиотекой, которую пока невозможно открыть под GPL.

Означает ли это, что наша закрытая библиотека тоже должна быть под GPL, либо ее нельзя использовать?

Esh ★★★★
() автор топика

GPL распространяется на текущую и последующие работы, но не влияет на предыдущие.

Поясняю: библиотека гпл, программа закрыта - нельзя, т.к. программа - производная работа и нарушает лицензию библиотеки. Библиотека закрыта, программа - ГПЛ можно. См. реализацию всевозможного открытого софта на винапи.

Alan_Steel ★★
()
Ответ на: комментарий от Alan_Steel

Отлично объяснили! Спасибо.

Esh ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.