GNU 프로젝트
GNU는 자유 소프트웨어로 Unix 호환 운영체제를 만들기 위해 시작된 프로젝트다. GNU라는 이름은 “GNU's Not Unix”를 뜻한다. 여기서 자유는 가격이 0이라는 의미에 한정되지 않고 프로그램을 실행·연구·수정·재배포할 자유를 가리킨다.
커널과 사용자 공간 도구 구분하기
Linux 시스템에서 접하는 Bash, GCC, GNU coreutils, glibc는 GNU의 구성 요소다. Linux 커널 자체와 같은 프로젝트는 아니다. 배포판마다 GNU 도구를 사용하는 범위도 다르다.
| 구성 요소 | 하는 일 |
|---|---|
| Bash | 명령과 스크립트 해석 |
| GCC | 소스 코드를 컴파일 |
| coreutils | 파일·텍스트·셸 작업에 쓰는 기본 유틸리티 |
| glibc | C 프로그램과 운영체제 사이의 라이브러리 인터페이스 |
프로그램을 빌드하거나 셸 스크립트를 옮길 때는 “Linux에서 실행했다”만으로 환경을 충분히 설명하기 어렵다. 어떤 컴파일러, 셸, libc와 유틸리티를 사용하는지 구분해야 한다.
command -v bash
bash --version
cc --version
cc가 반드시 GCC인 것은 아니다. macOS에서는 Clang을 가리킬 수 있고 다른 환경에서도 선택된 도구에 따라 달라진다. 명령 이름보다 실제 구현을 확인한다.
GNU 유틸리티의 추가 옵션은 편리하지만 모든 Unix 계열 환경에서 사용할 수 있는 것은 아니다. 배포용 스크립트는 지원 환경을 명시하거나 표준 인터페이스 범위를 선택한다. BSD 명령과 옵션 차이도 함께 확인할 수 있다.
자료: GNU 소개, 자유 소프트웨어의 정의, GNU 소프트웨어 목록