Fetching linux kernel source code

리눅스 커널은 오픈 소스 소프트웨어이므로 그 소스코드가 공개되어 있어 누구나 인터넷을 통해 쉽게 얻을 수 있습니다. 이 글에서는 리눅스 커널 소스코드를 받아올 수 있는 몇가지 방법을 설명합니다.

kernel.org

리눅스 커널 소스 코드를 받아오기 위한 기본적 공식 사이트는 [kernel.org] (https://www.kernel.org) 라 할 수 있겠는데, 이 사이트에는 소스 코드를 포함해 리눅스 커널을 위한 다양한 리소스가 정리되어 있습니다. 이 사이트에 웹브라우저를 통해 들어가보면 첫페이지에서부터 가장 최근에 릴리즈된 버전의 소스코드, 가장 최근의 안정화된 버전의 소스코드 등을 tar.xz 포맷의 압축 파일 또는 patch 등 다양한 형태로 다운받을 수 있는 링크가 있습니다.

한가지 유의할 것은 kernel.org 는 공식적 사이트일 뿐으로 비슷하게 소스코드를 호스팅 하는 사이트는 github 을 포함해 여럿 있을 수 있다는 점입니다. 또한, 특정한 회사나 개인이 수정한 버전의 커널의 소스코드는 kernel.org 에서 받을 수 없을 수 있습니다. 하지만, 리눅스 커널의 라이센스가 GPL 인만큼, 그들도 자신이 수정한 버전을 상품 등으로 배포하고 있다면 소스코드를 공개해야 하므로, 해당 버전을 만든 사람 또는 회사에 문의해 보면 그 소스코드를 받을 수 있을 겁니다. 예를 들어 안드로이드의 경우 자신들이 수정한 커널을 사용하며, 그렇게 수정된 커널의 소스코드를 자신들의 소스코드 [호스팅 사이트] (https://android.googlesource.com/) 에 공개하고 있습니다.

Specific Version

kernel.org 첫 페이지에는 몇가지 버전의 소스코드만 존재하므로 찾고 있는 버전은 해당 페이지에 링크가 존재하지 않을 수 있습니다. 특정 버전을 찾기 위한 페이지 역시 kernel.org 는 제공하는데, https://www.kernel.org/pub/linux/kernel/ 주소로 들어가면 특정 버전의 커널 소스코드를 받을 수 있습니다.

예를 들어 4.2.1 버전을 받고 싶다면, 다음 커맨드를 셸에서 수행해 받아올 수 있습니다:

$ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.2.1.tar.xz
$ tar xvf linux-4.2.1.tar.xz
$ ls linux-4.2.1

Git Repository Cloning

주요 리눅스 개발자들은 각자의 git repository 로 자신이 개발중인 버전의 리눅스 커널 소스코드를 관리하는데, 이 역시 남들이 볼 수 있게 공유해 두고 있습니다. 따라서, 원한다면 특정 리눅스 개발자의 개발중인 리눅스 커널 소스코드를 git 으로 clone 해올 수 있습니다. 많은 주요 개발자들이 kernel.org 위에 자신의 git repository 를 호스팅 하고 있으며, github 을 사용하는 사람들도 많습니다. 예를 들어 리누스 토발즈는 kernel.org 위에 자신의 git repository 를 호스팅 하면서 github 에 미러링도 하고 있습니다. 각각의 repository 의 주소는 다음과 같습니다:

다음과 같은 명령을 통해 리누스 토발즈의 개발중인 리눅스 커널 소스코드를 clone 해올 수 있습니다:

$ git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ ls linux

개발자의 repository 를 클론해 오는 방식의 장점은, 일단 아직 릴리즈 되지 않은 따끈따끈한 버전의 소스코드를 그 commit history 와 함께 볼 수 있다는 점일 겁니다. 리눅스 커널 개발에 참여하고 싶다면 현재 어떤 기능이 구현되고 있고 어떤 버그가 아직 고쳐지지 않았는지 등을 알 수 있으므로 필수적입니다. 또하나의 장점은 git repository 에는 그동안 해당 repository 에서 릴리즈한 버전들이 모두 포함되어 있어, 해당 버전을 언제든지 checkout 할 수 있다는 점입니다.

단점은, commit history 와 개발중인 코드를 원하는게 아니라면 불필요하게 많은 용량의 데이터를 다운로드 받아야 한다는 것입니다. 현재 소스코드를 필요로 하는 목적에 맞춰, 특정 버전의 코드가 필요할 뿐이라면 압축 파일을, 그렇지 않다면 git repository 를 사용한 접근을 하는 편이 옳을 겁니다.

Conclusion

리눅스 커널의 소스코드를 얻어오는 몇가지 방법을 알아봤습니다. 리눅스 커널은 오픈소스 형태라 그 소스코드를 쉽게 구할 수 있으며, kernel.org 또는 github 등의 호스팅 사이트에서 압축 파일, 패치, 또는 git repository 의 형태로 얻을 수 있습니다. 개발중인 repository 의 clone 을 통한 형태는 commit history 와 개발중인 코드의 정보를 알 수 있다는 장점이 있지만 그만큼 다운로드 받아야 하는 데이터의 양이 크다는 단점도 존재합니다. 자신이 현재 소스코드를 얻고자 하는 목적에 맞춰 적합한 방법으로 소스코드를 얻어오는 것이 좋을 겁니다.

Avatar
SeongJae Park (SJ)
Kernel Programmer

SeongJae Park (SJ) is a programmer who loves to analyze and develop systems.

Related