본문 바로가기

GNU 컴파일러 모음

GNU Compiler Collectionen

C·C++ 등 여러 프로그래밍 언어를 컴퓨터가 실행할 코드로 변환하는 GNU 프로젝트의 컴파일러 모음임. 1987년 GNU C 컴파일러로 첫 베타 버전이 공개됐으며, 이후 지원 언어와 하드웨어의 범위를 넓혀 자유 소프트웨어 개발의 주요 기반이 됨.

13 타임라인
21 관련 링크
GNU 컴파일러 모음

추가 정보

소스 코드와 기계를 이어 주는 기반

GCC는 사람이 작성한 프로그램을 컴퓨터가 실행할 수 있는 코드로 변환하는 컴파일러 모음임. C 컴파일러에서 출발했으나 C++·Fortran·Ada·Go·D·COBOL 등 다양한 언어의 프런트엔드와 관련 라이브러리를 포함하도록 발전함. 언어를 해석하는 부분과 최적화·기계어 생성 기반을 나누어 여러 언어와 하드웨어를 지원함. 편집기나 운영체제 자체와는 구분되는 개발 도구임.

자유 소프트웨어와 공동 개발

GNU 운영체제를 위한 도구로 출발했으며, 사용·연구·수정·재배포의 자유를 보장하는 개발 기반을 지향함. GNU/Linux를 비롯한 여러 환경에서 쓰이고, 개발하는 기계와 다른 기종을 대상으로 코드를 만드는 교차 컴파일도 지원함. 특정 제품 하나보다 여러 소프트웨어와 하드웨어를 연결하는 기반이라는 점이 중요함.

1997년 EGCS의 분기와 1999년 재통합은 기술적 개선만큼 개발 조직과 참여 방식도 중요했음을 보여 줌. 주요 결정은 운영위원회가 맡고, 개별 변경은 유지보수자들의 검토와 시험을 거침. 기업과 개인의 기여가 함께 이루어지는 공동체로, 한 조직이나 개인의 통제를 막으려는 취지가 운영위원회 설립 배경에 포함됨.

최적화의 발전과 호환성의 과제

Tree SSA, 링크 시간 최적화, 벡터화 등의 발전은 프로그램의 의미를 유지하면서 더 효율적인 실행 코드를 만드는 데 목적이 있음. 그러나 새 버전이 모든 프로그램을 일률적으로 빠르게 만드는 것은 아님. 언어 표준의 엄격한 적용, ABI 변화, 지원 중단 등이 기존 코드에 영향을 줄 수 있어 릴리스 문서와 이식 안내를 함께 확인할 필요가 있음. 지원 언어와 표준 준수 수준 역시 버전에 따라 다름.

컴파일러의 라이선스와 결과물의 구분

GCC 자체의 배포 조건과 GCC로 만든 프로그램의 조건은 구분해야 함. 2007년 GPL 버전 3으로의 전환을 예고했고, 2009년에는 실행시간 라이브러리 예외가 정비됨. GCC로 컴파일했다는 이유만으로 모든 결과 프로그램을 GPL로 공개해야 하는 것은 아님. 다만 포함된 라이브러리와 코드, 예외 적용 조건에 따라 구체적인 의무가 달라짐.

지속 가능한 협업을 위한 규칙

2023년 행동강령과 2026년 AI 기여 정책은 기술 프로젝트를 유지하는 사회적·법적 조건을 보여 줌. 특히 AI 정책은 사용 자체의 포괄적 금지가 아니라 제출되는 기여물의 성격과 책임을 구분함. 프로그램의 정확성뿐 아니라 검토 가능한 변경 이력과 인간 기여자의 책임을 중시하는 방향임.

타임라인 13건 · 1987–2026

수록 이벤트 분포 점을 선택하면 해당 이벤트로 이동할 수 있습니다.
1987년 2026년
milestone 13건

GNU C 컴파일러 0.9가 첫 베타 버전으로 공개됨. 컴파일러는 사람이 작성한 소스 코드를 컴퓨터가 실행할 수 있는 형태로 바꾸는 도구이므로, 자유 운영체제를 만들고 유지하는 데 핵심적인 기반이었음.

이후 같은 해 5월 23일 1.0 버전이 나옴. 초기에는 C 컴파일러를 가리키던 GCC라는 이름이 뒤에는 여러 언어를 지원하는 GNU Compiler Collection으로 확장되며, GNU의 영향력이 운영체제 자체를 넘어 개발 도구 생태계로 퍼지는 계기가 됨.

기존 GCC에서 갈라져 진행되던 여러 개선 작업을 모으기 위해 EGCS 프로젝트가 출범함. 안정성을 중시하는 배포 흐름과 새로운 기능을 빠르게 수용하려는 개발자들의 요구 사이에서 협업 방식을 다시 설계하려는 시도였음.

단순히 경쟁 제품을 만들려는 분기가 아니라, 여러 개발 갈래의 성과를 공유하고 다시 통합할 기반을 마련하려는 프로젝트였음.

GCC 2.95가 공개됨. 공식 발표는 1999년 4월 GCC와 EGCS가 다시 합쳐진 뒤 나온 첫 릴리스로 이 버전을 소개함. 컴파일러 개발의 분기와 재통합을 거쳐 여러 기여자의 작업을 하나의 공식 배포 흐름으로 모은 결과였음.

GCC는 C뿐 아니라 여러 언어를 지원하는 컴파일러 모음으로 발전함. 이 사건은 GNU의 성장이 창립자의 초기 설계만으로 이루어진 것이 아니라, 유지보수 조직과 참여 방식의 변화까지 포함한 공동 개발 과정이었음을 보여 줌.

새로운 C++ ABI와 지원 라이브러리를 도입하고 표준 준수와 최적화 기능을 개선함. ABI는 컴파일된 코드 사이의 호출·자료 배치 약속이므로, 이 변화는 소스 코드 지원뿐 아니라 바이너리 호환성과 배포 환경에도 영향을 주는 전환이었음.

당시에는 Java 컴파일러 GCJ와 실행시간 라이브러리도 통합 지원함. 이는 그 시기의 지원 범위로, 오늘날 GCC의 지원 언어 목록과 그대로 같지는 않음.

고수준 중간 표현을 이용하는 Tree SSA 기반의 새 최적화 체계를 도입함. 프로그램을 기계어로 낮추기 전에 구조를 분석해 불필요한 연산을 제거하고 반복문을 개선할 기반이 확대됨.

새 GNU Fortran 프런트엔드도 정식 모음에 포함됨. 서로 다른 언어가 공통 최적화 기반을 이용하면서 과학기술 계산용 자유 소프트웨어 도구의 범위를 넓힌 변화임.

GNU 컴파일러 모음 4.2.1을 공개하면서 이 버전이 GPL 버전 2를 적용하는 마지막 배포판이며 이후 버전은 GPL 버전 3으로 배포한다고 공지함. 핵심 개발 도구의 라이선스 정책이 바뀌는 전환점이었음.

컴파일러 자체의 배포 조건 변경과 컴파일 결과물의 조건은 구분해야 함. 이후 실행시간 라이브러리에 대한 별도 예외 조항도 정비됨.

자유 소프트웨어 재단·GCC 운영위원회·소프트웨어 프리덤 법률센터가 GPL 버전 3에 대한 GCC 실행시간 라이브러리 예외를 발표함. 해당 라이브러리가 컴파일 결과물에 포함된다는 이유만으로 모든 결과 프로그램에 GPL을 적용하도록 요구하지 않게 하는 추가 허락을 정비함.

GCC의 라이선스 전환과 플러그인 개발에 관련된 조치로, 예외가 적용되는 조건은 별도로 정해져 있음.

링크 시간 최적화(LTO)를 도입해 별도로 컴파일한 파일들의 정보를 최종 연결 단계에서 함께 분석할 수 있게 함. 한 파일 안에 머물던 함수 간 최적화를 파일 경계 너머로 확대할 기반임.

컴파일러 플러그인 기반도 마련됨. 확장 가능성이 커진 한편, 빌드 시간과 메모리 사용량, 플러그인의 라이선스 조건 등을 함께 고려해야 하는 개발 환경으로 발전함.

GCC의 공식 소스 저장소가 Git으로 전환됨. 오랜 개발 이력을 보존하면서 분산 버전 관리 도구를 중심으로 소스 접근과 변경 추적 방식을 바꾼 전환임.

저장소 전환은 누구나 자유롭게 공식 코드를 직접 수정할 수 있다는 뜻은 아니며, 변경 제안과 검토·승인 절차는 계속 적용됨.

기술적 의견 차이가 있어도 참여자를 존중하고 차별·괴롭힘을 피하도록 하는 행동강령을 채택함. 문제 신고와 대응 절차를 제시해 공동체의 참여 환경을 명문화함.

컴파일러의 품질을 코드와 성능만의 문제로 보지 않고, 다양한 기여자가 지속적으로 협업할 수 있는 조건과 연결한 변화임.

COBOLworx가 기여한 COBOL 언어 프런트엔드가 GCC에 추가됨. 업무용 프로그램에 오래 사용돼 온 COBOL을 GCC의 컴파일 기반으로 처리할 수 있도록 지원 범위를 확장한 변화임.

프런트엔드는 소스 언어를 해석해 공통 컴파일 단계로 넘기는 부분임. 새로운 언어를 지원한다는 사실이 모든 기존 구현의 확장 문법과 완전한 호환성을 보장하는 것은 아님.

GCC 16 계열의 첫 정식 버전이 공개됨. 반복 횟수를 미리 결정하기 어려운 루프의 벡터화와 간접 함수 호출 분석 등 최적화 기능을 확대함.

더 빠른 실행 코드를 만들 가능성을 넓힌 개선이지만, 실제 효과는 프로그램과 대상 하드웨어·컴파일 옵션에 따라 달라짐. 기능 추가와 함께 기존 프로그램의 이식·호환성 점검도 필요한 릴리스임.

대규모 언어모델이 생성하거나 그 결과에서 파생된 법적으로 유의미한 기여를 원칙적으로 받지 않는 정책을 발표함. 다만 테스트 사례 등 명시된 예외가 있으며, AI 사용을 전면 금지하는 규칙과는 구분됨.

허용되는 AI 생성 기여에도 표시가 필요하고, 변경을 이해하고 설명할 수 있는 사람이 제출·검토 책임을 지도록 함. 저작권과 품질, 인간의 책임을 함께 다루는 공동체 운영 기준임.

갱신 2026-10-27