CBSD / LLVM을 선호하여 FreeBSD가 GCC를 더 이상 사용하지 않는 이유는 무엇입니까?


241

그래서 나는 인터넷을 서핑 하고이 기사를 우연히 발견했다 . 기본적으로 버전 10 이상부터 FreeBSDClang / LLVM 을 위해 GCC 를 더 이상 사용하지 않을 것이라고 명시하고 있습니다.

내가 지금까지 인터넷에서 본 것에서 Clang / LLVM 은 상당히 야심 찬 프로젝트이지만 신뢰성 측면에서 GCC 와 일치 할 수 없습니다 .

FreeBSD가 컴파일러 인프라로 LLVM을 선택 하는 기술적 이유 가 있습니까? 아니면 모든 것이 영원한 GNU / GPL과 BSD 라이센스로 요약됩니까?

이 질문 에는 FreeBSD 에서 의 GCC 사용법에 관한 정보가 있습니다.

답변:


361

요약 : GCC 에서 Clang으로 전환하는 주된 이유 는 FreeBSD 프로젝트목표 와 GCC의 GPL v3 라이센스가 호환되지 않기 때문 입니다 . 기업 투자 및 사용자 기반 요구 사항과 관련된 정치적 문제도 있습니다. 마지막으로 표준 준수 및 디버깅 용이성과 관련된 기술적 이점이 있습니다. 컴파일 및 실행의 실제 성능 향상은 코드별로 다르며 논쟁의 여지가 있습니다. 두 컴파일러 모두에 대해 사례를 만들 수 있습니다.

FreeBSD와 GPL : FreeBSDGPL과 불안한 관계를 맺고 있습니다. BSD 라이센스 옹호자들은 진정한 자유 소프트웨어에는 사용 제한없다고 생각합니다 . GPL 지지자들은 소프트웨어의 자유를 보호하기 위해 제한이 필요 하며, 특히 자유 소프트웨어로부터 자유 소프트웨어가 아닌 소프트웨어를 만드는 능력은 자유가 아니라 부당한 형태의 힘 이라고 생각합니다. 가능한 경우 FreeBSD 프로젝트 는 GPL 사용 하려고 시도합니다 .

그러나 GPL 소프트웨어의 상업적 사용에서 발전 할 수있는 추가적인 복잡성 때문에, 우리는 가능하면보다 편안한 FreeBSD 라이센스 하에서 그러한 소프트웨어를 제출물로 대체하려고 노력합니다.

FreeBSD의와 GPL v3에는 : GPL v3는 명시 적으로 소위 금지 티 보이 제이션 코드는에 허점 GPL v2의 사용자가, 그렇지 않으면 법적 소프트웨어 수정을 허용하는 하드웨어 제한 할 수 있었다. 이 허점을 막는 것은 FreeBSD 커뮤니티의 많은 사람들 에게 받아 들일 수없는 단계 였습니다.

오늘날 GPLv2에 따라 현재 라이센스가 부여 된 대규모 소프트웨어가 새 라이센스로 마이그레이션되면 어플라이언스 공급 업체가 가장 많이 손실됩니다. 더 이상 GPLv3 소프트웨어를 자유롭게 사용할 수 없으며 하드웨어에 설치된 소프트웨어의 수정을 제한 할 수 없습니다 ... 간단히 말해, GPL 라이센스 소프트웨어의 대안을 이해하는 데 갑자기 관심이있는 대규모 오픈 소스 소비자가 있습니다.

GCC가 GPL v3으로 이동함에 따라 FreeBSD는 GCC 4.2.1 (GPL v2)을 계속 사용해야 했으며 2007 년에 다시 출시되었으며 현재는 상당히 구식입니다. 이전 컴파일러를 실행하고 백 포트 수정을 실행해야하는 추가 유지 관리 문제로 인해 FreeBSD가 더 최신 버전의 GCC를 사용하지 않았다는 사실은 GPL v3을 피하기위한 요구 사항의 강도에 대한 아이디어를 제공합니다. C 컴파일러는 FreeBSD 기반의 주요 구성 요소이며 " FreeBSD 10의 (가칭) 목표 중 하나는 GPL이없는 기본 시스템 입니다."

기업 투자 : 많은 주요 오픈 소스 프로젝트와 마찬가지로 FreeBSD는 기업으로부터 자금개발 작업 을 받습니다 . Apple이 FreeBSD에 자금을 지원하거나 개발 한 범위는 쉽게 알 수 없지만 Apple의 Darwin OS 는 상당한 BSD에서 시작된 커널 코드를 사용 하기 때문에 상당한 중복 이 있습니다 . 또한 Clang 자체는 2007 년오픈 소스 화 되기 전에 원래 사내 Apple 프로젝트 였습니다. 기업 자원은 FreeBSD 프로젝트의 핵심 요소이기 때문에 스폰서 요구를 충족시키는 것이 실제로 중요한 드라이버 일 것 입니다.

Userbase : FreeBSD는 라이센스가 간단하고 제한이 없으며 소송을 유발할 가능성이 없기 때문에 많은 회사에서 매력적인 오픈 소스 옵션입니다. GPL v3의 출시와 새로운 불법 금지 규정이 시행됨에 따라 보다 허가 된 라이센스에 대한 공급 업체 중심가속화 추세 가 제시되었습니다 . 상업용 엔티티에 대한 FreeBSD의 인식 된 이점은 허용 라이센스에 있기 때문에, 기업 사용자층이 GCC 및 GPL로부터 멀어 지도록 압력을 가하고 있습니다.

GCC 관련 문제 : 라이센스와 별도로 GCC 사용에는 몇 가지 인식 된 문제가 있습니다 . GCC는 완전 표준을 준수 하지 않으며 ISO 표준 C에는없는 확장 기능많이 있습니다 . 3 백만 라인 이상의 코드는 " 가장 복잡하고 무료 / 오픈 소스 소프트웨어 프로젝트 중 하나 "이기도 합니다. 이러한 복잡성으로 인해 배포 수준 코드 수정이 까다로운 작업이됩니다.

기술적 장점 : Clang은 GCC에 비해 기술적 이점 이 있습니다 . 가장 주목할만한 것은 보다 유익한 오류 메시지 와 IDE, 리팩토링 및 소스 코드 분석 도구를 위해 명시 적으로 설계된 API 입니다. Clang 웹 사이트 훨씬 더 효율적인 컴파일 및 메모리 사용을 나타내는 플롯을 제공 하지만 실제 결과는 상당히 다양 하며 GCC 성능에 따라 크게 다릅니다. 일반적으로 Clang 생성 바이너리 는 동등한 GCC 바이너리 보다 느리게 실행됩니다 .

LLVM을 사용하는 것이 GCC보다 빌드 코드에서 빠르지 만 ... 대부분의 경우 GCC 4.5 빌드 바이너리는 LLVM-GCC 또는 Clang보다 성능이 우수했습니다. 나머지 테스트에서 성능은 GCC와 비슷하거나 뒤에. 일부 테스트에서 Clang 생성 바이너리의 성능은 단순히 끔찍했습니다.

결론 : 특히 바이너리 성능이 부족할 때 컴파일 효율성이 FreeBSD와 같은 큰 프로젝트를 완전히 새로운 컴파일러 툴체인으로 옮기는 실질적인 위험을 감수 할 가능성이 거의 없습니다. 그러나 상황은 실제로 열악하지 않았습니다. 1) 오래된 GCC 실행, 2) 최신 GCC로 이동 및 프로젝트 목표와 호환되지 않는 라이센스를 사용하도록 강제 또는 3) 안정적인 BSD 라이센스 컴파일러로 이동, 결정 중 하나를 선택할 수 있음 아마도 피할 수 없었을 것입니다. 이것은 기본 시스템에만 적용되며 배포판의 지원에 유의하십시오. 사용자가 FreeBSD 상자 자체에 최신 GCC를 설치하고 사용하는 것을 막을 수있는 것은 없습니다.


4
인용 한 벤치 마크는 이전 버전의 Clang에서 가져온 것입니다. 최신 버전의 벤치 마크가 최신 버전 인 것 같습니다. 간단한 프로그램에 대한 저 자신의 연구에 따르면 Clang 3.0은 GCC 4.6보다 2 % 빠르지 만 GCC는 스레드 버전에서 20 % 더 빠릅니다. phoronix.com/scan.php?page=news_item&px=MTA5Nzc 는 최신 Phoronix 벤치 마크입니다.
Sean

6
"GCC는 표준을 완전히 준수하지 않습니다": 컴파일러 스위치를 사용하여 지정된 표준을 준수 할 수 없습니까?
Giorgio

4
우선 Phoronix 벤치 마크를 너무 많이 읽지 않거나 전혀 읽지 마십시오. 둘째, 표준을 명시 적으로 지정하지 않으면 GCC가 기본적으로 표준을 완전히 준수하지 않는 것이 사실입니다. GNU 확장을 활성화하지 않은 경우 Clang을 사용하는 이상한 이유처럼 보일 것입니다. 또한 Clang이 GCC를 대체 할 수있는 드롭으로 사용할 수 있도록 노력하기 때문에 가장 일반적으로 사용되는 GNU 확장을 구현하고 있습니다.
kyrias

1
@Giorgio : 아니요 . 예를 들어 gcc.gnu.org/c99status.html 을 참조하십시오. 이는 C99 (지금은 14 살)입니다. 또한 gcc.gnu.org/onlinedocs/libstdc++/manual/status.html-clang 은 두 가지 모두에 대해 더 나은 지원을 제공합니다.
Tim Čas

4
@Demizey 나는 Phoronix를 변호하지는 않지만, 무언가를 기각하려는 경우 최소한 유효한 이유를 제공해야합니다.
마리오

38

고려해야 할 한 가지는 FreeBSD가 현재 ire_and_curses 답변에 명시된 GCC 4.2.1을 사용하고 있기 때문에 성능 비교가 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보다 몇 년 앞서도 진행된다면 진화에 대한 그들의 결정은 잘 보증되고 진정으로 영감을 얻습니다.


19

GCC가 GPLv3이지만 GCC에서 생성 된 결과 바이너리에는 라이센스 제한이 없습니다. 분명히 GCC를 사용하여 원하는 라이센스에 해당하는 소프트웨어를 빌드 할 수 있습니다. GCC와 함께 제공되고 바이너리에 포함 된 C 라이브러리도 라이센스가 없습니다. http://www.gnu.org/licenses/gcc-exception-faq.html

GNU GPLv3의 섹션 2 :

모든 대상 코드가 적격 컴파일 프로세스에 의해 생성 된 경우, 해당 전파가 GPLv3의 조건을 위반하는 경우에도 런타임 라이브러리를 독립 모듈과 결합하여 형성된 대상 코드 작업을 전파 할 권한이 있습니다. 그런 다음 독립 모듈의 라이센스에 따라 선택한 조건에 따라 이러한 조합을 전달할 수 있습니다 .

"적격"은 컴파일에 GCC 및 GPL 비 호환 소프트웨어가 모두 포함되지 않음을 의미합니다. GNU GCC와 관련된 빌드 프로세스에서 BSD 라이센스 소프트웨어를 사용할 수 있습니다.

위에서 볼 수 있듯이 FreeBSD에서 GCC를 사용하는 것과 호환되지 않기 때문에 GCC에서 멀어져 야하는 REAL 라이센스 관련 이유는 없습니다.

이러한 변화의 주된 이유는 정치적이며 기회 주의적입니다.

  • BSD는 GNU Public 라이센스와 철학적으로 경쟁하는 자체 라이센스를 가지고 있습니다 (위의 * ire_and_curses *).
  • CLANG은 FreeBSD의 스폰서에 의해 시작된 새로운 비 GPL 컴파일러로, GPL 라이센스 GCC와 기술적으로 동등한 것으로 보입니다 (* ire_and_curses *에서 설명).

이러한 사실은 FreeBSD가 GCC에서 멀어지고 그것을 제거 할 수있는 기회를 만듭니다. 실제로 GCC를 사용하여 무료 또는 BSD 라이센스 소프트웨어를 빌드 할 수 있기 때문에 실제로 법적으로 강제되지는 않지만 "모든 BSD 라이센스 소프트웨어"철학.


5
투표를해서 죄송합니다. 불행히도 BSD와 소프트웨어 로우 쇼에 익숙하지 않습니다. BSD가 90 년대 초반에 기존의 휴대용 C 컴파일러 (PCC)에서 GCC로 전환하는 것은 기술적 인 결정이 아닌 정치적 결정이었습니다. Clang은 Apple 프로젝트입니다! PCC로 돌아 가려고하는 OpenBSD에서 생활하기 위해 매일 GCC를 사용하는 사람은 모든 계정에서 잘못되었습니다.
Predrag Punosevac

5
이는 결과 바이너리에 관한 것이 아니라 gcc가 FreeBSD의 일부라는 사실에 관한 것이므로 라이센스 제약이 중요합니다.
sstn

3
프로젝트의 종교에 "No GPLv3"이 표시되면 기술적 인 측면이 사라집니다. 예를 들어 Microsoft 컴파일러를 사용한다고 상상해보십시오.
Thorbjørn Ravn Andersen

3
이것이 바로 지적하는 유일한 대답입니다 license of compiler != license of end product. 컴파일러 라이센스에 대한 불만은 사용자가 라이센스를 이해하지 않는 한 관련이 없을 수 있습니다.
Brandin

6
생성 된 바이너리가 GPLv3에 해당하는지 여부가 아니라 컴파일러 자체를 변경하는 데 GPLv3 호환이 필요한지 여부입니다. 하드웨어 공급 업체는 종종 스톡 컴파일러를 수정하여 하드웨어를 더 잘 사용하거나 독점적 인 방식으로 하드웨어를 활용합니다. 이러한 변경 사항은 사용자 지정 변경이 GPLv3을 준수해야하는 위험을 제거하거나 법적 조치를 취해야합니다. 여기서 중요한 것은 컴파일러의 라이센스입니다.
David Harks

7

나는 전문가는 아니지만 Clang / LLVM은 GCC보다 적은 리소스를 사용하고 더 빠르다는 것을 이해합니다.

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

많은 물건을 여러 번 만들어야하는 환경을 운영하는 경우 성능이 에너지 비용과 시간을 크게 절약 할 수 있습니다. 진짜라면


마이너 .. 추가 반복적 인 컴파일 시간을 단축 할 수있는 도구있다 - ccache.samba.org가 parrallel 컴파일에 대한 명백한 가능성을 신경 쓰지는 링크 시간이 큰 프로젝트에 해결하기 위해 더 열심히하는 경향이 (distcc를 참조)
Rob11311

예, 매우 좋지만 결과적인 이진 코드는 느려집니다. p
rustyx

1
@rustyx는 gcc 4.2와 비교되지 않습니다!
Miles Rout
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.