×Закрыть

Як використовувати код за ліцензією GNU GPL 3v?

Друзі, доброго вечора.

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

Буду дуже вдячна за допомогу.

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Большинство вопросов по (L)GPL отвечено в FAQ www.gnu.org/licenses/gpl-faq.en.html
Только ж никто не читает :)

Читает, но там про arm’s length написано настолько обтекаемо, что никогда не можешь быть уверен, что соблюдаешь достаточную «юридическую дистанцию», чтобы твой код не заразился GPL.

Когда-то она была заразной только при статической линковке, кажется. В результате народ линковал динамически. Потом — общался через сокеты или расшаренную память. В результате — сделали обтекаемо, чтобы страшно было, а с другой стороны — еще как-то можно было пользоваться ls или ping в закрытом софте.

В результате народ линковал динамически. Потом — общался через сокеты или расшаренную память.

зачем? при динамической линковке памятъ общая. через сокеты — это с соседним процессом пообщаться

Кажется, GPLv2 заразна при динамической линковке но не заразна в другой процесс через расшаренную память. Если интересно — исследуй историю и отпиши о результатах)

Речь о линковке и IPC, а не ГПЛ

Если интересно — исследуй историю и отпиши о результатах

нет, не интересно

Типа пока можно было — динамическая линковка, а как лицензия ее прикрыла — IPC. Может я сильно ленивый, чтобы сразу подробно расписывать.

С IPC и shared memory там тоже не всё гладко, потому что то ли в самой лицензии, то ли в комментариях к ней есть хитрый пункт про intimate knowledge of shared internal structures.

Скорее, «роялит» не сколько механизм общения, а то, происходит ли это общение через некий публичный API (в широком смысле этого слова — аргументы командной строки в него тоже попадают), или это приватный «междусобойчик».

Если с точки зрения ОС, то вообще всё грустно. Мы, например, как проприетарная ОС и ядро, загружаем GPL модуль не в память процесса, а в память одного из модулей ядра, но не используем код, а мапим его только в память процесса, чтобы он его использовал. По-хорошему весь GPL код динамически должен загружаться только с LOCAL правами — персонально для каждого процесса, а не WORLD, что увеличит неимоверно расход памяти, т.к. каждый процесс будет выделять память ОС для загрузки GPL вируса. С одной стороны это отлично — заставит пользователей и программистов не использовать GPL код. С другой — альтернативы есть далеко не всегда.

GPL всегда покрывал и статическую и динамическую линковку.
для разрешения динамической линковки — используют LGPL (или gpl with linking exception, как уже тут упоминали)

Вариант с «расшаренной памятью» — явно попадет в кейс с динамической линковкой.

Вариант «через сокеты» или stdin/stdout (в виде запуска как отдельного процесса) — вполне работает, при этом GPL библиотеку/приложение предлагается скачать самостоятельно (ну, или на кнопочку нажать, но тоже самостоятельно)

afaik, «вообще все варианты» (static/dynamic/server) покрывает AGPL

Насколько я понимаю эту лицензию, то:
— не меняли код — просто говорите в нотисах программы, мол использовал «XXX»
— если меняли код либы, то доработки — да, они должны быть выложены, факт

Є одне просте правило з GPL в комерційній розробці: «Ніякої GPL в комерційній розробці». Світ досить чітко поділений на ідеалістів-жпльщиків і реалістів. Хочеться розважатися і піаритися — GPL ваш друг. Хочеться, щоб ваш продукт використовували люди — MIT чи LGPL. Хочеться грошей — закритий код, з використанням MIT чи LGPL.

Ще народ робить dual licensing: можна безкоштовно використовувати GPL версію, а можна — купити пропрієтарну для закритого коду.

Світ досить чітко поділений на ідеалістів-жпльщиків і реалістів.

Тільки ідеалісти це більше до MIT/Apache. Хто завгодно може юзати і не платити.

GPL досить сувора і в деякому сенсі дуже дорога ліцензія. Цей тред непогана ілюстрація, наскільки висока ціна за використання GPL коду.

GPL — це комунізм в чистому вигляді. «Щастя всім, даром, а хто не хоче нашого щастя, то ми його вам принесемо на наших багнетах»

GPL — дуже добре. Завдяки ньому зараз ембедед дешевий. Роутери коштують десятки, а не сотні баксів.

Завдяки GPL є GNU/Linux, Android! Приплітати Леніна до GPL навіть не смішно.

Android

«Нашла, чем гордиться, дура» (ц)

Пам’ятаю якось на Хабрі втратив десь пунктів 300 карми в дискусії про глобальну шкоду GPL. 5000 коментів — і так ніхто нікого ні в чому і не переконав :)

Роутери коштують десятки, а не сотні баксів

за счет удешевления железа (ака. китайских аналогов)

И за счет нулевой цены софта. Если бы не было бесплатного софта — сидели бы на рынке 2-3 крупных производителя, и все. И цены, как на ОС в 90-х.

нулевая цена софта != ГПЛ

Думаю, она стала распространенной благодаря GPL.
А полноценные бесплатные системы — благодаря Линуксу, который брат GPL.

думаю, кроме ГПЛ естъ куча других бесплатных лицензий. мы не знаем, под какими лицензиями разарабатывали бы код для роутеров в случае отсутствия ГПЛ. в любом случае свято место пусто не бывает

GPL заложила начало движению, и стала базой для создания Линукса. Без ОС свободный софт остался бы в научном коммьюнити.

Не подобається ціна — не плати. Ніхто не заважає замість GPL з його складними вимогами користуватись аналогами зі звичним EULA

Не подобається ціна — не плати.

Так і я ж про це :)

Немає такого в GPL. Ані «щастя всім», ані багнетів.
GPL це приблизно «свій? нема питань, користуйся», з дуже специфічним визначенням «своїх».

Є одне просте правило з GPL в комерційній розробці: «Ніякої GPL в комерційній розробці».

Передам мужикам в РедХет, Оракл та інші конторки.

Ви ж розумієте, що статистично успішних випадків комерціалізації на базі GPL < 1% від кейсів використання інших ліцензій? Це як бігти з пудовою гантелею — цілком можливо, що є досить сильні люди, які будуть на це здатні, але більшості легше буде бігти без неї.

Я й не стверджував, що це найкращий варіант для пузатого капіталіста. Лише, що з GPL комерції не суперечить.

Вы путаете % успешных случаев, с процентом, готовых отдать свой исходный код.
Уже упоминалось, что множество коммерческих библиотек имеют двойную лицензию.
И GPL совсем не запрещает брать деньги за софт.

Оракл

Вот-вот, передай этим говнюкам привет за смерть BerkleyDB, которую из BSD они сделали дуальной GPL и коммерческой. GPL, чтобы никто коммерческого софта не делал на ней. Они прекрасно знают правило «Никакого GPL в коммерческой разработке» и на этом зарабатывают деньги.

Кстати, я что-то не вижу — 1.85 в отдельный продукт никто не оформил?
Понятно, что по фичам оно не очень современно, и новые конкуренты есть, и sqlite его кроет как бык овцу (кроме затрат на парсинг SQL), но как твёрдая база вполне бы подошло (и можно было бы начать параллельное развитие). Или там кроме лицензии есть ещё какие-то заморочки?

И ещё — очень похожая история с kyotocabinet vs. tokyocabinet. С какого-то момента все пытаются защититься... как-то это смущает. Как бы sqlite туда не перетекло...

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

Достаточно прочитать текст лицензии, чтобы понять, что это не так

Да, я уже почитал и как раз хотел удалить коммент 🙂. Его можно использовать на сервере не открывая код сервиса при этом. Несколько лет прошло с момента, когда прошлый раз этим интересовался.

Достаточно прочитать текст лицензии, чтобы понять

Если бы это было так, то интернет не был бы забит подобными вопросами 😉.

Или «Немножко текст по-дебильному написан.»

Если не нужен анализ лицензии в полном юридическом смысле, то можно ориентироваться на user-friendly аннотации к open source licenses, навроде choosealicense.com/licenses
(иначе нужно говорить о много большем количестве вещей, начиная с юрисдикций и происхождения компании, заинтересованной вопросом).

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

Касательно GPLv3:
1. как уже написано в разных комментариях тут, в зависимости от интеграции этого отдельного модуля — действие лицензии может распространятся как на всю программу, или же только на этот конкретный модуль
2. об использовании кода под GPLv3 необходимо упомянуть при распространении конечного продукта (в том виде, в котором возможно — документ приложенный к дистрибутиву ли, пункт в меню с показом этого документа, и так далее). Примеры, Skype — Third party notices, Chrome — chrome://credits/ (в адресной строке), Firefox — about:license (в адресной строке) и тому подобное)
3. публикация исходного кода модуля (или приложения в целом) приветствуется, но необязательна до момента запроса (то есть если кто-то прочитает, что приложение использует код под GPLv3 и не найдет исходный код, он может написать авторам и попросить его предоставить). Именно поэтому, публикация является хорошим тоном, но не обязательным требованием.
4. лицензия никак не ограничивает коммерческое использование программы, по любой известной модели

Питання лише чи є той код у публічній частині продукту. Тут правильно вже писали про модуль.

Але в більшості випадків код використовується не на клієнтській частині з вільним доступом. Фізично обмежувати коло доступу до коду в цілому ніхто не забороняє. Тобто в тебе не виникає обов′язку публікації чи реєстрації, а від так і наслідки доведення де-юре порушення ліцензії неможливі. Формально ти відкриваєш код всієї програми своєму замовнику, а що він із тим робить — то вже його справа, твоя справа йому про це повідомити.

Якщо це ваш власний продукт — зазвичай автори коду легко дадуть тобі окрему ліцензію на використання як тобі треба (не безкоштовно, але й не дорого). Якщо це тільки не код жирних корпорацій. Тобто допоки продукт маленький — користуєш через модуль, якщо раптом вистрілить і буде бажання сховати код — домовися з автором на окрему ліцензію. Прайс насамперед залежить від того, чи використовуєш ти код в своєму одному продукті, чи фактично перепродаєш для створення інших продуктів.

Рекомендація — поглянь на Скайп, які халявні модулі користують вони (це публічна інфа), і як це виглядає в продукті, інсталяції, та угоді користувача.

Дякую за підказки, обов’язково подивлюсь як це в Скайпі виглядає.

потрібно відкривати весь код.

Як альтернатива — можна розбити проект на два окремі виконувані модулі, які спілкуються через якийсь механізм IPC: один основна программа, другий «обгортка» навколо GPL-коду. Тоді відкривати можна лише «обгортку».

Якщо у вас закрита система (своє залізо + прошивка), то GPLv3 накладає ще деякі обмеження, окрім відкриття коду: ви маєте надати доступ до внутрощів системи. Це не обходиться ніяк.

Як альтернатива — можна розбити проект на два окремі виконувані модулі, які спілкуються через якийсь механізм IPC: один основна программа, другий «обгортка» навколо GPL-коду. Тоді відкривати можна лише «обгортку».

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

Дуже дякую за Ваші коментарі, в мене задача не практична, а навчальна (поки що :)). В цій задачі в мене дано: існує програма і один з її НЕВІД’’ЄМНИХ модулів написаний за допомогою коду під ліцензією GPL. Задача: визначити чи є ризики для комерціалізації цього продукту.

В такому випадку потрібно опублікувати код, але зробити так, щоб було дуже незручно цей проект зібрати. Або він не працював без сервера.

А чи обовязково публікувати код заздалегіть? Чи це необхідно робити лише на вимогу?

Залежно того, наскільки контора цінує взаємодію з суспільством (PR). Якщо одразу опублікувати — позитивний ПР. Якщо після суду — негативний.
Ще рання публікація може знайти зацікавлених розробників, частнина з яких буде допомагати на громадських засадах, а частину можна до себе затягнути в команду.

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

визначити чи є ризики для комерціалізації цього продукту.

это больше зависит от самого продукта, чем от лицензии.
Например Red Hat Enterprise Linux вполне успешно коммерциализирован,несмотря на GPL

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

Не зовсім. Якщо навіть система не може функціонувати без модуля, але його використання є простий exec() - основна программа не підпадає під GPL. ffmpeg, наприклад, часто пакують як .exe в різні GUI відео-кодери/конвертери.

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

www.gnu.org/...​pl-faq.en.html#GPLPlugins

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

en.wikipedia.org/...​iki/GPL_linking_exception

В общем советов несколько — давайте больше информации, т.к. разговор ни о чём, читайте текст лицензии внимательно буква за буквой, ибо часто можно увидеть GPL linking exception во многих продуктах и он не в тексте базовой лицензии, а в остальной документации.

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

да

Подписаться на комментарии