핵심 요약
- 한 개발자가 UEFI 펌웨어 명세를 연구하여 어셈블리어 없이 순수 러스트(Rust)만으로 64비트 부팅 애플리케이션을 구현했습니다.
- 과거 16비트부터 거쳐야 했던 복잡한 부팅 과정 대신, UEFI의 C 인터페이스를 러스트로 매핑해 곧바로 64비트 모드에서 진입할 수 있음을 보여줍니다.
- UTF-16 문자열 변환 및 포인터 처리를 거쳐 콘솔 화면에 'Hello, World!' 출력을 성공시켰습니다.
요약 과거 PC 부팅 환경에서는 어셈블리어(Assembly)를 직접 다루며 16비트 리얼 모드에서 32비트 보호 모드를 거쳐 64비트 모드로 단계별 진입하는 복잡하고 고된 과정을 거쳐야 했습니다. 하지만 최신 UEFI 펌웨어 환경을 분석한 한 개발자가 어셈블리어를 단 한 줄도 작성하지 않고 러스트(Rust)만으로 곧바로 64비트 모드에서 실행되는 부팅 애플리케이션을 구현할 수 있음을 확인하고 그 과정을 정리했습니다.
UEFI 환경에서는 펌웨어가 복잡한 초기 부팅 절차를 대신 처리해주며, 실행 파일을 로드해 기본 콘솔 지원 및 풍부한 API 접근용 함수 포인터를 넘겨주는 '애플리케이션' 구조로 동작합니다. 부트로더 역시 펌웨어로 제어권을 돌려주는 대신 OS로 넘겨주는 일종의 애플리케이션에 불과합니다. 특히 UEFI 스펙이 제공하는 API는 기본적으로 C 언어 기반 인터페이스로 구성되어 있어, C와의 호환성이 뛰어난 러스트의 특성을 살려 C 구조체와 함수 포인터를 러스트 코드로 손쉽게 옮겨올 수 있었습니다.
개발자는 문자열 출력을 위해 EFI 시스템 테이블 및 콘솔 출력 프로토콜 구조체를 정의하고 진입점 함수인 efi_main을 작성했습니다. 러스트의 UTF-8 문자열과 UEFI 콘솔이 요구하는 UTF-16 문자열 간의 차이로 인해 각 문자를 u16 배열로 변환하고 널 종료 문자 및 개행 문자를 맞추는 번거로움과 unsafe 블록을 통한 포인터 역참조가 필요했지만, 결과적으로 러스트 언어만으로 64비트 'Hello, World!' 화면 출력을 성공적으로 구현해냈습니다. 과거 저수준 하드웨어 제어에서 느껴지던 마법 같은 묘미는 줄었지만 개발 생산성 면에서는 큰 진전이라는 평입니다.
Sponsored · 광고