커널 패닉(영어: kernel panic)은 운영 체제의 커널이 치명적인 내부 오류를 감지하여 안전한 복구가 불가능하다고 판단했을 때 취하는 안전 조치를 의미한다. 이 용어는 유닉스 및 유닉스 계열 운영 체제에서 널리 사용되며, 마이크로소프트 윈도우 운영 체제에서는 이에 상응하는 개념을 버그 검사(bug check) 또는 블루 스크린 오브 데스(BSOD)라고 부른다.
커널은 운영 체제의 핵심 구성 요소로, 하드웨어와 응용 프로그램 사이의 인터페이스를 제공하고 시스템 자원을 관리하는 역할을 한다. 커널에 복구 불가능한 오류가 발생하면 시스템은 더 이상 안정적으로 동작할 수 없으므로, 데이터 손상이나 보안 위협을 방지하기 위해 시스템 활동을 중단하고 오류 정보를 출력한다. 커널 패닉이 발생하면 일반적으로 콘솔에 오류 메시지를 표시하고, 커널 메모리 이미지를 디스크에 덤프하여 사후 디버깅에 활용하며, 이후 수동 재부팅을 기다리거나 자동 재부팅을 수행한다.
커널 패닉의 개념은 초기 유닉스 버전에서 도입되었다. 유닉스 커널은 오류 감지 메커니즘인 표명(assertion)을 통해 내부의 일관성과 런타임 정확성을 관리한다. 기본적인 가정은 하드웨어와 소프트웨어가 올바르게 동작한다는 것이며, 표명이 실패하면 패닉이 발생하여 모든 시스템 활동이 자발적으로 중단된다. 이는 유닉스와 그 전신인 멀틱스(Multics) 사이의 설계 철학 차이를 보여주는 대표적인 사례로 알려져 있다. 멀틱스 개발자 톰 반 블렉(Tom van Vleck)은 유닉스 개발자 데니스 리치(Dennis Ritchie)와의 대화에서, 멀틱스에서는 코드의 절반가량이 오류 복구 코드였던 반면 유닉스에서는 그러한 처리를 생략하고 오류 발생 시 'panic'이라는 루틴을 호출하여 시스템을 중단시킨다는 점을 회고한 바 있다.
원래의 panic() 함수는 유닉스 제5판부터 VAX 기반 유닉스 32V까지 큰 변화 없이 유지되었으며, 오류 메시지만 출력한 뒤 시스템을 무한 유휴 루프로 빠져들게 했다. 이후 유닉스 코드베이스가 발전하면서 panic() 함수도 다양한 형태의 디버깅 정보를 콘솔에 출력하도록 개선되었다.
커널 패닉의 주요 원인으로는 하드웨어 오류, 운영 체제의 소프트웨어 버그, 잘못된 커널 설정이나 컴파일, 루트 파일 시스템을 찾지 못하는 경우, init 프로세스의 실행 실패 등이 있다. 리눅스의 경우 심각하지만 치명적이지 않은 오류는 커널 우프스(kernel oops)로 처리되어 커널이 계속 동작할 수 있으나, 이로 인해 일부 서브시스템이나 자원이 사용 불가능해지면 이후 완전한 커널 패닉으로 이어질 수 있다.
macOS의 경우 커널 패닉 발생 시 버전에 따라 다양한 방식으로 사용자에게 오류를 알린다. macOS 10.8 이후 버전에서는 시스템이 자동으로 재부팅되며, 재부팅 후 문제로 인해 컴퓨터가 다시 시작되었다는 메시지를 잠시 표시한다. 또한 10.8에서는 첫 패닉 발생 후 3분 이내에 5회 이상의 커널 패닉이 발생하면 "반복 커널 패닉(recurring kernel panic)"으로 간주하여 시스템을 종료하는 동작이 구현되어 있다.
리눅스 커널 6.10부터는 DRM 패닉(drm_panic) 기능이 통합되어, 디스플레이 서버가 실행 중일 때에도 블루 스크린 스타일의 패닉 화면을 표시할 수 있게 되었다. 리눅스 6.12부터는 스택 트레이스를 QR 코드로 인코딩하여 표시하는 기능도 추가되었다.
커널 패닉은 운영 체제의 안정성과 신뢰성을 평가하는 데 있어 중요한 지표로 간주되며, 시스템 관리자나 소프트웨어 개발자가 문제를 진단하는 데 필요한 고도의 기술적 정보를 제공한다.