LINUX.ORG.RU

Допустимо ли использование BSD-библиотеки в исходниках компилятора gcc?

 , , , ,


0

6

Допускает ли лиценция компилятора gcc (GPL3) использование в компиляторе gcc библиотеки с BSD-подобной лицензией? То есть включение в исходные тексты компилятора gcc хедеров BSD-библиотеки и линковка с такой библиотекой? Непосредственно исходные тексты библиотеки не включаются. Подразумевается, что BSD-библиотека используется как обычная пользовательская библиотека типа pthread. При этом так, что у библиотеки сохраняется BSD лицензия.

Нужно тогда исходники компилятора вместе с иходниками BSD библиотеки распространять.

xDShot ★★★★★
()
Последнее исправление: xDShot (всего исправлений: 1)

BSD лицензий несколько. 2 и 3 clause GPL совместимы и конечно же допускают такое использование.

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

BSD это не требует.

GPL требует кода слинкованных библиотек, не считая «системных».

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

Если лицензия компилятора gcc позволяет использование в нем библиотек с BSD-подобной лицензией, то мне интересна следующая схема

libA - standalone, BSD-библиотека

  • содержит описание промежуточного представления IR-A (а-ля llvm-IR)
  • предоставляет интерфейс compileModuleA( IR-A)
  • в момент запуска читает свой конфигурационный файл и загружает динамическую библиотеку с названием и по пути указанном в этом config-файле (dlopen)
  • находит в загруженной библиотеке функцию с именем compileModule (dlsym)
  • вызывает ее и получает в результате вызова найденной функции текст с целевым ассемблером

В компиляторе gcc (форк проекта) добавляется транслятор из GIMPLE-IR в IR-A. Используются хедеры и libA и (динамическая) линковка с libA. С помощью конвертора создается IR-A и с помощью функции compileModuleA получается целевой ассемблер.

Есть закрытая библиотека libB под проприетарной лицензией, которая использует хедеры libA и динамически с ней слинкована. Название с путем установки добавляется в config-файл библиотеки libA.

В итоге libA не знает ничего ни про gcc, ни про libB, libB знает только про libA и не знает ничего про gcc, аналогично gcc знает про libA, но ничего не знает о libB.

gcc libB \ / libA

Библиотека libB умеет компилировать IR-A в целевой ассемблер. Исходники libA и форк-gcc доступны. Исходники libB закрыты.

Будет ли такая схема валидна с точки зрения лицензии компилятора gcc? (Да это что-то типа dragonegg но с бэкендом отличном от llvm.)

sidtver
() автор топика

да. мало того сам gcc собирается с zlib которая под своей пермессивной лицензией. И даже ее исходники присутствуют в тарболе gcc. Да и очень многие gpl-программы без проблем линкуются с bsd кодом

Хотя конечно я не юрист.

DMITRY
()
Ответ на: комментарий от sidtver

Есть закрытая библиотека libB под проприетарной лицензией, которая использует хедеры libA и динамически с ней слинкована.

В случае, если для libA (в составе gcc) начнут слать патчи, придётся просить, чтобы дали согласие на распространение также и под первоначальной BSD лицензией.

gag ★★★★★
()

Вот здесь близкая тема:

https://opensource.stackexchange.com/questions/1479/can-plugins-for-closed-source-software-use-gpld-libraries?rq=1

Из обсуждения похоже следует следующая схема

  1. есть открытая спецификация/стандарт текстового языка программирования IR-A (а-ля llvm-IR)

  2. есть gpl-плагин, который преобразует GIMPLE-IR в текст на IR-A и с помощью vfork/exec вызывает бинарную утилиту toolB

  3. в утилиту toolB по сокету поступает текст с IR-A и по сокету возвращается ассемблер

  4. gpl-плагин, полученный по сокету, ассмеблер вставляет в цепочку компиляции в GCC

В итоге toolB ничего не знает по GCC и gpl-плагин, обратно gpl-плагин не использует хедеры и линковку с toolB, а только exec-вызов. Генерация текста IR-A основана на чтении разработчиком открытой спецификации. Соответственно нет хедеров и API.

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