커널 프로젝트에 autotools 적용
오픈 소스 프로그램을 쓰다 보면 가장 많이 하는 작업은 다음과 같습니다.
$ ./configure
$ make
$ sudo make install
위와 같이 대다수의 오픈 소스 프로그램들이 autotools를 기반으로 만들어져 있는대요.
그래서, 저도 지금 하고 있는 DINOS 커널 프로젝트에도 적용 시켜 보면 어떨까? 라고 종일 autotools 적용에
대한 득과 실을 고민했습니다. autotools tutorial을 보면서 toy project를 autotools 기반으로 만들어 보기도 했고요.
리눅스 커널과 비교하면 make menuconfig에 해당하는 작업을 대다수의 오픈 소스 프로그램처럼 ./configure 로
하게 되는 것이죠.
사용자 측면에서 보면 빌드 시스템이 간결해지므로 많이 끌리고 있습니다. 하지만 아직 커널 프로젝트 특성에
적합한지 정확한 판단을 할 수 없어서 우선 보류하고 있습니다. 제가 Makefile 작성에 익숙하고, 이미 빌드 시스템
Makefile 기반으로 되어 있어서 autotools로 갈아엎는게 꺼려지더군요.
주로 세 가지 부분에서 많이 고민하고 있습니다.
1. autotools를 적용하게 되면 학습을 해야 하므로 학습 비용이 드는데, 그만한 가치가 있는가?
2. 커널 프로젝트 특성에 걸맞은 기능을 autotools가 제공하는가?
3. 커널 프로젝트 특성에 걸맞은 기능이 autotools가 제공하지 않으면, 그 기능을 autotools에 추가 & 수정하는 작업
이 많은가?
오픈 소스 애플리케이션이면 학습 비용이 들더라도 당연히 autotools를 적용하겠습니다. 커널은 기존 어플리케이션
과 달라서 고민이 되네요. 당장 떠오르는 커널 프로젝트 특징은
* 라이브러리 사용 불가
* 링크 스크립트를 이용한 ELF 파일 섹션 조작
* ELF 파일 바이너리 조작
와 같습니다. 리눅스 커널 같은 경우에는 '다양한 타겟 지원', '많은 빌드 옵션'이 추가되겠지만, 현재 DINOS에는
해당하지 않습니다.
autotools를 실무에 적용해서 쓰고 계신 분들이 많으실 텐데, 어떻게 생각하시나요?
감히 제가 뭐라 말씀드릴 수준은 아닌것 같습니다만 제
감히 제가 뭐라 말씀드릴 수준은 아닌것 같습니다만
제 경험을 말씀드리면 autotools는 빌드 환경의 다양성을 위해 만들어진 툴로 알고있습니다.
따라서 라이브러리나 헤더파일 등 환경을 체크하는 기능을 위해 사용하는 걸로 알고있습니다.
커널 프로젝트에서는 이렇게 필요없지 않을까요?
게다가 바이너리 생성이나 ELF 조작 등은 autotools와는 상관없는 작업이 아닐까하는 생각이 듭니다.
저는 그래서 autotools를 사용하지 않았었습니다.
저는 워낙 작은 규모여서 그런데 큰 규모로 개발하실테니 장기적으로밨을 때
환경 셋팅정도는 필요하실 수도 있을것 같습니다.
답변 감사합니다.
autotools를 사용하는 주요 목적이 '라이브러리나 헤더파일 등 환경을 체크'하는 것이면
굳이 사용 할 필요는 없어보입니다. (사용하는 라이브러리가 있어야 말이죠...)
Just do it!