커널 패치

글쓴이: Dave Jones (dave@ext2.net)
옮긴이: 류정욱 (abulafia@nownuri.net)
원문: http://ext2.linuxberg.com/99/05/kernel/050499-kernel2.shtml

나는 다음과 같은 질문을 자주 받곤 한다 :

  1. Vanilla/ac/arca/pre 패치란 무엇인가 ?
  2. 과연 어느 것을 사용해야 하는가 ?
  3. 또 다른 종류의 패치들은 어떻게 얻을 수 있는가 ?
  4. 패치는 어떻게 만드는가 ?

이 글에서는 우리가 사용할 수 있는 여러 종류의 패치들의 차이점과 그것들을 안전하게 사용할 수 있는 방법을 설명할 것이다.


Vanilla/ac/arca/pre 패치란 무엇인가 ?

Vanilla tree (바닐라 계열)

바닐라 소스 계열은 ftp.xx.kernel.org [xx는 국가 코드] 에서 linux-2.2.x.tar.bz2 의 형태로 찾을 수 있는 '패치가 되어 있지 않은' 커널 소스들을 말한다.

ac patches (앨런 콕스 패치)

앨런 콕스는 핵심적인 커널 개발자 중의 한 명이다. 현재 리누스 토발즈가 새로운 '안정' 커널인 2.2.x 에 관심을 집중하고 있기 때문에, 2.0.x 커널의 유지/보수는 앨런 콕스의 몫으로 보인다. 그렇지만 앨런 콕스는 2.0.x 커널 뿐만 아니라 2.2.x 커널에 대한 자신만의 패치도 발표하고 있다. 그는 이 패치들을 매우 자주 - 가끔 한 주에 몇 번씩이라도 - 발표하고, 그의 패치에는 많은 부분의 실험적인 것들이 포함되곤 한다.

당신은 앨런 콕스의 패치를 ftp.xx.kernel.org [xx는 국가 코드] 의 /pub/linux/kernel/alan/2.2 에서 얻을 수 있다. 혹시 kernel.org 에 연결이 되지 않을 때는 과거 앨런 콕스가 사용하였던 ftp.uk.linux.org 에서 패치를 찾을 수 있을 것이다.

앨런 콕스의 패치는 2.2.x 대의 바닐라 계열과 일관성이 없다.
그의 패치를 적용하는 간단한 방법은 다음과 같다 :

cd /usr/src/

rm -rf linux

bzip2 -cd linux-2.2.6.tar.bz2 | tar x

ln -s linux linux.ac

ln -s linux linux.vanilla

bzip2 -cd patch-2.2.6-ac2.bz2 | patch -p0

rm linux.ac

rm linux.vanilla

arca patches (안드레이 패치)

안드레이에 의해 만들어진 패치들을 말한다.
다른 개발자들의 패치에서는 찾아볼 수 없는 새로운 것들이 시도되기 때문에 그의 패치를 적용해 볼 가치가 있다. 때로는 앨런 콕스보다 훨씬 더 실험적인 것들이 시도되기도 한다. 안드레이는 다른 코드를 파괴할 위험이 있는 영역에 대한 실험을 두려워하지 않는다. 최근의 단적인 예가 메모리 관리 시스템(memory management system)에 대한 패치이다. 내가 486 시스템에 이 패치를 적용하였더니 엄청난 성능 향상이 있었다. 땡쓰~ Andrea!
안드레이의 패치는 ftp로 e-mind.com 에 접속해서 /pub/Andrea/kernel 디렉토리를 보면 찾을 수 있다.

Pre patches (Pre-release 패치)

이 패치들은 리누스에 의해 발표되는 다음 버젼의 공식 커널에 대한 pre-release 이다. 리누스가 다음 버젼을 발표하기 전에 실제로 잘 동작하는지 테스트해 보려는 기능들이 포함된다. 예를 들어, 2.2.7 pre 에서는 일부에서 문제가 되었던 TCP/IP 네트워킹에 대한 업데이트가 포함되었다. 더이상 문제가 발생하지 않는다는 것을 확신하기 위해 리누스는 가능한 한 많은 사람들에 의해 그것이 테스트 되기를 원한다.
kernel.org의 테스팅 디렉토리에서 pre 패치를 얻을 수 있다.


과연 어느 것을 사용해야 하는가 ?

앨런 콕스는 리누스의 pre 패치로부터 매우 중요한 변화는 자신의 ac 패치에 반영시킨다. 안드레이는 앨런 콕스의 패치와는 상관없이 패치를 만든다. 그러므로 지금 이 시점에서 기본적으로 사용가능한 것이 무엇이고, 어느 것을 사용하는 것이 당신에게 더 가치 있는 지에 따라 적용할 패치를 결정하는 것이 좋다. 만약 어느 커널 개발자의 500 킬로바이트나 되는 diff 파일이 당신이 사용하지도 않는 하드웨어에 위한 드라이버로 채워져 있다면, 당신은 자신의 시스템의 성능을 향상시킬 수 있는 다른 커널 개발자의 소규모의 패치를 구하는 것이 더 올바른 선택일 것이다.


패치는 어떻게 만드는가 ?

나는 소박하게 내가 개발한 자잘한 패치들을 발표하기 시작했다. 나는 이것들을 사용하고 싶어하는 사람들로부터 몇 통의 메일을 받기도 했지만, 나에게 더이상 개인적으로 패치를 발표하는 것을 그만두고 앨런 콕스와 같은 다른 커널 개발자들에게 나의 패치를 보낼 것을 요구하는 메일도 받았다. 지난 과정에 대해 좀 더 생각해보자.
당신이 패치하려는 코드를 보수/유지 하는 사람이 누구인지 알아보려는 것은 매우 좋은 생각이다. 당신은 어쩌면 이미 개발 중인 작업을 중복할 수도 있기 때문이다. 당신의 diff 파일을 그 사람에게 보냄으로써 당신은 자신이 개선한 부분이 실제 커널에 더해지는 기회에 더 가까워질 것이다.
대부분의 커널 개발자들은 패치한 부분을 하나의 diff 파일로 만들어서 보내는 것을 더 선호한다. 이 파일은 /usr/src 에 있는 두 디렉토리 (기존의 소스와 패치한 소스) 에 다음과 같은 명령을 실행하면 만들어진다.

diff -urN linux.vanilla linux.mytree > mydiff.diff

gzip -9 mydiff.diff


또다른 종류의 패치들은 어떻게 얻을 수 있는가 ?

커널 메일링 리스트를 읽어라. 매일 새로운 패치들이 발표된다. 어떤 사람들이 당신의 하드웨어에서 돌아가는 새로운 기술을 알아냈을 수도 있다. 이런 것들을 테스트하고 버그를 찾아서 버그가 빨리 제거될 수 있도록 도와주면, 새로운 기술들은 매우 빠르게 주류 커널 (많은 사람들이 사용하는 커널) 에 포함될 수 있을 것이다.
또한 당신은 이런 패치들에 따르는 새로운 버젼의 커널들이 있다는 사실도 알게 될 것이다. 한 예로 리차드 구츠 (Richard Gooch) 의 MTRR 지원에 대한 작업이 있다. 이것은 지속적인 개발이 이루어지고 있으며, 각각의 커널은 계속 개발 중인 중간의 코드일 뿐이다. 일반적으로 대부분의 패치들은 동일한 포맷으로 제공되는데 /usr/src 디렉토리에서 간단하게 bzip2 -cd patchname.diff.bz2 | patch -p0 라고 쳐 주면 원하는 결과를 얻을 수 있을 것이다.


만약 패치에 대한 질문이 더 있다면, 나 (dove@ext2.net) 에게 메일을 주기 바란다. 성의껏 대답하도록 노력할 것이다.