Як правило статичного та динамічного зв’язування GPL застосовується до інтерпретованих мов?


19

Наскільки я розумію, GPL забороняє статичне посилання з не-GPL-коду до коду GPL, але дозволяє динамічне посилання з не-GPL-коду на код GPL. Отже, що це, коли відповідний код взагалі не пов'язаний, оскільки код написаний інтерпретованою мовою (наприклад, Perl)?

Експлуатувати правило було б занадто просто, якби це вважалося динамічним посиланням, але, з іншого боку, також було б неможливо юридично посилати GPL-код з коду, який не є GPL, якщо він вважався статичним! Мови, що складаються, принаймні мають відмінність між статичним та динамічним зв’язком, але коли всі "посилання" - це лише запущені сценарії, неможливо сказати, який умисел є без явної ліцензії!

Або моє розуміння цього питання неправильне, що робить питання суперечливим? Я також чув про "виняток з класового шляху", який передбачає динамічне пов'язування; це не частина GPL, а натомість щось, що може бути додано до неї, тому динамічне посилання дозволяється лише тоді, коли ліцензія включає цей виняток?


Чи читали ви gnu.org/licenses/lgpl-java.html ?

2
@delnan lgpl! = gpl
Йоганн

Відповіді:


16

Що стосується конкретного питання щодо інтерпретованих мов, FAQ GPL дуже зрозумілий :

Інтерпретована програма для перекладача - це лише дані; ліцензія на безкоштовне програмне забезпечення, як GPL, заснована на законі про авторські права, не може обмежувати, якими даними ви користуєтесь перекладачем. Ви можете запускати їх на будь-яких даних (інтерпретована програма), будь-яким способом, який вам подобається, і жодних вимог щодо ліцензування цих даних не має.

Що стосується загального питання про динамічне проти статичного зв'язку. Перш за все, погляд FSF та Stallman полягає в тому, що не має значення, чи є з'єднання статичним чи динамічним, GPL заражає будь-яким способом. З FAQ щодо FSF GPL:

Якщо програма динамічно пов'язує плагіни і вони здійснюють функціональні дзвінки один до одного та обмінюються структурами даних, ми вважаємо, що вони утворюють єдину програму, яка повинна розглядатися як розширення як основної програми, так і плагінів. Це означає, що поєднання плагіну, охопленого GPL, та невільної основної програми порушує GPL.

і

Пов'язування [ім'я вашої програми] статично чи динамічно з іншими модулями - це комбінована робота на основі [назва вашої програми]. Таким чином, умови Генеральної публічної ліцензії GNU охоплюють всю комбінацію

Однак це сумнівно з юридичної точки зору. Єдиний випадок, який насправді звертався до суду щодо динамічного зв’язку - Galoob проти Nintendo - Апеляційний суд постановив, що похідна робота "повинна містити частину авторського права у певній формі" . Що не стосується динамічних зв'язків.

У будь-якому випадку, незалежно від того, чи дійсно динамічне зв’язування заражає чи ні, є робота. Наприклад, Nvidia використовується для надання бінарних драйверів для Linux. Ви створюєте (L) GPL обгортку, але як автор ви можете додати спеціальний виняток для зв’язку з певним закритим кодом. Знайдіть поширені запитання про FSF GPL .


Однією з натур похідного твору є те, що неможливо чітко відокремити оригінальний твір власника авторських прав. Якщо Боб Foo()статично пов'язаний з викликом Джо Bar(), до якого власнику авторських прав слід CALLвідносити інструкцію між ними? Такої взаємодії було б достатньо, щоб вона стала «похідною роботою». Якщо ж робота Джо залишається повністю в одному файлі, а Боб залишається повністю в іншому, саме поява цих файлів у різних каталогах на одному диску є об'єднанням, а не виведенням.
supercat

2
@thepaul: вже існує правовий пріоритет, який говорить про те, що принаймні частина роботи, захищеної авторським правом, повинна бути включена у твір, щоб скласти похідний твір. Вірування Столмана часто мають дуже мало підґрунтя в реальному реальному праві.
vartec

1
@thepaul: з одного боку ви маєте юридичну практику, яку використовує компанія в розмірі 9 мільярдів доларів, а з іншого претензії - хлопець, який любить носити шапку tinfoil. Ви стверджуєте, що пізніше надійніше, і ви повністю в своєму праві вірити в це.
vartec

1
Ви цитуєте неправильну частину поширених запитань про GPL дуже зрозуміло . Частина, про яку ви цитуєте, стосується, якщо інтерпретатор мови програмування випускається під GPL, чи означає це, що програми, написані для інтерпретації, повинні бути відповідно до ліцензій, сумісних з GPL? ! Звідси до [GPL-ліцензованого] перекладача . Відповідна частина - це останні два абзаци: [...] Інший подібний і дуже поширений випадок - це надання бібліотекам перекладача, який сам інтерпретується. Наприклад, Perl поставляється з багатьма модулями Perl [...]
Кріс Вессілінг

1
«Інтерпретована програма для перекладача - це лише дані; ліцензія на безкоштовне програмне забезпечення, як GPL, заснована на законі про авторські права, не може обмежувати, якими даними ви користуєтесь перекладачем. Ви можете запускати їх на будь-яких даних (інтерпретована програма), будь-яким способом, і немає жодних вимог щодо ліцензування цих даних будь-кому. Що не охоплює тему використання плагіну без знаків у програмі GPL на інтерпретованій мові.
tuxayo

4

Примітка. Це юридичне питання. Programmers.SE - це не юридичний форум, це форум програмування. Хоча люди тут знають досить багато про програмування, вони нічого не знають про закон. Якщо ви хочете задати юридичне питання, вам слід задати це питання на правовому форумі, де є люди, які насправді знають щось про тему.


GPL нічого не говорить про статичне або динамічне з'єднання. Це навіть не говорить про взаємини взагалі . Кожен адвокат чи суддя, з яким я спілкувався, каже, що питання статичного та динамічного зв’язку абсолютно не має значення.

Авторське право - це про творчість. Статичні та динамічні зв'язки є детальною технічною реалізацією. Незалежно від того, що щось статично чи динамічно пов’язано, не є творчим актом, воно не може змінити статус авторського права на твір.

У своєму запитанні ви говорите про "інтерпретовані мови". Але цей термін не має сенсу: не існує такого поняття, як інтерпретована мова. Мова - це абстрактний набір математичних правил та обмежень. Мова не інтерпретується та не компілюється. Мова просто є . Термін "інтерпретована мова" не просто помилковий , він нечуттєвий . Якби англійська мова була набраною мовою, це була б помилка типу.

Інтерпретація та компіляція - це риси перекладача чи укладача (так!), А не мова. Кожна мова може бути реалізована за допомогою перекладача, а кожна мова може бути реалізована за допомогою компілятора. Більшість мов мають обидві. Більшість сучасних мовних програм навіть поєднують обидва в одному механізмі виконання.

Наприклад, реалізація Rubinius Ruby містить статичний заздалегідь встановлений компілятор, який компілює код Ruby до байтового коду Rubinius, інтерпретатор, який інтерпретує байт-код Rubinius, і динамічний щойно вчасно встановлений компілятор, який компілює код байта Rubinius у LLVM ІК, який інфраструктура LLVM компілює в свою чергу з машинного коду. Реалізація MacRuby Ruby взагалі не містить інтерпретатора, вона збирає Ruby-код прямо в LLVM IR, а потім далі до власного машинного коду.

З іншого боку, є перекладачі для C або C ++.

Все це лише технічні деталі. Це абсолютно не стосується авторських прав.

Просто не має сенсу те, що чи порушує хтось чиїсь авторські права чи ні, залежить від того, чи хтось третій чоловік вирішить запустити програму з перекладачем або скомпілювати її спочатку.

Питання полягає в тому, чи є твір похідним від іншого твору. Він може бути динамічно пов'язаним і все-таки виводитися, а також статично пов'язаним і зовсім не похідним.


Що з інтерпретованими мовами "проміжного коду"? Один із принципів, що лежить в основі GPL, - це те, що кожен повинен мати можливість адаптувати програму до будь-якої розумної машини, яка має ті ж мовні інструменти, що й оригінали. Якщо хтось випускає вихідний код для інтерпретатора проміжного коду, а також купу коду проміжної форми, який він може запускати, то які правила були б випускати інформацію, пов’язану з цим блоком проміжного коду? На відміну від компільованих виконуваних файлів, які є специфічними для машини, блок проміжного коду був би повністю переносним.
supercat

Вибачте; Я збирався запитати на stackoverflow.com, і він запропонував мені запитати тут, коли я використовував тег "gpl"! Чи заборонений такий вид дискусії і тут? exec ("адвокат-killall -9"); : D
еколіс

І так, я погоджуюся, що немає сенсу, що деталізація щодо впровадження не повинна впливати на правовий статус повторного використання; Я просто думав, що існує така відмінність, і просив роз'яснення!
еколіс

2
@ekolis: сама по собі заборонена. Це просто , що це не ідея добре ставити юридичні питання людей , які нічого про юридичних питаннях не знають (як програмісти, наприклад), коли є люди , які дійсно знають про юридичних питаннях (аки адвокатів) ви могли б запитати замість цього. Я нічого не маю проти адвокатів, зовсім навпаки. Але я б не просив жодної поради щодо алгоритму, і ні просив програміста отримати юридичну консультацію.
Йорг W Міттаг

ІАНАЛ: Це може бути технічна деталь, але вона все-таки має велике значення, оскільки вона змінює те, що розповсюджується юридично значущим чином. За допомогою статичного зв’язування ви будуєте комбіновану роботу, яка, згідно з правилами GPL, не може бути розповсюджена поза GPL. При динамічному посиланні ви можете це робити і, наприклад, якщо ви пакуєте бібліотеки зі своїм програмним забезпеченням у ZIP-файл. Але за допомогою динамічного зв’язку ви можете поширити його без бібліотек, і це на 100% ваша робота, навіть якщо вона не працює самостійно. І ви, звичайно, можете запропонувати бібліотеки під GPL.
flarn2006

0

Не маю уявлення, скільки правди в цьому є, і IANAL тощо; але в моєму трактуванні важливим є те, чи є бібліотека, з якою ви посилаєтесь, в якійсь формі включена у "бінарний" (де "бінарний", у випадку динамічних мов програмування, є лише вихідним кодом, як розподілений; це що я роблю з визначення FSF як "бінарний" у цьому контексті).

Тож якщо ви посилаєтесь на бібліотеки зі свого коду, не включаючи їх у свій дистрибутив, я вважаю це еквівалентом "динамічного зв’язку", тоді як якщо ви з'єднаєте бібліотеки зі своїм продуктом або скопіюєте вставте частини бібліотеки у свій власний код, застосовуватиметься сценарій «статичного зв’язку». Це, по крайней мере, в дусі GPL: ви можете вільно використовувати (біг, огляд, довідка) програмне забезпечення під ліцензією GPL без обмежень, але як тільки ви витягти з нього (шляхом зв'язування або копіювання його частини в ваш власний дистрибутивний продукт), він стає вірусним, а ваше програмне забезпечення також має бути GPL'd.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.