Исключение для библиотек времени исполнения GCC или почему в Clang до сих пор отсутствует поддержка OpenMP
Используете GCC в проекте с закрытым исходным кодом? Применяете OpenMP? Вы же в курсе, что библиотека libgomp, с которой компонуются все OpenMP программы, распространяется на условиях GPLv3? Будьте так добры, откройте ваши исходники…
К счастью, ничего не нужно открывать, разве что банку с пивом. Действительно, «обвес» времени исполнения GCC, например libstdc++ или libgomp имеет GPL лицензию, однако существует специальное исключение для библиотек времени исполнения GCC. Оно разрешает использование перечисленных в FAQ библиотек в коммерческих приложениях с небольшой оговоркой: они должны собираться только GPL-совместимым компилятором (в т.ч. GCC). Другими словами, компоновка с libgomp при сборке проприетарным компилятором является нарушением GPL.
У Clang/LLVM BSD-like лицензия, совместимая с GPL, однако внедрение libgomp автоматически усиливает ее до GPL и препятствует созданию закрытых форков (за которые большие компании так любят этот стек технологий). Получается, что из-за оговорки про GPL в Clang до сих пор отсутствует OpenMP, ведь добавление такой поддержки означало бы создание runtime с нуля. Впрочем, в этой ситуации подсуетился Intel, вовремя открыв исходники своей реализации OpenMP под лицензией BSD, совместимой с лицензией Clang, и почти добавил поддержку OpenMP в LLVM. К сожалению, всё равно остаются вопросы, к примеру, Intel OpenMP всю жизнь работал под x86(-64), и не ясно как у него обстоят дела с ARM.
Также из-за исключения на библиотеки GCC в Clang/LLVM пришлось писать с нуля свой libstdc++ (aka libc++) и libgcov (aka llvm-cov — средство для анализа покрытия кода тестами).
Стоит быть морально готовым к отмене этого исключения, хоть и маловероятной. GCC уже однажды перешел с GPLv2 на GPLv3, в результате чего Apple сменила официальный компилятор на Clang и стала его активно улучшать, взяв в штат главного разработчика Криса Латтнера. В самом тексте исключения написано, что это вынужденная мера, потому что «запрет, вероятно, приведет к последствиям, негативным для нас самих, и потому что если бы небольшие библиотеки использовались для того, чтобы ограничить применение GCC, это выглядело бы как хвост, виляющий собакой». Быть может, когда все крупные компании вслед за Apple променяют GCC на Clang, последствия перестанут быть такими негативными…