GCC는 LLVM이 등장하기 전까지 오픈 소스 세계를 지배했던 절대강자이자, 현재까지도 리눅스 커널을 비롯한 수많은 시스템의 근간을 이루고 있는 컴파일러에요.
GCC는 1987년 리처드 스톨먼(Richard Stallman)이 GNU 프로젝트의 일환으로 만든 컴파일러에요.
GCC는 지난 수십 년간 표준 컴파일러로 군림하며 “가장 신뢰할 수 있고, 거의 모든 하드웨어 아키텍처를 지원하는 컴파일러” 라는 명성을 쌓아왔습니다.
LLVM이 각 단계를 모듈화하여 떼었다 붙였다 할 수 있는 ‘레고 블록’ 같다면, GCC는 거대한 ‘한 덩어리’에 가까워요.
과거 Xcode 도 GCC를 사용했어요! 하지만 Apple 은 다음과 같은 치명적인 한계에 부딪혔어요.
Objective-C의 복잡한 문법을 GCC로 처리하기엔 너무 무거웠고, 컴파일 속도가 개발자들의 인내심을 시험할 정도로 느려졌어요.
개발자가 코드를 칠 때 실시간으로 에러를 잡아주는 ‘Syntax Highlighting’이나 ‘Code Completion’ 기능이 필요했어요. 하지만 GCC는 설계상 컴파일러 내부의 정보를 외부 도구(Xcode)에 실시간으로 공유하기가 매우 까다로웠어요.
GCC의 라이선스인 GPL(General Public License)은 코드를 수정하면 수정한 코드를 공개해야 할 의무가 생기는 경우가 많아요. 기업인 Apple 입장에서는 자사의 최적화 기술이나 보안 관련 코드를 강제로 공개해야하는 상황이 부담스러웠어요. (반면 LLVM은 훨씬 자유로운 Apache 2.0/MIT 라이선스를 따르고 있어요.)
| 구분 | GCC | LLVM (+ Clang) |
|---|---|---|
| 철학 | 하나의 거대한 완성된 도구 | 조립 가능한 라이브러리 형태 |
| 확장성 | 새로운 언어/아키텍처 추가가 어려움 | 매우 쉬움 (Swift 탄생의 기반) |
| 컴파일 속도 | 상대적으로 느림 | 최적화 단계가 효율적이고 빠름 |
| 에러 메시지 | 난해하고 불친절함 | 개발자가 이해하기 쉽고 정확함 |
| 주요 사용자 | 리눅스 커널, 임베디드 시스템 | Apple, Google(Android), Rust 등 |