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