LINUX.ORG.RU

Сообщения sidtver

 

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

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

 , , , ,

sidtver
()

Clang vs Gcc: две компиляторные системы в одном дистрибутиве

По моим представлениям длительное время clang/llvm использовал

  • binutils
  • glibc/libstdc++

из компилятора gcc (на стадии dragonegg еще и фронтенд языка C/C++). Но при этом разработчики clang/llvm последовательно двигаются к достижению полной замкнутости. Похоже они достигли независимости по binutils, libc++. Активно пилят свою версию libc. Что касается взгляда со стороны, то между разработчиками gcc и clang нет стремления к поддержанию совместимости своих систем (стандарт C/C++ не гарантирует совместимости бинарников библиотек и/или хедеров). Соответственно возникает вопрос, а что будет с linux/unix-дистрибутивами после достижения полной независимости в clang/llvm от gcc (glibc по сути последний мостик)?

Уточню суть вопроса. Пусть есть дистрибутив (Ubuntu/Mint/…), который собран gcc. Можно закачивать пакеты, собранные разработчиками дистрибутива. Допустим есть приложение X, которое собирается с помощью clang. Приложение X зависит от библиотеки Y (и еще большего количества других библиотек). Все требуемые библиотеки уже установлены в дистрибутиве, но собраны с помощью gcc. При сборке X clang соберет ее с хедерами и слинкует ее с libc/libstdc++. Если X будет слинкована с установленной Y, то при запуске X, получается, что X должна использовать func (какую-нибудь fopen или std::vector()) из libc/libstdc++, а Y должна использовать func из glibc/libstdc++. Но по текущим правилам линковки глобальный символ func будет взят из одной библиотеки. Но независимо развиваемые библиотеки не будут совместимы и взаимозаменяемыми. Более сложная ситуация, когда хедеры Y будут просто по-разному скомпилированы clang и gcc, в том числе из-за разных хедеров libc++ и libstdc++.

Тогда получается, что для компиляции X нужна Y также собранная с помощью clang? В отдельных случаях можно заморочиться и собрать Y в ручную. Но собрать все такие библиотеки - это по сути сделать кусочек дистрибутива, собранного clang’ом (а у некоторых проектов системы сборки могут быть сложными). Поэтому хотелось бы точно также скачать пакет с собранной версией Y. Значит ли это, что дистрибутив должен теперь быть собран в двух экземплярах - каждый пакет с помощью gcc и каждый пакет с помощью clang?

 , , ,

sidtver
()

RSS подписка на новые темы