Booil Jung

리눅스 커널

운영체제(OS)의 가장 핵심적인 구성 요소를 지칭하는 커널(Kernel)은 그 이름이 암시하듯, 단단한 껍질 속의 씨앗처럼 시스템의 중심에 위치한다.1 커널은 하드웨어와 소프트웨어 사이의 근본적인 중재자로서, 전화기, 노트북, 서버 등 모든 형태의 컴퓨팅 장치에서 하드웨어의 모든 주요 기능을 제어하는 역할을 수행한다.1 사용자가 직접 상호작용하는 웹 브라우저나 파일 탐색기와 같은 응용 프로그램들은 ‘사용자 공간(User Space)’에 존재하며, 이들은 커널이 제공하는 ‘시스템 호출 인터페이스(System Call Interface, SCI)’라는 엄격하게 정의된 통로를 통해서만 하드웨어 자원에 접근할 수 있다.1 이러한 구조는 시스템의 안정성과 보안을 보장하는 핵심적인 설계 원리이다. 커널을 강력한 경영진(하드웨어)을 위해 분주하게 일하는 개인 비서에 비유할 수 있다. 이 비서는 직원과 대중(사용자)으로부터 오는 메시지와 요청(프로세스)을 경영진에게 전달하고, 자원의 위치를 기억하며(메모리 관리), 누가 언제 얼마나 경영진을 만날 수 있는지(프로세스 관리) 결정하는 중추적인 역할을 담당한다.1 따라서 리눅스 커널을 이해하는 것은 단순히 OS의 한 부분을 분석하는 것을 넘어, 현대 컴퓨팅 시스템이 어떻게 작동하는지에 대한 근본적인 원리를 탐구하는 과정이다. 커널 자체는 완전한 운영체제가 아니며, 컴파일러, 시스템 유틸리티, 셸(Shell)과 같은 사용자 공간 프로그램들이 결합되었을 때 비로소 완전한 리눅스 운영체제가 구성된다.3

리눅스 커널의 영향력은 특정 분야에 국한되지 않고 전 세계 컴퓨팅 환경 전반에 걸쳐 있다. 오늘날 리눅스는 세계에서 가장 빠른 슈퍼컴퓨터 TOP500 리스트에 등재된 모든 시스템에서 사용되는 유일한 운영체제이며, 이는 리눅스의 압도적인 성능과 확장성을 증명한다.4 인터넷을 지탱하는 상위 100만 개의 웹 서버 중 96.4% 이상이 리눅스 기반으로 운영되고 있으며, 이는 서버 시장에서의 확고한 지배력을 보여준다.4 또한, 안드로이드 운영체제의 핵심으로서 전 세계 수십억 개의 스마트폰에 탑재되어 있으며, 이는 리눅스가 역사상 가장 널리 설치된 범용 운영체제 커널임을 의미한다.4 리눅스의 영향력은 여기서 그치지 않는다. 자동차(테슬라, 현대자동차 등), 스마트 TV(삼성, LG), 네트워크 라우터, 심지어 스페이스X의 팰컨 9 로켓에 이르기까지 광범위한 임베디드 시스템의 두뇌 역할을 수행하며 우리 삶의 거의 모든 기술적 측면에 깊숙이 자리 잡고 있다.4 이처럼 리눅스의 광범위한 보급은 이 커널의 기술적 우수성, 유연성, 그리고 오픈소스 모델의 성공을 입증하는 명백한 증거이며, 그 내부 구조와 작동 원리에 대한 깊이 있는 고찰의 필요성을 더욱 부각시킨다.

본 보고서는 리눅스 커널에 대한 심층적이고 분석적인 고찰을 제공하는 것을 목표로 한다. 이를 위해 단순한 기능 나열을 넘어, 커널의 핵심 설계 철학, 주요 서브시스템의 정교한 메커니즘, 그리고 끊임없이 진화하는 개발 생태계를 다각적으로 조명할 것이다. 보고서는 다음과 같은 구조로 전개된다. 첫째, 리눅스 커널의 탄생 배경과 역사적 발전 과정을 추적하여 오늘날의 모습에 이르게 된 핵심적인 결정들을 분석한다. 둘째, 모놀리식 커널이라는 구조적 선택과 이를 보완하는 모듈 시스템의 독창성을 탐구하며 리눅스의 설계 철학을 해부한다. 셋째, 프로세스 관리, 메모리 관리, 가상 파일 시스템이라는 세 가지 핵심 서브시스템의 내부 동작 원리를 상세히 분석한다. 넷째, 전 세계적인 협업을 가능하게 하는 독특한 오픈소스 개발 모델과 커뮤니티 구조를 살펴본다. 다섯째, Windows NT, XNU와 같은 다른 현대 운영체제 커널과의 비교를 통해 리눅스 커널의 상대적인 장단점과 위치를 조명한다. 마지막으로, 보안 문제와 Rust 언어 도입과 같은 현재의 도전 과제와 미래 방향성을 논하며 보고서를 마무리한다.

리눅스 커널의 역사는 1991년, 핀란드 헬싱키 대학교의 한 학생이었던 리누스 토르발스(Linus Torvalds)의 개인적인 호기심에서 시작되었다.4 당시 교육용으로 널리 사용되던 미닉스(MINIX) 운영체제의 라이선스가 학술적 용도로만 제한되는 것에 불만을 느낀 그는, 인텔 386 프로세서의 기능을 최대한 활용할 수 있는 자신만의 운영체제 커널을 직접 만들어보기로 결심했다.4 이 프로젝트는 처음에는 토르발스 개인의 취미에 불과했으나, 인터넷을 통해 소스 코드를 공개하고 전 세계 개발자들의 참여를 유도하면서 폭발적인 성장을 이루었다.5 이처럼 미미하게 시작된 프로젝트가 오늘날 전 세계 컴퓨팅 인프라의 근간을 이루게 된 과정은 기술 역사상 가장 극적인 성공 사례 중 하나로 평가받는다.

리눅스 커널의 성공을 논할 때, 리처드 스톨먼(Richard Stallman)이 이끌던 GNU 프로젝트와의 관계를 빼놓을 수 없다. GNU 프로젝트는 1983년부터 ‘완전한 유닉스 호환 자유 소프트웨어 시스템’을 만드는 것을 목표로 컴파일러(GCC), 셸(Bash), 핵심 유틸리티 등 운영체제에 필요한 거의 모든 구성 요소를 개발해왔다.4 하지만 1990년대 초까지 GNU는 정작 시스템의 심장 역할을 할 자체 커널(GNU Hurd)을 완성하지 못하고 있었다.4 바로 이 시점에 리눅스 커널이 등장했다. 이는 마치 잘 만들어진 자동차 차체와 부품은 모두 준비되었지만 엔진이 없던 상황에, 강력한 엔진이 나타난 것과 같았다.

이러한 상황은 리눅스 커널의 발전에 있어 결정적인 기회로 작용했다. 토르발스는 초기에 상업적 재배포를 금지하는 자신만의 라이선스를 사용했으나, 곧 GNU 프로젝트의 풍부한 도구들과 결합하기 위해 자신의 커널을 GNU GPLv2(General Public License version 2) 라이선스로 변경하는 중대한 결정을 내렸다.4 이 결정은 리눅스 커널이 자유 소프트웨어로 남도록 보장했을 뿐만 아니라, 이미 완성되어 있던 GNU의 사용자 공간 도구들과 완벽하게 결합하여 완전한 기능의 자유 운영체제를 탄생시키는 기폭제가 되었다.5 이 역사적 배경 때문에 자유 소프트웨어 재단(FSF)은 이 운영체제를 ‘리눅스’가 아닌 ‘GNU/리눅스’로 불러야 한다고 주장하며, 이는 커널과 사용자 공간 시스템의 공생 관계를 상징적으로 보여준다.4 이처럼 리눅스의 성공은 토르발스의 기술적 성취뿐만 아니라, 시기적절하게 존재했던 GNU 생태계와 GPL이라는 법적, 철학적 기반이 완벽한 ‘퍼펙트 스톰’을 이루었기에 가능했다.

리눅스 커널은 초기 텍스트 기반의 콘솔 형태에서 출발하여 지속적인 발전을 거듭했다.4 주요 버전 업데이트를 거치며 현대 운영체제가 갖추어야 할 핵심 기능들이 순차적으로 추가되었다.5 초기에는 인텔 x86 아키텍처에 국한되었으나, 곧 다양한 프로세서 아키텍처로 이식되면서 적용 범위를 넓혔다. X11 윈도잉 시스템과 그놈(GNOME), KDE와 같은 데스크톱 환경이 등장하면서 개인용 컴퓨터 시장에서도 점차 입지를 다지기 시작했다.4 1990년대 중반부터는 슈퍼컴퓨팅 분야에서 주목받기 시작했는데, NASA와 같은 기관들이 고가의 유닉스 시스템을 리눅스 기반의 저렴한 컴퓨터 클러스터로 대체하면서 그 성능과 안정성을 입증했다.4 이는 서버 시장으로의 본격적인 진출을 알리는 신호탄이었으며, LAMP(Linux, Apache, MySQL, PHP/Perl/Python) 스택의 등장은 웹 서버 시장에서 리눅스의 지배력을 확고히 하는 계기가 되었다.4 21세기에 들어서는 안드로이드 운영체제의 기반이 되면서 모바일 시장을 석권했고, 임베디드 시스템으로의 확장을 통해 그 영향력을 우리 생활 곳곳으로 넓혀갔다.4

리눅스 커널의 발전은 단순히 기술적인 성장에만 머무르지 않았다. 커널을 중심으로 강력한 상업적 생태계가 형성되면서 그 성장은 더욱 가속화되었다. 레드햇(Red Hat)이나 수세(SUSE)와 같은 기업들은 오픈소스인 리눅스 커널을 기반으로 안정성과 기술 지원을 강화한 상용 배포판(예: Red Hat Enterprise Linux)을 출시했다.1 이는 안정성과 장기적인 유지보수를 중시하는 기업 시장에서 리눅스가 신뢰를 얻고 확산되는 데 결정적인 역할을 했다. 즉, 자발적인 커뮤니티의 열정과 상업적 기업의 체계적인 지원이 결합되면서 취미로 시작된 프로젝트가 전 세계의 핵심 인프라로 자리 잡게 된 것이다. 대한민국에서도 카카오뱅크가 국내 금융권 최초로 전산 시스템에 리눅스를 도입하고, 한국거래소가 차세대 시스템을 리눅스 기반으로 전환하는 등 4, 리눅스는 이제 가장 높은 수준의 안정성과 보안을 요구하는 분야에서도 그 가치를 인정받고 있다.

운영체제 커널의 아키텍처는 크게 모놀리식(Monolithic)과 마이크로(Micro) 방식으로 나뉜다. 이 둘의 선택은 시스템의 성능, 안정성, 유연성을 결정하는 근본적인 설계 철학의 차이를 반영한다.

리눅스 커널은 명백히 모놀리식 아키텍처를 채택하고 있다.6 이러한 설계 결정은 시스템의 전반적인 성능을 최우선으로 고려한 결과이다. 리눅스는 커널의 핵심 서브시스템들이 직접적이고 효율적으로 통신할 수 있도록 하여, 마이크로커널에서 발생하는 통신 오버헤드를 근본적으로 제거했다.8 이는 특히 고성능 컴퓨팅이나 대규모 서버 환경에서 리눅스가 강력한 경쟁력을 갖게 된 중요한 이유 중 하나이다.

리눅스는 모놀리식 구조의 본질적인 약점인 경직성을 ‘적재 가능 커널 모듈(Loadable Kernel Modules, LKM)’이라는 독창적인 메커니즘을 통해 극복했다. 이는 리눅스 아키텍처의 가장 큰 특징이자 성공 요인으로, 이데올로기적 순수성보다는 실용성을 중시하는 리눅스의 핵심 철학을 보여준다.

LKM은 실행 중인 커널에 시스템 재부팅 없이 동적으로 코드를 추가하거나 제거할 수 있게 해주는 기능이다.10 주로 장치 드라이버나 파일 시스템과 같은 기능들이 모듈 형태로 제공된다.10 예를 들어, 새로운 USB 장치를 시스템에 연결하면, 커널은 해당 장치에 필요한 드라이버 모듈을 자동으로 로드하여 장치를 활성화한다. 사용이 끝나면 해당 모듈을 언로드하여 시스템 자원을 반환할 수 있다. 이 모듈들은 .ko(kernel object) 확장자를 가지며, insmod(삽입), rmmod(제거), lsmod(목록 확인)와 같은 명령어를 통해 수동으로 관리할 수도 있다.10

이 LKM 메커니즘은 리눅스에 마이크로커널의 장점인 유연성과 확장성을 부여하면서도, 모놀리식 코어의 성능을 그대로 유지하게 해주는 절묘한 해결책이다.6 새로운 하드웨어를 지원하기 위해 커널 전체를 재컴파일할 필요가 없으므로 개발 과정이 단순화되고 12, 이는 리눅스 생태계의 폭발적인 성장을 견인한 핵심적인 기술적 기반이 되었다. 하드웨어 제조사들은 자사의 드라이버를 LKM 형태로 제공함으로써, 복잡하고 시간이 많이 소요되는 메인라인 커널 편입 과정을 거치지 않고도 자사 제품이 리눅스에서 동작하도록 할 수 있었다. 이는 리눅스가 타의 추종을 불허하는 광범위한 하드웨어 호환성을 갖게 된 직접적인 원동력이었다.

리눅스 시스템은 안정성과 보안을 위해 두 개의 명확히 구분된 실행 영역으로 나뉜다.1

사용자 공간의 프로세스가 파일을 읽거나 네트워크로 데이터를 전송하는 등 하드웨어 자원이 필요한 작업을 수행하려면, 반드시 ‘시스템 호출(System Call)’이라는 정해진 절차를 통해 커널에 서비스를 요청해야 한다.1 커널은 이 요청을 받아 안전성을 검증한 후, 대신 작업을 수행하고 그 결과를 사용자 공간으로 반환한다. 이처럼 엄격한 경계는 악의적이거나 오류가 있는 응용 프로그램이 시스템의 다른 부분이나 커널 자체를 손상시키는 것을 방지하는 근본적인 보호 장치 역할을 한다.3

특징 모놀리식 커널 마이크로커널 리눅스 (모듈형 모놀리식)
성능 높음 (내부 함수 호출) 낮음 (IPC 오버헤드) 높음 (모놀리식 코어)
안정성/결함 격리 낮음 (단일 장애점) 높음 (프로세스 격리) 중간 (드라이버 결함 시 위험, LKM으로 일부 완화)
확장성/유연성 낮음 (재컴파일 필요) 높음 (프로세스 추가/제거) 높음 (LKM을 통한 동적 로딩/언로딩)
드라이버 개발 커널 코드에 통합 별도의 사용자 프로세스 커널 모듈(.ko)로 개발 및 배포
대표 시스템 전통적 Unix Mach, QNX Linux, FreeBSD

운영체제에서 프로세스란 실행 중인 프로그램의 인스턴스를 의미하며, 독립된 메모리 공간과 자원을 할당받는 작업의 기본 단위이다.2 리눅스 커널은 이러한 프로세스의 생성, 소멸, 그리고 실행의 전 과정을 관리한다. 커널 내에서 각 프로세스는 task_struct라는 거대한 자료구조를 통해 표현된다.16 이 구조체에는 프로세스 ID(PID), 프로세스 상태, 메모리 맵, 열린 파일 목록, 우선순위 등 프로세스에 관한 모든 정보가 담겨 있다.

리눅스 프로세스 모델의 가장 중요한 특징 중 하나는 커널 수준에서 프로세스와 스레드를 근본적으로 구분하지 않는다는 점이다. 다른 운영체제들이 프로세스와 스레드를 위한 별개의 자료구조와 관리 메커니즘을 갖는 것과 달리, 리눅스에서 스레드는 단순히 ‘경량 프로세스(Lightweight Process, LWP)’로 취급된다.15 즉, 스레드 역시 task_struct 구조체로 표현되는 독립적인 스케줄링 단위이지만, 다른 스레드(또는 프로세스)와 주소 공간, 파일 디스크립터 테이블과 같은 자원을 공유하도록 설정된 것뿐이다.17 이러한 통일된 모델은

clone() 시스템 호출을 통해 구현되는데, 이 함수는 새로 생성될 태스크가 부모와 어떤 자원을 공유할지를 플래그를 통해 세밀하게 제어할 수 있게 해준다.19 이처럼 프로세스와 스레드를 ‘태스크(Task)’라는 단일 개념으로 추상화한 것은 커널 스케줄러의 설계를 크게 단순화하고 일관성을 높이는 효과를 가져왔다.

리눅스에서 새로운 프로세스를 생성하고 실행하는 과정은 전통적인 유닉스의 방식을 따르며, 주로 fork()exec() 시스템 호출의 조합으로 이루어진다.20

이러한 메커니즘을 통해 리눅스에서 새로운 프로그램을 실행하는 전형적인 패턴은 부모 프로세스가 fork()를 호출하여 자식 프로세스를 만들고, 그 자식 프로세스가 exec()를 호출하여 자신을 새로운 프로그램으로 변신시키는 것이다.20 한편, 시스템이 부팅될 때 생성되는 init 프로세스(PID 1)는 모든 사용자 프로세스의 시조 역할을 하며, 부모 프로세스가 먼저 종료되어 고아가 된 ‘고아 프로세스(orphan process)’를 입양하여 관리하는 중요한 책임을 진다.10 또한, 부모 프로세스는 wait() 시스템 호출을 사용하여 자식 프로세스가 종료될 때까지 기다리고 종료 상태 정보를 수거함으로써, 자원이 해제되지 않고 시스템에 남아있는 ‘좀비 프로세스(zombie process)’의 발생을 방지한다.21

리눅스 커널 2.6.23 버전부터 도입된 ‘완전 공정 스케줄러(Completely Fair Scheduler, CFS)’는 일반(실시간이 아닌) 프로세스를 위한 기본 스케줄러이다.24 CFS의 설계 목표는 복잡한 휴리스틱을 배제하고, 모든 프로세스에게 CPU 시간을 ‘완벽하게 공정하게’ 분배하는 것이다.16 CFS는 마치 시스템에 무한히 빠른 CPU가 있어서 모든 프로세스를 동시에, 하지만 각자의 우선순위에 비례하는 속도로 실행하는 이상적인 모델을 모방하고자 한다.

리눅스 커널의 메모리 관리 시스템의 핵심은 ‘가상 메모리(Virtual Memory)’라는 강력한 추상화 기법이다. 커널은 물리적인 RAM의 실제 주소를 직접 노출하는 대신, 각 프로세스에게 자신만의 독립적이고 연속적인 가상 주소 공간(Virtual Address Space)을 제공한다.2 이 가상 주소 공간은 일반적으로 32비트 시스템에서는 4GB, 64비트 시스템에서는 훨씬 더 큰 크기를 가지며, 이는 실제 시스템에 장착된 물리 메모리의 크기와 무관하다. 이 추상화는 다음과 같은 결정적인 이점을 제공한다.

이러한 가상 메모리 관리의 복잡성은 사용자에게는 완전히 감춰져 있다. 개발자는 마치 자신의 프로그램이 거대하고 독점적인 메모리 공간을 사용하는 것처럼 코드를 작성할 수 있으며, 실제 물리 메모리를 할당하고 관리하는 모든 작업은 커널이 투명하게 처리한다. 이는 메모리 관리를 하나의 정교한 ‘착각의 게임’으로 볼 수 있다. 가상 메모리는 거대한 전용 공간의 착각을, 요구 페이징은 프로그램 전체가 메모리에 로드된 착각을, 캐싱은 느린 디스크가 빠른 것처럼 보이는 착각을 만들어낸다. 커널의 역할은 이러한 착각들을 효율적이고 끊김 없이 유지하는 것이다.

가상 주소를 실제 물리 주소로 변환하는 작업은 순수하게 소프트웨어만으로 처리하기에는 너무 느리다. 따라서 이 과정은 CPU 내에 탑재된 ‘메모리 관리 장치(Memory Management Unit, MMU)’라는 특수한 하드웨어의 도움을 받아 수행된다.29

커널은 각 프로세스를 위해 ‘페이지 테이블(Page Table)’이라는 자료구조를 생성하고 관리한다.29 페이지 테이블은 가상 주소 공간을 ‘페이지(Page)’라는 고정된 크기(보통 4KB)의 블록으로 나누고, 물리 메모리는 ‘프레임(Frame)’이라는 동일한 크기의 블록으로 나누어, 어떤 가상 페이지가 어떤 물리 프레임에 매핑되는지에 대한 정보를 담고 있다. 프로세스가 특정 가상 주소에 접근하면, MMU는 해당 주소를 페이지 번호(Page Number)와 페이지 내 오프셋(Offset)으로 분리한다. 그 후, 페이지 번호를 인덱스로 사용하여 현재 프로세스의 페이지 테이블을 조회하고, 매핑된 물리 프레임 번호를 찾아낸다. 마지막으로 이 프레임 번호에 오프셋을 더하여 최종적인 물리 주소를 계산한다.29

이 변환 과정의 속도를 높이기 위해, MMU는 ‘변환 색인 버퍼(Translation Lookaside Buffer, TLB)’라는 고속 캐시를 사용한다.29 TLB는 최근에 사용된 가상-물리 주소 변환 정보(페이지 테이블 엔트리)를 저장한다. MMU가 주소 변환을 시도할 때, 먼저 TLB를 확인하여 원하는 정보가 있으면(TLB Hit), 느린 메인 메모리의 페이지 테이블까지 접근할 필요 없이 즉시 물리 주소를 얻을 수 있다. 정보가 없으면(TLB Miss) MMU는 페이지 테이블을 직접 참조하고, 그 결과를 TLB에 새로 저장한다. 이처럼 현대 운영체제의 메모리 관리는 하드웨어(MMU, TLB)와 소프트웨어(커널의 페이지 테이블 관리 및 예외 처리)가 긴밀하게 협력하는 공동 설계 시스템의 전형적인 예이다. 커널은 하드웨어가 사용할 자료구조를 설정하고, 하드웨어는 변환에 실패했을 때 예외를 발생시켜 다시 소프트웨어에게 제어권을 넘긴다.

32비트 시스템에서 4KB 페이지를 사용하는 경우를 가정해 보자. 전체 4GB의 가상 주소 공간을 매핑하기 위해서는 약 100만 개(220)의 페이지 테이블 엔트리가 필요하다. 각 엔트리가 4바이트라고 하면, 프로세스 하나당 페이지 테이블의 크기만 4MB에 달한다.29 대부분의 프로세스는 이 광대한 주소 공간의 극히 일부만 사용하므로, 단일 페이지 테이블을 사용하는 것은 엄청난 메모리 낭비이다.35

리눅스는 이 문제를 해결하기 위해 ‘다단계 페이지 테이블(Multi-level Page Table)’ 또는 ‘계층적 페이징(Hierarchical Paging)’ 기법을 사용한다.31 32비트 시스템에서는 보통 2단계, 64비트 시스템에서는 3단계 또는 4단계 구조가 사용된다. 예를 들어 2단계 페이징에서는, 가상 주소의 상위 비트들이 ‘페이지 디렉토리(Page Directory)’라는 최상위 테이블의 인덱스로 사용된다. 페이지 디렉토리의 각 엔트리는 ‘페이지 테이블’의 주소를 가리킨다. 가상 주소의 중간 비트들이 이 페이지 테이블의 인덱스로 사용되어 최종적으로 물리 프레임의 주소를 찾게 된다. 이 구조의 핵심적인 장점은, 만약 프로세스가 특정 거대한 주소 영역(예: 2MB)을 전혀 사용하지 않는다면, 페이지 디렉토리에서 해당 영역을 가리키는 엔트리를 그냥 NULL로 설정하면 된다는 것이다. 이렇게 하면 그 영역에 해당하는 하위 페이지 테이블 전체(수백 개의 엔트리)를 위한 메모리를 할당할 필요가 없어진다.35 이를 통해 페이지 테이블이 차지하는 메모리 공간을 획기적으로 줄일 수 있다.

리눅스는 ‘요구 페이징(Demand Paging)’ 기법을 사용하여 메모리 효율성을 극대화한다. 이는 프로세스가 시작될 때 프로그램의 모든 부분을 메모리에 올리는 것이 아니라, 특정 페이지가 실제로 접근될 때(즉, ‘요구’될 때) 비로소 디스크에서 메모리로 해당 페이지를 가져오는 방식이다.31

디스크 I/O는 매우 느린 작업이므로, 리눅스는 성능 향상을 위해 여러 수준의 캐시를 적극적으로 활용한다.

리눅스 커널의 또 다른 위대한 설계 중 하나는 ‘가상 파일 시스템(Virtual File System, VFS)’ 또는 ‘가상 파일 시스템 스위치(Virtual Filesystem Switch)’라 불리는 추상화 계층이다.38 VFS는 사용자 공간의 응용 프로그램들이 파일 시스템의 종류에 관계없이 일관된 시스템 호출(예: open(), read(), write(), close())을 사용하여 파일에 접근할 수 있도록 해주는 핵심적인 소프트웨어 계층이다.11 VFS 덕분에 리눅스는 ext4, XFS, Btrfs와 같은 네이티브 파일 시스템뿐만 아니라, Windows의 NTFS, macOS의 HFS+, 그리고 NFS와 같은 네트워크 파일 시스템까지 수많은 종류의 파일 시스템을 동시에 마운트하고 매끄럽게 사용할 수 있다.10 사용자 입장에서는 이 모든 것이 단일한 계층 구조의 디렉터리 트리로 보일 뿐, 그 아래에 얼마나 다양한 파일 시스템이 연결되어 있는지 전혀 알 필요가 없다.40

VFS가 이러한 강력한 추상화를 달성하는 비결은 ‘공통 파일 모델(Common File Model)’에 있다. 이 모델은 C언어로 구현되었지만, 객체 지향 설계 사상을 차용하여 모든 파일 시스템을 표현할 수 있는 네 가지 핵심 자료구조(객체)를 정의한다.38

이러한 VFS의 설계는 C언어와 같은 절차적 언어 내에서 객체 지향 원리(추상화, 다형성)를 구현한 탁월한 사례이다. VFS는 inode, file 등 추상화된 ‘객체’를 정의하고, 각 객체는 operations라는 함수 포인터 테이블을 가진다. 실제 파일 시스템(예: ext4)은 이 테이블을 자신의 구체적인 함수들로 채워 넣는다. VFS 코드는 이 추상화된 인터페이스(예: file->f_op->read())를 호출할 뿐이지만, 실제로는 다형성에 의해 ext4의 read 함수가 실행된다. 이는 새로운 파일 시스템을 추가할 때 VFS의 핵심 코드를 수정할 필요 없이, 단지 새로운 operations 세트를 구현하여 등록하기만 하면 되므로 엄청난 확장성을 제공한다.

VFS의 작동 메커니즘은 시스템 호출과 operations 구조체의 연동을 통해 이루어진다.

  1. 사용자 프로세스가 read()와 같은 파일 관련 시스템 호출을 실행하면, 제어권이 커널로 넘어와 VFS 계층이 이 요청을 받는다.38
  2. VFS는 프로세스가 전달한 파일 디스크립터를 통해 해당 요청이 어떤 file 객체와 연관되어 있는지 파악한다.
  3. file 객체는 file_operations라는 구조체를 가리키는 포인터(f_op)를 가지고 있다. 이 구조체는 read, write, open, release 등 파일에 수행될 수 있는 모든 연산에 대한 함수 포인터들의 집합이다.38
  4. VFS는 이 file_operations 테이블에서 해당 연산(이 경우 read)에 해당하는 함수 포인터를 찾아 호출한다.
  5. 이 함수 포인터는 파일이 처음 열릴 때, 해당 파일이 속한 실제 파일 시스템(예: ext4, NTFS)에 의해 자신의 구체적인 read 함수 주소로 설정되었다.
  6. 결과적으로, VFS의 일반적인 read 요청은 실제 파일 시스템의 특화된 read 함수로 전달(dispatch)되어 실행된다.10

이러한 메커니즘을 통해 VFS는 ‘어떻게’ 파일을 읽을지에 대한 구체적인 내용은 알지 못한 채, 단지 ‘읽으라’는 명령을 하달하는 중재자 역할만을 수행한다. 실제 작업은 각 파일 시스템이 알아서 처리한다.

리눅스의 “모든 것은 파일이다(everything is a file)”라는 설계 철학은 VFS를 통해 장치(device)에까지 확장된다.46 키보드, 마우스, 하드 디스크, 직렬 포트와 같은 모든 하드웨어 장치들은 /dev 디렉터리 내의 특수 파일(special file) 형태로 사용자 공간에 노출된다 (예: /dev/sda1, /dev/tty0).10

사용자 프로그램은 이 장치 파일을 일반 파일처럼 open(), read(), write() 할 수 있다. 이 요청 역시 VFS를 통해 처리된다. 해당 장치를 위한 장치 드라이버는 VFS가 요구하는 file_operations 구조체를 구현하여 커널에 등록한다.46 사용자가 /dev/tty0에 데이터를 write()하면, VFS는 tty 드라이버가 등록한 write 함수를 호출하고, 이 함수가 실제로 직렬 포트 하드웨어에 데이터를 전송하는 것이다. 이처럼 VFS는 파일 시스템뿐만 아니라 장치 드라이버까지 아우르는, 시스템 I/O 전반에 대한 통일된 추상화 인터페이스를 제공한다.

VFS 객체 핵심 목적 저장하는 주요 정보 디스크/메모리
superblock 마운트된 파일 시스템 전체를 표현 파일 시스템 유형, 블록 크기, 마운트 옵션 디스크의 슈퍼블록 정보를 읽어와 메모리에 생성
inode 특정 파일/디렉터리를 표현 권한, 소유자, 크기, 데이터 블록 포인터 디스크의 inode 정보를 읽어와 메모리에 생성
dentry 파일 이름과 inode를 연결 이름, 부모 디렉터리, 자식 dentry 목록 순수 메모리 객체 (캐시 목적)
file 프로세스에 의해 열린 파일을 표현 파일 오프셋, 접근 모드 순수 메모리 객체 (프로세스별 상태)

리눅스 커널 개발은 거대하고 분산되어 있지만, 명확한 계층 구조를 통해 질서 있게 운영된다. 이 구조는 종종 ‘자애로운 종신 독재자(Benevolent Dictator for Life)’ 모델로 묘사된다.

이러한 개발 프로세스는 단순히 코드의 기술적 우수성뿐만 아니라, 전 세계 수천 명의 기여를 체계적으로 통합하고 품질을 유지하는 사회적, 관리적 시스템의 정수라 할 수 있다. 즉, 리눅스 커널의 성공은 코드 자체뿐만 아니라 이 정교한 개발 프로세스라는 ‘제품’ 덕분이기도 하다.

리눅스 커널 개발은 매우 규칙적이고 예측 가능한 주기를 따른다.

리눅스 커널에 기여되는 모든 코드는 반드시 GNU GPL 버전 2와 호환되는 라이선스 하에 배포되어야 한다.48 GPLv2는 리눅스 생태계를 지탱하는 법적, 철학적 기반이며 다음과 같은 중요한 특징을 가진다.

리눅스 생태계는 순수한 자원봉사자들의 커뮤니티를 넘어, 치열한 경쟁 관계에 있는 글로벌 기업들이 공존하며 협력하는 독특한 ‘협력적 경쟁(co-opetition)’의 장이다. 레드햇, 구글, 인텔, 삼성, IBM과 같은 거대 기술 기업들은 리눅스 커널의 최대 기여자 그룹에 속한다. 이들은 자사 제품과 서비스의 기반이 되는 커널의 발전을 위해 엔지니어들을 고용하여 커널 개발에 직접 참여시킨다.

이 생태계에는 특정 칩셋을 위한 드라이버와 BSP(Board Support Package)를 개발하는 SoC 벤더(퀄컴, 엔비디아, 브로드컴 등)와, 이들의 결과물을 받아 스마트폰, 자동차, 가전제품 등 최종 제품을 만드는 OEM(Original Equipment Manufacturer) 업체들이 복잡하게 얽혀 있다.47 이들은 시장에서는 경쟁자이지만, 모두가 의존하는 공통의 기반인 리눅스 커널의 발전을 위해서는 협력해야만 하는 구조이다. 이러한 상업적 참여는 커널 개발에 막대한 자원과 인력을 투입하게 하여, 리눅스가 빠르게 변화하는 기술 환경에 지속적으로 적응하고 발전할 수 있는 원동력이 된다.

리눅스와 Windows NT 커널은 현대 운영체제를 대표하는 양대 산맥이지만, 그 내부 구조와 설계 철학은 근본적인 차이를 보인다.

Apple의 macOS와 iOS의 심장인 XNU 커널 역시 리눅스와는 다른 진화의 길을 걸어왔다.

세 커널은 모두 유닉스라는 공통의 조상에서 출발했지만, 각기 다른 진화 경로를 택했다. 리눅스는 전통적인 모놀리식 모델을 유지하고 LKM으로 유연성을 더하며 성능을 극대화하는 실용적인 길을 선택했다. NT는 과거와의 단절을 선언하며 안정성과 보안을 위한 새로운 객체 지향 하이브리드 모델을 추구했다. XNU는 기존의 검증된 오픈소스 자산(Mach, BSD)을 결합하여 안정성과 유닉스 호환성을 동시에 확보하는 하이브리드 방식을 택했다.

성능 면에서, 리눅스의 가볍고 효율적인 모놀리식 설계는 종종 원시적인 컴퓨팅 및 I/O 벤치마크에서 Windows를 능가하는 결과를 보여준다.51 NT의 정교한 객체 모델은 설계적으로는 우아하지만, 추가적인 추상화 계층으로 인한 오버헤드가 성능에 영향을 미칠 수 있다는 비판을 받아왔다.49 유연성과 적응성 측면에서는, 리눅스의 완전한 오픈소스 특성과 방대한 커뮤니티, 그리고 LKM 시스템이 결합되어 Windows나 macOS의 폐쇄적인 생태계보다 훨씬 넓은 하드웨어 지원과 다양한 환경으로의 이식성을 가능하게 했다. 결국, 어떤 아키텍처가 절대적으로 우월하다고 말하기는 어렵다. 각 설계는 그 운영체제가 목표로 하는 시장, 개발 철학, 그리고 역사적 배경이 반영된 트레이드오프의 결과물이다.

특징 리눅스 커널 Windows NT 커널 XNU 커널
핵심 아키텍처 모듈형 모놀리식 하이브리드 하이브리드 (Mach + BSD)
설계 철학 “모든 것은 파일이다” (유닉스) 객체 지향 마이크로커널 + 모놀리식 서비스
프로세스 모델 엄격한 부모-자식 계층 독립적 개체 BSD 기반 유닉스 프로세스 모델
주요 API POSIX Win32 API, Native API POSIX, Cocoa
드라이버 프레임워크 LKM (C 기반) WDM/WDF (C/C++ 기반) IOKit (C++ 기반)
라이선스 오픈소스 (GPLv2) 독점 (Proprietary) 오픈소스 (APSL/GPL 등)
주요 사용 사례 서버, 클라우드, 임베디드, 모바일 (Android) 데스크톱, 기업 서버 데스크톱 (macOS), 모바일 (iOS)

리눅스 커널의 미래를 논할 때 가장 뜨거운 감자는 단연 ‘Rust’ 언어의 도입이다. 이는 단순한 기술적 논의를 넘어, 커널의 정체성과 개발 문화를 둘러싼 거대한 논쟁으로 비화하고 있다.

리눅스 커널의 보안은 이론적인 논의가 아닌, 끊임없이 발생하는 실제 공격과 방어의 연속이다. 최근의 몇 가지 주요 취약점 사례는 커널이 직면한 위협의 심각성과 본질을 명확히 보여준다.

CVE ID 통칭 취약한 서브시스템 취약점 유형 영향
CVE-2022-0847 Dirty Pipe 파이프(Pipe) 초기화되지 않은 변수 사용 로컬 권한 상승 (임의 파일 쓰기)
CVE-2023-0386 (OverlayFS) OverlayFS 파일 권한 검증 우회 로컬 권한 상승 (root 획득)
CVE-2024-53104 (Out-of-Bounds Write) (다양한 서브시스템) 범위를 벗어난 쓰기 로컬 권한 상승, 서비스 거부

리눅스 커널은 새로운 도전에 직면해 있다. 인공지능(AI)과 머신러닝의 부상은 GPU, TPU와 같은 AI 가속기 하드웨어에 대한 더 효율적이고 긴밀한 지원을 요구하고 있다. 또한, 사물 인터넷(IoT)과 엣지 컴퓨팅의 확산은 더욱 다양하고 복잡한 SoC(System-on-Chip) 하드웨어에 대한 최적화와 실시간 처리 능력의 중요성을 부각시키고 있다. 커널은 이러한 새로운 하드웨어 패러다임과 워크로드를 효과적으로 지원하기 위해 지속적으로 진화해야 하는 과제를 안고 있다.

본 보고서를 통해 분석한 리눅스 커널은 몇 가지 핵심적인 특성으로 요약될 수 있다. 첫째, 실용주의적 설계 철학이다. 모놀리식 아키텍처의 성능과 적재 가능 커널 모듈의 유연성을 결합한 하이브리드적 접근은 이데올로기보다 실용성을 우선시하는 리눅스의 핵심 정신을 보여준다. 둘째, 알고리즘적 우아함이다. CFS 스케줄러의 vruntime과 레드-블랙 트리, 메모리 관리의 다단계 페이지 테이블 등, 커널의 핵심 메커니즘들은 복잡한 문제를 단순하고 효율적인 컴퓨터 과학 원리로 해결하려는 노력이 돋보인다. 셋째, 강력한 추상화 계층이다. 가상 메모리와 가상 파일 시스템(VFS)은 하드웨어의 복잡성을 감추고 개발자에게 일관되고 사용하기 쉬운 인터페이스를 제공함으로써, 리눅스의 광범위한 이식성과 호환성의 기반이 되었다. 마지막으로, 독보적인 개발 모델이다. 전 세계 수천 명의 개발자가 참여하는 거대한 프로젝트를 체계적으로 관리하는 계층적 개발 프로세스와 GPLv2라는 확고한 법적 기반은 기술 자체만큼이나 리눅스 성공의 중요한 요인이다.

리눅스 커널이 30년이 넘는 시간 동안 기술 변화의 격랑 속에서 살아남아 번성할 수 있었던 원동력은 그 놀라운 ‘회복탄력성(resilience)’과 ‘적응력(adaptability)’에 있다. 초기의 단순한 커널에서 시작하여 서버, 모바일, 임베디드, 클라우드, 슈퍼컴퓨터에 이르기까지 모든 컴퓨팅 영역을 아우르도록 진화해 온 과정 자체가 이를 증명한다. 이제 커널은 Rust 도입이라는 또 다른 거대한 변화의 기로에 서 있다. 이 논쟁은 커널이 단순한 코드의 집합이 아니라, 살아있는 사회적 유기체임을 보여준다. 따라서 리눅스 커널의 미래는 단순히 기술적인 도전 과제(보안 강화, 새로운 하드웨어 지원 등)를 어떻게 해결하는지에만 달려있지 않다. 그보다는 커뮤니티 내의 문화적, 세대적 갈등을 어떻게 관리하고, 변화를 수용하며, 협업의 정신을 유지해 나갈 수 있는지에 대한 사회적 능력에 더 크게 좌우될 것이다. 리눅스의 가장 위대한 힘은 코드 라인에 있는 것이 아니라, 그 코드를 함께 만들어가는 사람들의 생태계에 있기 때문이다.

  1. 리눅스 커널(Linux kernel)이란 - 개념, 구성요소, 인터페이스 - Red Hat, accessed July 8, 2025, https://www.redhat.com/ko/topics/linux/what-is-the-linux-kernel
  2. 리눅스 커널(kernel) - velog, accessed July 8, 2025, https://velog.io/@attosisss_/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%BB%A4%EB%84%90kernel
  3. [OS] 커널(Kernel)이란 - 프로그래민 ‍ - 티스토리, accessed July 8, 2025, https://minkwon4.tistory.com/295
  4. 리눅스 - 위키백과, 우리 모두의 백과사전, accessed July 8, 2025, https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4
  5. [Linux] 리눅스 커널 분석(IBM) - TOP GUN - 티스토리, accessed July 8, 2025, https://hotpotato.tistory.com/90
  6. Linux 커널 및 모듈 공부 기초 - Trillion - 티스토리, accessed July 8, 2025, https://tribal1012.tistory.com/153
  7. 운영체제 아키텍처의 종류와 이해 :: 데이즈, accessed July 8, 2025, https://vmilsh.tistory.com/394
  8. 모놀리식(Monolithic) kernel과 마이크로(Micro) 커널 - 아는 개발자, accessed July 8, 2025, https://selfish-developer.com/entry/%EB%AA%A8%EB%86%80%EB%A6%AC%EC%8B%9DMonolithic-kernel%EA%B3%BC-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9CMicro-%EC%BB%A4%EB%84%90
  9. [Linux Kernel] 커널의 종류(마이크로 커널 & 모놀리식 커널) - Blue-Moon의 정리노트!!, accessed July 8, 2025, https://bluemoon-1st.tistory.com/20
  10. Linux/커널 - 나무위키, accessed July 8, 2025, https://namu.wiki/w/Linux/%EC%BB%A4%EB%84%90
  11. 리눅스 OS와 서브시스템(논문: Conceptual Architecture of the Linux …, accessed July 8, 2025, https://yonlog.tistory.com/97
  12. [리눅스]5. 커널 모듈(Kernel Module) - 대두코기 - 티스토리, accessed July 8, 2025, https://hoohaha.tistory.com/80
  13. 리눅스 커널이란?(Linux Kernel) - Somaz의 IT 공부 일지 - 티스토리, accessed July 8, 2025, https://somaz.tistory.com/345
  14. Thread와 Process, 그리고 Scheduling - Hooni’s Playground, accessed July 8, 2025, https://hooni-playground.com/1547/
  15. Process 와 Thread의 차이 - velog, accessed July 8, 2025, https://velog.io/@yoneeki1177/Process-%EC%99%80-Thread%EC%9D%98-%EC%B0%A8%EC%9D%B4
  16. 리눅스 CFS 스케줄러 - 잼잼이의 1인무역 이야기 - 티스토리, accessed July 8, 2025, https://jamcorp6733.tistory.com/201
  17. 프로세스 스레드 비교, accessed July 8, 2025, https://hwangtaehyun.github.io/blog/linux/process_thread/
  18. process vs thread - 차이점 알아보기 - Navigator Linux Kernel, accessed July 8, 2025, http://navigatorkernel.blogspot.com/2017/01/ch02-process-management2-process-vs.html
  19. fork (), vfork (), exec () 및 clone ()의 차이점 (펌) - 만두 보러 오세요 - 티스토리, accessed July 8, 2025, https://netmandoo.tistory.com/45
  20. fork vs spawn (그 외 exec, clone 등) - jopemachine. dev blog, accessed July 8, 2025, https://jopemachine.github.io/2022/01/01/Fork-Vs-Spawn-Fork-Exec-Clone/
  21. 프로세스 생성 시스템 콜 - fork(), exec() - 2, accessed July 8, 2025, https://probe29.tistory.com/40
  22. fork, vfork, clone 차이점과 exec 함수 - Navigator Linux Kernel, accessed July 8, 2025, http://navigatorkernel.blogspot.com/2017/02/process-management5-fork-vfork-clone.html
    1. 프로세스 생성 - velog, accessed July 8, 2025, https://velog.io/@sunaookamisiroko/4.-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%9D%EC%84%B1
  23. CSF 스케줄러의 구성요소 - 이것이 점프 투 공작소 - 티스토리, accessed July 8, 2025, https://jaykos96.tistory.com/27
  24. CFS 스케줄러 - goodGid - GitHub Pages, accessed July 8, 2025, https://goodgid.github.io/Scheduler-CFS/
  25. 리눅스 스케줄러 구현 (CFS) - System Designer, accessed July 8, 2025, https://systemdesigner.tistory.com/86
  26. 리눅스커널 - 프로세스 스케줄링 (3) - System Designer - 티스토리, accessed July 8, 2025, https://systemdesigner.tistory.com/19
  27. 운영체제 Linux Schedule Algorithm ( O(N), O(1), CFS, 변천사 ), accessed July 8, 2025, https://wpaud16.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-Linux-schedule-ON-O1-CFS-%EB%B3%80%EC%B2%9C%EC%82%AC
  28. [LInux Kernel] 메모리 관리 : 가상 메모리 - 까망눈 연구소, accessed July 8, 2025, https://jeongzero.oopy.io/359eaa11-b6e6-466c-a066-9ae582c886d4
  29. [Linux Kernel] Memory Management - velog, accessed July 8, 2025, https://velog.io/@whattsup_kim/Linux-Kernel-Memory-Management
  30. 리눅스 커널 - 메모리 관리 1 - Move Fast - 티스토리, accessed July 8, 2025, https://movefast.tistory.com/341
  31. [OS] Operating System - 페이징과 스와핑 - Note - 티스토리, accessed July 8, 2025, https://skyriv312079.tistory.com/255
  32. 리눅스 커널 : 메모리 관리 - KLDP Wiki, accessed July 8, 2025, https://wiki.kldp.org/Translations/html/The_Linux_Kernel-KLDP/tlk3.html
  33. [운영체제] Memory Management 6 (다단계 페이지 테이블, 역 페이지 테이블, 공유 페이지), accessed July 8, 2025, https://rannnneey.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-Memory-Management-6-%EB%8B%A4%EB%8B%A8%EA%B3%84-%ED%8E%98%EC%9D%B4%EC%A7%80-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%97%AD-%ED%8E%98%EC%9D%B4%EC%A7%80-%ED%85%8C%EC%9D%B4%EB%B8%94-%EA%B3%B5%EC%9C%A0-%ED%8E%98%EC%9D%B4%EC%A7%80
  34. 계층적 페이징 계산 과정 – JSYoo5B.Dev();, accessed July 8, 2025, https://devlog.jsyoo5b.net/ko/posts/osc_10th/ch09/hierarchical-paging-calc/
  35. [OS] 요구 페이징 - 인성의 개발 공부 노트 - 티스토리, accessed July 8, 2025, https://superohinsung.tistory.com/127
  36. [혼공컴운] Chapter 14. 가상 메모리 - velog, accessed July 8, 2025, https://velog.io/@ncookie/Chapter-14.-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC
  37. 리눅스 - 가상 파일 시스템, accessed July 8, 2025, https://dev-ahn.tistory.com/97
  38. VFS : Virtual File System - Introduction - foon’s 작업실 - 티스토리, accessed July 8, 2025, https://bearfoon.tistory.com/m/27?category=432041
  39. 가상 파일 시스템 VFS - velog, accessed July 8, 2025, https://velog.io/@ooweatah/%EA%B0%80%EC%83%81-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C-VFS
  40. 리눅스 커널 공부 정리 0x04 - 가상 파일 시스템, accessed July 8, 2025, https://5kyc1ad.tistory.com/275
  41. Linux VFS(Virtual File System), superblock, inode, file, dentry - 정보시스템감리사, 정보관리기술사 - 티스토리, accessed July 8, 2025, https://swingswing.tistory.com/319
  42. VFS 1 - 가상 파일시스템(Virtual File System) - velog, accessed July 8, 2025, https://velog.io/@jinh2352/%EA%B0%80%EC%83%81-%ED%8C%8C%EC%9D%BC%EC%8B%9C%EC%8A%A4%ED%85%9CVirtual-File-System
  43. [LinuxKernel]파일시스템, 가상 파일시스템, 슈퍼블록, 아이노드, 덴트리, 파일(FileSystem, VFS, SuperBlock, Inode, Dentry, File) - Hyo Note - 티스토리, accessed July 8, 2025, https://hyoje420.tistory.com/53
  44. [VFS] - Development - 티스토리, accessed July 8, 2025, https://4369.tistory.com/entry/VFS
  45. [LKM] Character Device Driver - Karatus - 티스토리, accessed July 8, 2025, https://karatus.tistory.com/206
  46. [ Section 2 ] 리눅스 시스템 개발 관련 생태계 - velog, accessed July 8, 2025, https://velog.io/@hyejinkwon/Section-2-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B0%9C%EB%B0%9C-%EA%B4%80%EB%A0%A8-%EC%83%9D%ED%83%9C%EA%B3%84-3790e4a3
  47. [Linux Kernel] 리눅스 커널 개발 가이드: Introduction - Endless Learning, accessed July 8, 2025, https://hyeyoo.com/110
  48. Windows NT vs. Unix: 설계 비교 GeekNews, accessed July 8, 2025, https://news.hada.io/topic?id=16692
  49. XNU - 나무위키, accessed July 8, 2025, https://namu.wiki/w/XNU
  50. 리눅스가 윈도우보다 훨씬 더 빠른 것처럼 보이는 이유는 뭐임? : r/linux, accessed July 8, 2025, https://www.reddit.com/r/linux/comments/9gwphj/why_does_linux_seem_to_be_an_order_of_magnitude/?tl=ko
  51. [논문 리뷰] Rusty Linux: Advances in Rust for Linux Kernel …, accessed July 8, 2025, https://www.themoonlight.io/ko/review/rusty-linux-advances-in-rust-for-linux-kernel-development
  52. Greg K-H: “Rust로 새로운 코드 작성은 모두에게 이익” GeekNews, accessed July 8, 2025, https://news.hada.io/topic?id=19346
  53. Rust - TQCS, accessed July 8, 2025, https://www.tqcs.io/rust-kr.html
  54. Rust(프로그래밍 언어) - 나무위키, accessed July 8, 2025, https://namu.wiki/w/Rust(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%96%B8%EC%96%B4)
  55. Rust, 소유권으로 memory safety와 thread safety를 만나다 - 설명탕, accessed July 8, 2025, https://redundant4u.com/post/rust
  56. 리눅스커널 러스트 논쟁, 다시 불타오르다 – 바이라인네트워크, accessed July 8, 2025, https://byline.network/2025/02/12-381/
  57. “러스트는 암적인 요소”… 리눅스 커널 개발자간 논란 심화 - Daum, accessed July 8, 2025, https://v.daum.net/v/20250207101150346?f=p
  58. “비생산적 논쟁에 지쳤다”…리눅스커널 러스트 전환 담당자 사임 - 지디넷코리아, accessed July 8, 2025, https://zdnet.co.kr/view/?no=20240909094905
  59. 리눅스 러스트 논쟁으로 불거진 ‘오픈소스 번아웃’ - 바이라인네트워크, accessed July 8, 2025, https://byline.network/2025/02/19-436/
  60. 리눅스커널 러스트 논쟁, 다시 불타오르다 - GeekNews, accessed July 8, 2025, https://news.hada.io/topic?id=19211
  61. 리눅스 커널에 ‘러스트’ 쓰는 날 올까 - 지디넷코리아, accessed July 8, 2025, https://zdnet.co.kr/view/?no=20210330064519
  62. “러스트는 암적인 요소”… 리눅스 커널 개발자간 논란 심화 - 지디넷코리아, accessed July 8, 2025, https://zdnet.co.kr/view/?no=20250207101134
  63. 리눅스 커널 로컬 권한 상승 취약점 (CVE-2022-0847) - MIR TEAM - 티스토리, accessed July 8, 2025, https://mirteam.tistory.com/44
  64. 리눅스 커널 보안 취약점, 발견 2년 후에도 여전히 악용 중 - SK쉴더스 루키즈, accessed July 8, 2025, https://sslc.kr/board/news/1055
  65. 리눅스 커널 취약점 CVE-2024-53104, CISA 긴급 패치 권고 - 인스피언 공식 블로그 - 티스토리, accessed July 8, 2025, https://inspien01.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%BB%A4%EB%84%90-%EC%B7%A8%EC%95%BD%EC%A0%90-CVE-2024-53104-CISA-%EA%B8%B4%EA%B8%89-%ED%8C%A8%EC%B9%98-%EA%B6%8C%EA%B3%A0
  66. 리눅스 커널 보안 업데이트 권고 - 보안 취약점 정보 포털, accessed July 8, 2025, https://knvd.krcert.or.kr/detailSecNo.do?IDX=6389