본문으로 건너뛰기

Apple 커널의 Swift 도입 분석: KernelKit과 Embedded Swift의 등장

Apple Internals: Swift in the Kernel - by Josh Maine

blog.calif.io

핵심 요약

  1. Apple이 메모리 안전한 커널 구축을 위해 'KernelKit'이라는 명칭으로 Swift를 운영체제 커널 계층에 도입하기 시작했다.
  2. macOS 27 및 iOS 27 커널 캐시 분석 결과, Embedded Swift 런타임이 포함된 새로운 Mach-O 플랫폼 ID(25~30)가 확인되었다.
  3. 현재 Swift 런타임은 커널 내에 로드되어 있으나, 기존 C/C++ 기반 XNU 코어와 직접적인 연결 없이 유휴 상태로 존재한다.

도입

Apple이 차세대 운영체제 커널 일부를 Swift로 작성하기 시작했다는 정황이 포착되었다. macOS 27 및 iOS 27의 커널 캐시와 루트 파일 시스템 분석으로 'KernelKit'이라는 명칭의 새로운 프레임워크와 전용 SDK가 드러났다. 이는 커널 계층에 메모리 안전성을 도입하려는 Apple의 전략적 움직임으로, 과거 DriverKit 도입 방식과 유사한 경로를 따르고 있다.

상세 요약

KernelKit 발견과 디렉토리 구조

macOS 27 루트 볼륨의 /System/KernelKit 디렉토리에서 Libm.kext와 pthread.kext라는 두 개의 핵심 커널 확장(kext)이 발견되었다. 이들은 기존 /System/Library/Extensions에 있는 동일 이름의 kext와 별개이며, Info.plist 분석 결과 kernelkit.macosx27.0.internal 내부 SDK로 빌드되었다. 이는 7년 전 DriverKit 도입 당시와 동일한 패턴으로, 커널 내부에 Swift 전용 독립 실행 환경을 구축하는 모습이다.

새로운 Mach-O 플랫폼 ID 분석

Apple은 KernelKit을 위해 정의되지 않았던 새로운 Mach-O 플랫폼 ID를 할당했다. LC_BUILD_VERSION 분석으로 확인된 플랫폼 번호는 다음과 같다.

  • 25: macOS-kernelKit
  • 26: iOS-kernelKit
  • 27: tvOS-kernelKit
  • 28: watchOS-kernelKit
  • 29: visionOS-kernelKit (또는 xrOS-kernelKit)
  • 30: bridgeOS-kernelKit

OS별로 고유 플랫폼 ID를 부여해 커널용 Swift 코드를 세밀하게 관리하고 있으며, Xcode 27 베타 툴체인의 링커(ld)와 Swift 프론트엔드에는 이미 관련 지원 코드가 포함되어 있다. 링커는 /System/KernelKit/usr/lib/swift를 검색 경로로 하드코딩하고 있으며, 이는 향후 커널 내 Swift 표준 라이브러리가 위치할 지점이다.

Embedded Swift 런타임의 실체

KernelKit 플랫폼으로 빌드된 pthread 바이너리에는 Embedded Swift 런타임이 정적으로 링크되어 있다. 분석 결과 약 2.4KB 규모의 __TEXT_EXEC 섹션에서 _swift_retain, _swift_release, _swift_once, _swift_dynamicCast 등 37개의 Swift 관련 심볼이 확인되었다.

이는 일반 Swift 런타임과 달리 리플렉션 섹션(__swift5_*)이 없고 제네릭이 단일화(monomorphized)된 Embedded Swift의 특성을 보여준다. 특히 swift_release는 원자적 참조 횟수 감소와 언더플로우 트랩 처리를 포함한 실제 구현체이며, _emptyBoxStorage 데이터 구조 역시 실제 런타임 사양과 일치한다.

현재 상태와 향후 전망

현재 Swift 런타임은 커널에 로드되었으나 실제로는 사용되지 않는 유휴 상태다. IDA Pro 교차 참조(xref) 분석 결과, swift_retain이나 swift_release를 호출하는 외부 커널 컴포넌트는 아직 없다. XNU 코어 역시 여전히 C11 및 C++14 기반이며, 2,000개 이상의 컴파일 단위 중 Swift로 작성된 소스는 발견되지 않았다.

Apple은 우선 SDK와 런타임 인프라를 배포해 안정성을 검증한 뒤, 점진적으로 Swift 기반 커널 컴포넌트를 추가할 것으로 보인다. 이는 Mach 코어 자체를 재작성하기보다 KernelKit이라는 새로운 계층을 통해 메모리 안전성이 보장되는 확장을 구현하려는 의도로 풀이된다.

결론

현재 KernelKit은 기능 구현보다 런타임과 플랫폼 인프라를 먼저 배포하는 초기 단계다. Swift 런타임이 커널에 포함되었음에도 XNU 코어는 여전히 C/C++ 기반이며, Swift 코드를 호출하는 지점은 아직 발견되지 않았다. 향후 베타 릴리스를 통해 Swift 기반의 새로운 커널 컴포넌트가 점진적으로 추가될 전망이며, 이는 시스템 소프트웨어 개발에서 Swift의 역할을 결정짓는 중요한 변화가 될 것이다.