Почему FreeBSD обесценивает GCC в пользу Clang /LLVM?
Итак, я занимался серфингом в сети и наткнулся на эту статью . Он в основном утверждает, что FreeBSD , начиная с версии 10 и выше, будет обесцениваться GCC в пользу Clang /LLVM .
Из того, что я видел в сети до сих пор, Clang /LLVM - довольно амбициозный проект, но в терминах надежности он не может соответствовать GCC .
Существуют ли какие-либо технические причины, по которым FreeBSD выбирает LLVM как свою инфраструктуру компилятора, или все дело сводится к вечным лицензиям GNU /GPL и BSD?
Этот вопрос (как-то) релевантную информацию об использовании GCC в FreeBSD
4 ответа
Сводка: Основная причина перехода из GCC to Clang - это несовместимость GCC GPL v3 с целями проекта FreeBSD . Существуют также политические проблемы, связанные с корпоративными инвестициями, а также с требованиями пользователей. Наконец, ожидаются технические преимущества, связанные с соблюдением стандартов и простотой отладки. Улучшения производительности в реальном мире при компиляции и исполнении зависят от кода и являются спорными; случаи могут быть сделаны для обоих компиляторов.
FreeBSD и GPL: FreeBSD имеет непростые отношения с GPL. Сторонники лицензии BSD считают, что действительно бесплатное программное обеспечение никаких ограничений использования . Сторонники GPL считают, что необходимы ограничения для защиты свободы программного обеспечения и, в частности, что способность создавать несвободные программное обеспечение из бесплатного программного обеспечения является несправедливой формой власти , а не свободой. Проект FreeBSD, где это возможно, пытается избегать использования GPL :
Из-за дополнительных сложностей, которые могут развиваться в коммерческих использование программного обеспечения GPL, однако мы стараемся заменить такое программное обеспечение с представлениями по более расслабленной лицензии FreeBSD всякий раз возможно.
FreeBSD и GPL v3: GPL v3 явно запрещает так называемые " называемый Tivoisation кода, лазейка в GPL v2 , который позволил аппаратным ограничениям запретить другим пользователям модификацию программного обеспечения. Закрытие этой лазейки было неприемлемым шагом для многих в сообществе FreeBSD:
Поставщики устройств, в частности, могут потерять больше всего, если теперь в настоящее время распространяется программное обеспечение, лицензированное в настоящее время под лицензией GPLv2. новая лицензия. У них больше не будет возможности использовать GPLv3 программного обеспечения и ограничить модификацию программного обеспечения, установленного на их аппаратное обеспечение ... Короче говоря, существует большой база пользователей OpenSource, которые внезапно очень заинтересованы в понимая альтернативы лицензионному программному обеспечению GPL.
Из-за перехода GCC на GPL v3 FreeBSD был вынужден продолжать использовать GCC 4.2.1 (GPL v2), который был выпущенный еще в 2007 году , и в настоящее время значительно устарел. Тот факт, что FreeBSD не перешел на использование более современных версий GCC, даже с дополнительными головными болями в обслуживании старых компиляторов и исправлений для резервного копирования, дает некоторое представление о силе требования избегать GPL v3. Компилятор C является основным компонентом базы FreeBSD, а « финансирование и работы по развитию от корпораций. Хотя степень, в которой FreeBSD финансируется или разрабатывается Apple, нелегко обнаружить, существует значительное перекрытие, потому что Apple Darwin OS использует существенный BSD-исходный код ядра . Кроме того, сам Clang был первоначально проектом Apple, прежде чем open-sourced в 2007 году . Поскольку корпоративные ресурсы являются ключевым фактором для проекта FreeBSD, для удовлетворения потребностей спонсоров, вероятно, значительного реального -world .
Пользовательская база: FreeBSD является привлекательным вариантом с открытым исходным кодом для многих компаний, потому что лицензирование является простым, неограниченным и вряд ли приведет к судебным искам. С появлением GPL v3 и нового анти-Tivoisation положений , было предложено, чтобы там это ускорение,тенденция к более разрешительным лицензиям . Поскольку воспринимаемое преимущество FreeBSD для коммерческих объектов заключается в его разрешительной лицензии, все большее давление со стороны корпоративной пользовательской базы оказывает отказ от GCC и вообще GPL.
Проблемы с GCC: Помимо лицензии, использование GCC имеет некоторые воспринимаемые проблемы . GCC не полностью соответствует стандартам и имеет множество расширений, не найденных в стандарте ISO C . На более чем 3 миллионах строк кода это также « один из самых сложных и бесплатных /открытых программных проектов ». Эта сложность делает модификацию кода на уровне дистрибутива сложной задачей.
Технические преимущества: У Clang есть некоторые технические преимущества по сравнению с GCC . Наиболее примечательными являются гораздо более информативные сообщения об ошибках и неявно спроектированный API для инструментов IDE, рефакторинга и анализа исходного кода. Хотя сайт Clang представляет графики , указывающие на гораздо более эффективную компиляцию и использование памяти, результаты реального мира достоверная переменная и в целом соответствует производительности GCC. В общем, созданные в Clang двоичные файлы работают медленнее , чем эквивалент GCC двоичные файлы:
При использовании LLVM быстрее при создании кода, чем GCC ... в большинстве экземпляры построенных двоичных файлов GCC 4.5 выполнялись лучше, чем LLVM-GCC или Clang ... в остальных тестах производительность была либо близко к GCC, либо позади. В некоторых тестах производительность созданных Clang двоичных файлов была просто ужасной.
Вывод: Очень маловероятно, что эффективность компиляции станет значительным стимулом для существенного риска переноса большого проекта, такого как FreeBSD, на совершенно новую компиляцию компилятора, особенно в случае отсутствия бинарной производительности. Однако ситуация не была реальной. Учитывая выбор между 1) запуском устаревшего GCC, 2) переходом на современный GCC и принуждением к использованию лицензии, несовместимой с целями проекта, или 3) перехода к стабильному лицензированному BSD компилятору, решение вероятно, был неизбежен. Имейте в виду, что это относится только к базовой системе и поддерживает распределение; ничто не мешает пользователю устанавливать и использовать современный GCC в своем блоке FreeBSD.
Можно подумать, что FreeBSD в настоящее время использует GCC 4.2.1 в качестве в ответе ire_and_curses , таким образом, сравнения производительности не равны 4.5 или даже 4.6 не имеют отношения к проекту. Поэтому вопросы, которые вы должны задать, следующие:
-
Каковы преимущества производительности нового Clang и старого GCC, который использует проект?
-
Как те же двоичные файлы, скомпилированные в GCC 4.2.1, сравниваются с новым Clang?
Из-за перехода GCC на GPL v3, FreeBSD был вынужден продолжать использовать GCC 4.2.1 (GPL v2), который был выпущен еще в 2007 году и теперь значительно устарел.
Если Clang отстает от текущего GCC, но все еще на несколько лет опережает реализованный GCC в проекте, тогда их решение эволюционировать хорошо обосновано и действительно вдохновлено.
Несмотря на то, что GCC является GPLv3, результирующие двоичные файлы, созданные GCC, никогда не имели ограничений лицензии. В яслях вы можете использовать GCC для создания программного обеспечения, которое подпадает под нужную вам лицензию. Даже библиотека C, которая поставляется с GCC и которая включена в двоичный файл, не имеет лицензии. http://www.gnu.org/licenses/gcc-exception-faq.html
Раздел 2 GNU GPLv3:
У вас есть разрешение на распространение произведения Целевого кода, сформированного объединяя библиотеку времени выполнения с независимыми модулями, даже если такие распространение в противном случае нарушало бы условия GPLv3, при условии, что весь целевой код был сформирован с помощью подходящих процессов компиляции. Вы может затем передать такую комбинацию в соответствии с выбранными вами условиями , в соответствии с лицензированием независимых модулей.
â € œEligibleâ € означает, что компиляция не включает как GCC, так и GPL-несовместимое программное обеспечение. Это не ограничение: BSD-лицензированное программное обеспечение может использоваться в процессе сборки с использованием GNU GCC.
Как вы можете видеть, вопреки тому, что было сказано выше, нет причины REAL , связанной с лицензией, чтобы отойти от GCC, поскольку нет никакой несовместимости с использованием GCC внутри FreeBSD.
Настоящая причина этого изменения носит политический и оппортунистический характер:
- BSD имеет собственное лицензирование, которое философски конкурирует с публичной лицензией GNU (как указано выше * ire_and_curses *),
- CLANG - новый компилятор, не являющийся GPL, инициированный спонсором FreeBSD, который представляется технически эквивалентным GCC-лицензированному GCC (как описано выше * ire_and_curses *).
Эти факты создают возможность для FreeBSD уйти от GCC и избавиться от нее: на самом деле они не являются юридически принудительными, поскольку они вполне могут использовать GCC для создания бесплатного или BSD-лицензированного программного обеспечения, но они хотят придерживаться философии «все BSD лицензированного программного обеспечения».
Я не эксперт, но я понимаю, что Clang /LLVM использует меньше ресурсов, чем GCC, и быстрее.
http://clang.llvm.org/features.html#performance
Если вы используете среду, в которой вам нужно много строить, много раз, эта производительность может превратиться в реальную экономию энергии и времени. Если это реально.