Что означает «GPL с исключением classpath» на практике?

70

Похоже, что Oracle лицензирует весь свой связанный с Java открытый исходный код под лицензией GPL с исключением classpath . Из того, что я понимаю, это, кажется, позволяет объединить эти библиотеки с вашим собственным кодом в продукты, которые не должны покрываться GPL.

  1. Как это работает?
  2. Каковы примеры того, как я могу и не могу использовать эти классы?
  3. Почему эта новая лицензия использовалась в отличие от LGPL, которая, кажется, допускает почти те же самые вещи, но лучше установлена ​​и понятна?
  4. Какие отличия от LGPL?
Тило
источник
1
Я нашел это в Википедии: en.wikipedia.org/wiki/…, которая немного проясняет ситуацию, но я до сих пор не понимаю, почему кто-то использует это через LGPL. Хороший вопрос!
1
На страницах Википедии не упоминаются такие вещи, как «пользователь должен иметь возможность заменить библиотеку своей собственной версией», что является положениями LGPL. Так может GPL + Exception не требует этого?
Thilo
1
Читая дальше, похоже, это действительно так: «LGPL формулирует больше требований к исключению компоновки: вы должны разрешить изменение частей библиотеки, которую вы используете, и обратный инжиниринг (вашей программы и библиотеки) для отладки таких изменений»
Тило
В таком случае, что мне нельзя делать по этой лицензии? Я могу скопировать лицензионный код (выбрать + выбрать классы) в свою собственную кодовую базу (конечно, без изменений)? Могу ли я использовать инструменты автоматической сборки для изменения полученного двоичного файла? Обфускаторы, минимизаторы, стриптизерш?
Thilo
Вы можете скопировать код из этого и использовать его в своем собственном коде, ТОЛЬКО если ваш собственный код также выпущен под лицензией «GPL с исключением classpath» . Если ваш код проприетарный или находится под большинством других лицензий с открытым исходным кодом, таких как MIT, вам не разрешено его использовать.
Абхи Беккерт

Ответы:

69

Во-первых, я не юрист. Но я изучил много лицензий и понимаю вопросы, касающиеся их.

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

(L) GPL, к сожалению, был написан с учетом C / C ++. В нем говорится о «Исходном коде», «Коде объекта», «Динамическом связывании», «Статическом связывании», «Компиляторах» и «Интерпретаторе кода объекта». Таким образом, для перевода этого на другие языки, которые не следуют тем же методам компиляции (например, байт-код Java, компиляция точно вовремя Python или интерпретируемая природа Javascript), требуется некоторое предположение и предположения. Когда вы говорите о законе - то есть думаете о возможных судебных делах, в которых спорят две стороны, - отсутствие четкого различия - ПЛОХАЯ вещь.

Стандартный кусок кода, лицензированный по лицензии GPL, довольно прост по замыслу. Любой, кто использует этот код, должен предоставлять свой код всем пользователям, когда они распространяют или продают его. Это вирус GPL, который Ричард Столлман хотел создать и сделал четко и чисто.

Изначально LGPL была попыткой создать «библиотеку», которая не была бы вирусной. Но они все еще хотели, чтобы конечный пользователь мог самостоятельно заменить библиотеку, поэтому существует различие между «статическим» и «динамическим» связыванием - пользователь может переключаться на другую динамически связанную библиотеку, поэтому ему не нужно быть лицензированным как GPL. И статическая ссылка требовала, чтобы пользователь был GPL. Лицензия фактически говорит о «заголовочных файлах», которые понятны в C / C ++, но, очевидно, неясны, когда вы находитесь в мире Java, Python, Javascript и т. Д. Так что L («библиотека») LGPL в лучшем случае грязная.

Это доходит до сути дела. Все, что неясно, ПЛОХО в мире законов. Если я смотрю на создание чего-либо с использованием компонента GPL или LGPL, я хочу быть уверенным, каково мое правовое положение в будущем, если я попаду в суд. Но на сегодняшний день я не уверен, потому что действительно не было хороших судебных дел, создающих правовой прецедент, только интеллектуальные аргументы на подобных форумах.

Здесь исключение Classpath неоценимо. В нем четко указано, что код по лицензии (L) GPL, но все, кто использует этот код, может следовать любой лицензии, какую пожелает. Нет, если, и, или но. Если вы измените основной код (например, исправление ошибок), вам все равно придется отменить эти изменения как часть GPL. Но использование НЕ заражает вас.

С точки зрения бизнеса, я понимаю, почему некоторые не хотят касаться GPL-кода 10-полюсным полюсом. Правовое положение остается неясным, и бизнес может застрять спустя десятилетие, когда юридический прецедент будет наконец установлен. Или они могут застревать в суде годами, пытаясь создать правовой прецедент. Независимо от того, что они просто не хотят рисковать ценой этой битвы. Добавление клаузулы Classpath Exception устраняет юридические вопросы и позволяет избежать любого (серьезного) потенциального судебного разбирательства.

Так что для меня исключение Classpath сильно отличается от LGPL. Это юридически чистый способ нарисовать яркую линию, позволяющую использовать GPL или LGPL исходный код или библиотеки без использования GPL.

Стив
источник
21
IANAL, но я один из создателей исключения Classpath, и это правильный ответ. Исключение было создано для поддержки скомпилированных AOT-сценариев использования, когда разработчики статически связывали двоичные файлы (в нашем случае с gcj). Нам нужно было что-то вроде лицензии libgcc, поэтому я написал первую версию исключения Classpath, основанную на этом. С тех пор он созрел, но дух тот же.
Энтони Грин
6

GPL с исключением classpath ведет себя как LGPL в большинстве случаев.

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

Джошуа
источник
-3

Похоже, что лицензии типа «GPL с исключением classpath» могут быть старше, чем LGPL.

Возможно, единственная причина, по которой кто-то все еще использует его, заключается в том, что код GPL нельзя перенести в код LGPL без письменного разрешения всех, кто когда-либо предоставлял код.

Абхи Беккерт
источник
7
Первая версия LGPL была выпущена в 1991 году, так что это предшествовало Java. en.wikipedia.org/wiki/LGPL
Thilo
Это предшествует Java, но это предшествует всему коду внутри Java? Возможно, первая версия Java содержала код из какого-то более старого проекта «GPL with classpath».