TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 28 READS

M4 맥미니에서 리눅스 GPU 가속을, 한 달 만에 GPU 드라이버를 만든 이야기

무슨 일이 있었나요

애플 실리콘 맥에 리눅스를 올리는 Asahi Linux 프로젝트, 들어보셨을 거예요. M1과 M2 맥에서는 GPU 가속까지 되는 꽤 쓸 만한 데스크톱이 됐는데, M3와 M4 세대는 아직 공식 지원이 없고 특히 GPU 가속이 가장 큰 걸림돌이었어요. 그런데 블로그 codyho.dev를 운영하는 개발자가 M4 맥미니에서 리눅스 GPU 드라이버를 한 달 만에 동작시키기까지의 과정을 글로 풀어놨어요. 애플이 문서를 한 줄도 공개하지 않는 GPU를 상대로 한 달이라는 시간은 정말 짧은 거라, 어떻게 가능했는지가 이 글의 재미 포인트예요.

GPU 드라이버, 이게 뭐냐면

GPU 드라이버는 크게 두 조각으로 나뉘어요. 하나는 커널 안에서 도는 커널 드라이버인데, GPU 메모리를 나눠주고, 그리기 명령을 GPU에 넘기고, 끝나면 알려주는 심부름꾼이에요. 리눅스에서는 DRM이라는 서브시스템 아래에 들어가요. 다른 하나는 유저스페이스 드라이버로, OpenGL이나 Vulkan 같은 API로 들어온 요청을 그 GPU가 알아듣는 기계어 셰이더와 명령 버퍼로 바꿔주는 번역가예요. 리눅스에서는 Mesa라는 프로젝트가 이 역할을 맡아요. 게임이나 브라우저가 "삼각형 그려줘" 하면 Mesa가 애플 GPU용 명령으로 번역하고, 커널 드라이버가 그걸 하드웨어에 배달하는 식이죠.

애플 GPU에는 특이한 점이 하나 더 있어요. GPU 옆에 펌웨어를 돌리는 작은 보조 프로세서가 붙어 있고, 이 펌웨어가 GPU 스케줄링과 전원 관리를 상당 부분 도맡아요. 그래서 리눅스 드라이버는 하드웨어 레지스터를 직접 두드리는 게 아니라, 이 펌웨어와 공유 메모리에 놓인 수백 개의 구조체로 대화해야 해요. 문제는 이 구조체 레이아웃이 펌웨어 버전마다, 칩 세대마다 바뀐다는 거예요. macOS 업데이트 하나에 필드 하나가 끼어들면 드라이버가 통째로 깨지는 구조거든요. M4가 오래 미지원이었던 이유가 바로 여기 있어요. 새 칩은 새 펌웨어를 쓰고, 그 구조체를 처음부터 다시 알아내야 하니까요.

한 달이 가능했던 이유

맨땅에서 시작한 게 아니라는 점이 중요해요. Asahi 프로젝트가 몇 년에 걸쳐 쌓아둔 자산이 있거든요. 커널 쪽에는 Asahi Lina가 Rust로 작성한 drm/asahi 드라이버가 있고, 유저스페이스 쪽에는 Alyssa Rosenzweig가 이끈 Mesa의 AGX 셰이더 컴파일러와 Honeykrisp Vulkan 드라이버가 있어요. 유저스페이스 쪽은 상당 부분 재활용할 수 있어서, 일의 무게중심은 커널 쪽 펌웨어 인터페이스를 M4에 맞게 다시 맞추는 데 실리게 돼요.

그 "다시 맞추는" 작업의 핵심 도구가 m1n1이라는 부트로더 겸 하이퍼바이저예요. 이걸로 macOS를 가상머신처럼 띄워놓고, macOS의 정식 GPU 드라이버가 펌웨어와 주고받는 메모리 쓰기를 전부 기록해요. 그러면 "여기 이 오프셋에 이 값을 쓰니까 GPU가 돌아가더라"는 식의 단서가 쌓이고, 그걸 Rust 구조체로 옮겨 적는 거죠. 지루하고 끈기가 필요한 작업이지만, 방법론과 도구가 이미 정립돼 있어서 한 사람이 한 달 동안 집중하면 첫 삼각형이 뜨는 데까지 갈 수 있었던 거예요. 물론 "삼각형이 뜬다"와 "데스크톱을 매일 쓸 수 있다" 사이에는 전원 관리, 안정성, 성능 튜닝이라는 긴 길이 남아 있어요.

업계 흐름에서 보면

문서 없는 GPU를 역공학해서 오픈소스 드라이버를 만드는 건 리눅스 그래픽 세계의 오랜 전통이에요. NVIDIA를 상대한 Nouveau, ARM Mali를 상대한 Panfrost, 퀄컴 Adreno를 상대한 Freedreno가 다 그렇게 태어났어요. 애플 GPU 드라이버는 그 계보에서 특히 눈에 띄는데, 리눅스 커널용으로 Rust로 작성된 첫 본격적인 GPU 드라이버라는 점 때문이에요. 펌웨어 구조체를 수백 개 다뤄야 하는 코드에서 Rust의 타입 시스템이 실수를 얼마나 막아주는지 보여주는 살아있는 사례거든요.

Asahi 프로젝트는 2025년에 창립자가 떠나는 등 우여곡절이 있었고, M3와 M4 지원은 그 뒤로 커뮤니티의 가장 큰 숙제였어요. 이번 작업은 프로젝트 바깥의 개발자도 축적된 도구와 지식만 있으면 이 숙제에 기여할 수 있다는 걸 보여준 사례라서 의미가 커요.

한국 개발자에게는

당장 M4 맥미니에 리눅스 데스크톱을 깔아 쓰라는 얘기는 아니에요. 아직 실험 단계니까요. 하지만 이 글은 시스템 프로그래밍을 배우고 싶은 분에게 훌륭한 교재예요. 커널 드라이버와 유저스페이스 드라이버가 어떻게 나뉘는지, 펌웨어와 공유 메모리로 대화한다는 게 무슨 뜻인지, 하이퍼바이저로 다른 OS의 동작을 훔쳐본다는 게 어떻게 가능한지가 구체적인 사례로 나오거든요. Rust로 커널 코드를 써보고 싶다면 drm/asahi 코드베이스는 읽어볼 가치가 충분하고요.

실용적인 관점도 있어요. M4 맥미니는 가격 대비 성능과 전력 효율이 뛰어나서 홈서버나 CI 러너로 쓰고 싶어 하는 분이 많은데, GPU 가속이 되는 리눅스가 안정화되면 선택지가 확 넓어져요.

정리하면

한 달 만의 M4 GPU 드라이버는 한 사람의 천재성보다 Asahi 커뮤니티가 몇 년간 쌓은 도구와 방법론 위에서 가능했던 결과예요. 역공학 드라이버의 진짜 병목은 코드 작성이 아니라 "하드웨어가 뭘 원하는지 알아내는 것"이고, 그 알아내는 방법이 이제 꽤 체계화됐다는 뜻이기도 하고요.

여러분은 애플 하드웨어에 리눅스를 올려 쓸 생각이 있으신가요? 아니면 애플이 직접 문서를 열어주기 전까지는 손대지 않는 게 맞다고 보시나요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://codyho.dev/blog/gpu-driver/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...