Почему FreeBSD обесценивает GCC в пользу Clang /LLVM?

Итак, я занимался серфингом в сети и наткнулся на эту статью . Он в основном утверждает, что FreeBSD , начиная с версии 10 и выше, будет обесцениваться GCC в пользу Clang /LLVM .

Из того, что я видел в сети до сих пор, Clang /LLVM - довольно амбициозный проект, но в терминах надежности он не может соответствовать GCC .

Существуют ли какие-либо технические причины, по которым FreeBSD выбирает LLVM как свою инфраструктуру компилятора, или все дело сводится к вечным лицензиям GNU /GPL и BSD?

Этот вопрос (как-то) релевантную информацию об использовании GCC в FreeBSD

238 голосов | спросил NlightNFotis 4 +04002012-10-04T18:30:22+04:00312012bEurope/MoscowThu, 04 Oct 2012 18:30:22 +0400 2012, 18:30:22

4 ответа


358

Сводка: Основная причина перехода из 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.

ответил ire_and_curses 5 +04002012-10-05T04:19:04+04:00312012bEurope/MoscowFri, 05 Oct 2012 04:19:04 +0400 2012, 04:19:04
38

Можно подумать, что FreeBSD в настоящее время использует GCC 4.2.1 в качестве в ответе ire_and_curses , таким образом, сравнения производительности не равны 4.5 или даже 4.6 не имеют отношения к проекту. Поэтому вопросы, которые вы должны задать, следующие:

  1. Каковы преимущества производительности нового Clang и старого GCC, который использует проект?

  2. Как те же двоичные файлы, скомпилированные в GCC 4.2.1, сравниваются с новым Clang?

  

Из-за перехода GCC на GPL v3, FreeBSD был вынужден продолжать использовать GCC 4.2.1 (GPL v2), который был выпущен еще в 2007 году и теперь значительно устарел.

Если Clang отстает от текущего GCC, но все еще на несколько лет опережает реализованный GCC в проекте, тогда их решение эволюционировать хорошо обосновано и действительно вдохновлено.

ответил Mikel King 9 52012vEurope/Moscow11bEurope/MoscowFri, 09 Nov 2012 19:46:32 +0400 2012, 19:46:32
17

Несмотря на то, что 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 лицензированного программного обеспечения».

ответил Eric 17 Jpm1000000pmThu, 17 Jan 2013 15:51:57 +040013 2013, 15:51:57
7

Я не эксперт, но я понимаю, что Clang /LLVM использует меньше ресурсов, чем GCC, и быстрее.

http://clang.llvm.org/features.html#performance

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

ответил EightBitTony 4 +04002012-10-04T18:48:45+04:00312012bEurope/MoscowThu, 04 Oct 2012 18:48:45 +0400 2012, 18:48:45

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132