안녕하세요. 오픈소스컨설팅 리눅스 엔지니어 김태현입니다.
오픈소스컨설팅에 입사하여 리눅스를 공부하고, 기술 지원 부서에서 일을 하면서, 최근에 Linux 커널 릴리스 모델에 대해 자세한 설명이 담긴 글을 발견했습니다.
현재 Linux 커널은 계속해서 개발되고, 발전하며, 새로운 기능, 보안 패치 및 버그 수정이 추가되고 있습니다. 이에 관련해서 공부 하다 보면 Linux의 릴리스 및 보안 패치 처리에 대한 잘못된 정보가 많이 쓰여졌다는 것을 알 수 있습니다.
저는 해당 글을 번역하여 많은 사람들이 이해하기 쉽게 소개해볼까 합니다.
시작하기 앞서 간단하게 리눅스 커널에 대해서 알아보고 가겠습니다.
리눅스 커널이란?
리눅스® 커널은 리눅스 운영 체제(OS)의 주요 구성 요소이며 컴퓨터의 하드웨어와 프로세스 간의 핵심 인터페이스입니다. 둘 사이에서 통신하여 리소스를 최대한 효율적으로 관리합니다.
리눅스 커널이 하는 일은 뭔가요?
커널에는 4가지 작업이 있습니다.
- 메모리 관리: 무엇을 어디에 저장하는 데 얼마나 많은 메모리가 사용되었는지 추적
- 프로세스 관리: 중앙 처리 장치(CPU)를 사용할 수 있는 프로세스, 시기 및 기간을 결정
- 장치 드라이버: 하드웨어와 프로세스 간의 중재, 인터프리팅 역할
- 시스템 호출 및 보안: 프로세스로부터 서비스 요청 수신하고 보안 처리
이제 시작하겠습니다~~!!
해당 글은 “ 원문 : Linux Kernel Release Model – Linux Kernel Monkey Log “ 을 참조한 내용을 기반으로 번역한 내용입니다. (일부 내용은 생략, 추가, 변경 되었습니다.)
개요
이 게시물은 리눅스 커널 개발 모델이 어떻게 작동하는지, 장기적으로 지원되는 커널이 무엇인지, 커널 개발자들이 보안 버그에 어떻게 접근하는지, 그리고 리눅스를 사용하는 모든 시스템들이 왜 모든 안정적인 릴리스를 사용하고 무작위 패치를 선택하려고 하지 않는지에 대해 설명합니다.
리눅스 커널 개발 모델(Linux Kernel Development Model)
Linux 커널은 소프트웨어 개발에 있어서 지금까지 가장 큰 협업 소프트웨어 프로젝트입니다.
2017년에는 530개 이상의 기업에서 4,300명 이상의 개발자들이 Linux 커널 프로젝트에 기여했으며, 그 해에는 5개의 다른 릴리스가 있었습니다. 각 릴리스에는 12,000에서 14,500개 사이의 서로 다른 변경 사항이 포함되어 있었습니다. 일반적으로 매 시간마다 8.5개의 변경사항이 리눅스 커널에 반영된다고 합니다.
위에 그림은 리눅스 개발 주기 입니다. 번역해 보면 이렇습니다.
- Linux 메인 커널 릴리스 5.2 : Linus Torvalds는 메인의 안정 커널을 출시하고, 다음 릴리스에 대한 Merge Window 엽니다.
- 2주 Merge Window : 메인테이너들은 Linus에게 git pull 요청을 보냅니다. Linus는 merge 기간동안 각 요청을 끌어다 놓고 테스트하는 주기를 거칩니다.
- Linus 릴리스 5.3-rc1 : merge 창이 클로즈되었습니다. (개발 프로세스에서 릴리즈의 새로운 기능 및 개선 사항이 완료되어 다음 버전에 통합되는 마감일을 나타냅니다. ) 버그 수정 및 회귀 분석을 위한 6~7주간의 통합 주기가 시작됩니다.
- 안정적인 릴리즈 프로세스 : 첫 번째 안정 버전 5.2.1이 출시되었으며, 최신 코드인 5.3-rc1에서 발견된 버그 수정 사항이 반영되었습니다. 이러한 버그 수정 사항은 현재 활성화된 모든 안정 버전에 포함될 것입니다.
- rc8이 있을까요? : Linus는 품질에 대한 자신감 수준을 바탕으로 rc7이나 rc8 이후 메인 안정 버전을 출시합니다.
*rc (Release Candidate) : 릴리스 후보(개발 버전)
*메인테이너(Maintainer) : 기술을 운용하고, 관리하고, 보수하는 사람
커널 릴리스 모델(Kernel Release Model)
2003년 12월 2.6 커널의 출시와 함께 커널 개발자 커뮤니티는 별도의 개발과 안정적인 커널 분기를 갖는 “일반적인 전용” 모델에서 “안정적인 전용” 분기 모델로 전환되었습니다. 이 모델에서는 매 2~3개월마다 새로운 릴리스가 발표되었고, 해당 릴리스는 “안정적”으로 선언되어 모든 사용자가 실행할 것을 권장했습니다.
커널 릴리스의 번호 지정은 2.6.x부터 시작되었습니다. 여기서 x는 모든 릴리스에서 변경되는 증분 번호이고, 번호 값은 이전 커널 릴리스보다 최신이라는 점 외에는 의미가 없습니다.
*일반적인 전용 모델 : 개발과 안정화가 동시에 이루어졌고, 안정화 단계에서도 개발이 이루어졌습니다. 개발과 안정화가 동시에 이루어져 버그나 문제가 많이 발생할 가능성이 높았습니다. 따라서 커널 개발자 커뮤니티는 안정 버전과 개발 버전을 분리하여 각각 별도의 트리에서 개발하는 “안정적인 전용”과 “개발 전용” 분기 모델로 전환하게 되었습니다
안정적인 커널 릴리스(Stable kernel releases)
리눅스 안정적인 커널 릴리스 모델은 2005년에 시작되었습니다. 그때 기존의 커널 개발 모델(2-3개월마다 새로운 릴리스)이 대부분의 사용자 요구를 충족시키지 못한다는 판단이 있었기 때문입니다.
안정적인 커널 릴리스는 Linus의 릴리스를 기반으로 직접 만들어지며, 다양한 외부 요인(연도별, 사용 가능한 패치, 유지 관리자의 작업 부담 등)에 따라 매주 또는 그 전후로 릴리스됩니다.
그리고 안정적인 릴리스의 번호는 커널 릴리스의 번호로 시작하고, 그 끝에 추가 번호가 추가됩니다.
예를 들어, 4.9 커널이 Linus에 의해 릴리스되면, 이 커널을 기반으로 하는 안정적인 커널 릴리스는 4.9.1, 4.9.2, 4.9.3 등으로 번호가 매겨집니다. 이 시퀀스는 일반적으로 안정적인 커널 릴리스 트리를 참조할 때 “4.9.y”로 줄여서 사용됩니다.
안정적인 커널은 현재 개발 주기가 진행되는 한 계속 유지보수됩니다. Linus가 새로운 커널을 릴리스한 후, 이전 안정적인 커널 릴리스 트리는 중지되며 사용자는 더 최신 버전의 커널로 이동해야 합니다.
장기적으로 안정적인 커널(Long-Term Stable kernels)
새로운 stable release 모델을 한 해간 사용하고 나니, 많은 다양한 리눅스 사용자들이 커널을 몇 개월 이상 지원받을 수 있는 데에 대한 요구가 있음을 알게 되었습니다. 그 결과, 장기지원(LTS) 커널 릴리스가 등장하게 되었습니다. 첫 번째 LTS 커널은 2006년에 출시된 2.6.16이며, 그 이후로 매년 새로운 LTS 커널이 선정됩니다. 해당 커널은 커널 커뮤니티에서 적어도 2년간 유지됩니다. (2년~6년)
현재 평균적으로 일주일에 한 번 새로운 커널이 릴리스됩니다. 이 세 가지 커널 릴리스와 함께, 몇몇 오래된 커널들은 여전히 일부 사용자와 배포판의 요구로 인해 더 느린 릴리스 주기로 일부 커널 개발자들에 의해 유지되고 있습니다.
장기적으로 안정적인 커널에 대한 모든 정보, 누가 커널을 담당하는지, 그리고 커널이 유지되는 기간은 kernel.org release page에서 확인할 수 있습니다.
** 글은 작성하는 시점에서 LTS 커널을 확인해보면
현재 LTS커널은 4.14, 4.19, 5.4, 5.10, 5.15, 6.1 입니다.
마지막 버전인 6.1의 가장 주목을 받은 변경 사항은 Rust를 두 번째 언어로 도입한 것입니다.
Rust를 지원하는 주된 이유는 메모리 오류 가능성을 줄여 고품질의 안전한 장치 드라이버를 더 쉽게 작성할 수 있도록 하기 위함입니다.
LTS 커널 릴리스는 하루에 평균 9-10개의 패치가 허용되는 반면 일반적인 안정적인 커널 릴리스에는 하루에 10-15개의 패치가 포함됩니다. 오래된 LTS 커널일수록 많은 최신 버그 수정이 이전 커널과 관련이 없기 때문에 적용 가능한 패치가 적습니다. 하지만 코드베이스의 변경 사항으로 인해 적용해야 하는 변경 사항을 백포트하기가 더 어렵기 때문에 전반적으로 적용되는 패치 수가 적을 수 있지만, LTS 커널을 유지하는 데 드는 노력은 일반적인 안정 커널을 유지하는 것보다 큽니다.
위에 그림에서 보듯이 Linux 커널은 Linus Torvalds 에 의해서 1991년에 구상되고 만들어졌습니다 .
Linux 커널은 버전에 따라 지원 수준이 다르고, 일반적으로 각 안정 버전은 다음 안정 버전이 출시될 때까지 메인라인의 버그 수정을 계속 백포트합니다. 그러나 안정적인 버전이 장기 지원(LTS) 커널 로 지정된 경우 추가로 몇 년 동안 유지됩니다.
LTS 커널 선택(Choosing the LTS kernel)
LTS 릴리즈가 어떤 커널을 선택할 것이고, 누가 이를 유지할 것인지에 대한 방법은 수년간 반랜덤 방식에서 희망적으로 더 신뢰할 수 있는 방식으로 바뀌었다.
안정적인 커널 패치 규칙(Stable kernel patch rules)
안정적인 커널 릴리스에 추가할 수 있는 규칙은 지난 12년 동안 거의 동일하게 유지되었습니다.
안정적인 커널 릴리스에 허용되는 패치에 대한 전체 규칙 목록은 Documentation/process/stable_kernel_rules.rst 커널 파일에서 찾을 수 있습니다.
커널 업데이트(Kernel Updates)
리눅스 커널 커뮤니티는 어떠한 업그레이드도 이전 릴리스에서 현재 작동하는 어떤 것도 파괴하지 않을 것이라고 사용자 기반에 약속했습니다. 그 약속은 2007년 영국 케임브리지에서 열린 연례 커널 개발자 서밋에서 이루어졌으며, 오늘날에도 여전히 유효합니다.
보안(Security)
커널 릴리스를 수행할 때 리눅스 커널 커뮤니티는 특정 변경 사항을 “보안 수정”으로 선언하지 않습니다. 버그 수정이 보안 수정인지 아닌지를 작성 당시 판단하기 어렵다는 기본적인 문제 때문입니다. 또한 많은 버그 수정은 시간이 지난 후에야 보안과 관련된 것으로 결정되기 때문에 사용자들이 패치를 적용하지 않음으로써 잘못된 보안 감각을 얻는 것을 방지합니다. 이에 관련해서 커널 커뮤니티는 출시된 모든 버그 수정을 항상 취할 것을 강력하게 권장합니다.
안전한 시스템 유지(Keeping a secure system)
Linux를 사용하는 장치를 배포할 때 제조업체에서 모든 LTS 커널 업데이트를 가져오고 적절한 테스트를 통해 업데이트가 제대로 작동하는지 확인한 후 사용자에게 배포하는 것이 좋습니다.
글을 마치며,
지금까지 Linux Kernel Release Model에 대해서 알아보았습니다.
제가 Linux Kernel Release Model을 공부하고 느낀 점은, Linux Kernel Release Model은 개방성과 협업을 바탕으로 사용자와 개발자들이 자유롭게 참여하며 지속적인 개선이 가능한 운영 체제를 만들 수 있다는 것과 안정성과 신뢰성을 보장하면서도 유연성과 확장성을 갖춘 릴리스 모델은 Linux 커널의 성공적인 발전을 이루어나가는 데 중요한 역할을 할 것이라는 것을 느꼈습니다.
Linux Kernel Release Model에 대해서 궁금하고 잘 모르시는 분들은
이 글을 통해 조금이나마 Linux Kernel Release Model에 대해 알고 이해하셨기를 바랍니다!
원문과 달리 생략된 부분이 있으니 더욱 자세한 내용은 원문을 보고 확인하시면 되겠습니다.
읽어주셔서 감사합니다.!