Обертка GUI вокруг приложения CLI GPL, действительно ли это - производная? [закрытый]

Другой подход:

val mapA = mapOf("Emergency" to "112", "Fire department" to "101", "Police" to "102")
val mapB = mapOf("Emergency" to "911", "Police" to "102")

val result = mapA.toMutableMap()
mapB.forEach {
    var value = result[it.key]
    value = if (value == null || value == it.value) it.value else value + ", ${it.value}"
    result[it.key] = value
}

Или с использованием инфиксной функции расширения :

infix fun Map<String, String>.mergeWith(anotherMap: Map<String, String>): Map<String, String> {
    val result = this.toMutableMap()
    anotherMap.forEach {
        var value = result[it.key]
        value = if (value == null || value == it.value) it.value else value + ", ${it.value}"
        result[it.key] = value
    }
    return result
}

val result = mapA mergeWith mapB
5
задан hhafez 25 December 2008 в 01:30
поделиться

2 ответа

IANAL. Заключение в кавычки простого раздела агрегирования FAQ GPL (шахта акцента):

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

Где строка между двумя отдельными программами, и одна программа с двумя частями? Это - легальный вопрос, который в конечном счете судит, решит. Мы полагаем, что надлежащий критерий зависит оба от механизма коммуникации (должностное лицо, каналы, rpc, вызовы функции в общем адресном пространстве, и т.д.) и семантика коммуникации (какими видами информации обмениваются).

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

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

Другой вопрос от FAQ, который касается этого, "Если программа, выпущенная под GPL, использует плагины, что является требованиями для лицензий плагина":

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

..

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

8
ответ дан 13 December 2019 в 22:18
поделиться

IANAL, но я вполне уверен, что, если Вы не связываете код GPL со своим кодом и просто используете CLI, Вы кодируете, не затронут GPL. Только обязательство необходимо распределить источник кода GPL.

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

2
ответ дан 13 December 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: