TECH 으로 돌아가기
TECH HACKER NEWS 오늘 6분 읽기 23 READS

리눅스 ARM에서 macOS 바이너리를 그대로 실행한다? 'macOS판 Wine'을 노리는 Kakehashi

리눅스 ARM에서 macOS 바이너리를 그대로 실행한다? 'macOS판 Wine'을 노리는 Kakehashi
SOURCE IMAGE · HACKER NEWS
리눅스 ARM에서 macOS 바이너리를 그대로 실행한다? 'macOS판 Wine'을 노리는 Kakehashi

Wine은 아는데, macOS 버전이라고요?

리눅스에서 윈도우 프로그램을 돌려주는 Wine 아시죠? 이번에 공개된 Kakehashi(카케하시)는 말하자면 그 macOS 버전이에요. 일본어로 '가교', 그러니까 두 세계 사이에 다리를 놓는다는 뜻의 이름인데요. ARM 리눅스 위에서 macOS 바이너리를 실행하는 것을 목표로 하는 실험적인 유저스페이스 프로젝트예요. 아직 초기 단계지만, 접근 방식이 기술적으로 아주 흥미롭거든요.

에뮬레이터가 아니라 '통역사'예요

먼저 오해를 하나 풀고 갈게요. 이건 가상 머신이나 에뮬레이터가 아니에요. 에뮬레이터는 CPU 명령어 하나하나를 소프트웨어로 흉내 내기 때문에 느린데요. Kakehashi가 노리는 지점은 완전히 달라요. 애플 실리콘 맥에서 빌드된 바이너리는 ARM64 명령어로 되어 있고, 라즈베리파이 5나 Ampere 서버 같은 ARM 리눅스 기기의 CPU도 똑같은 ARM64 명령어를 실행하거든요. 즉 CPU 입장에서는 번역할 게 없어요. 문제는 그 위의 운영체제 인터페이스죠.

구체적으로 뭐가 다르냐면요. 첫째, 실행 파일 포맷이 달라요. 리눅스는 ELF라는 형식을 쓰는데 macOS는 Mach-O라는 형식을 써요. 리눅스 커널은 Mach-O 파일을 열어볼 줄 몰라서 실행 자체를 거부해요. 둘째, 시스템 콜이 달라요. 시스템 콜이 뭐냐면 프로그램이 '파일 열어줘', '메모리 줘' 하고 커널에 요청하는 창구인데, macOS의 커널인 XNU와 리눅스 커널은 이 창구의 번호와 규약이 서로 달라요. 셋째, macOS 프로그램은 dyld라는 애플 전용 동적 링커와 시스템 라이브러리에 의존해요.

그래서 Kakehashi는 Mach-O 파일을 직접 읽어서 메모리에 올리는 로더를 만들고, 프로그램이 XNU 방식으로 던지는 시스템 콜을 받아서 리눅스 시스템 콜로 번역해 주는 거예요. 프로그램은 자기가 macOS 위에서 도는 줄 알지만, 사실은 통역사를 거쳐 리눅스와 대화하고 있는 거죠. 이게 바로 Wine이 30년 가까이 갈고닦아 온 전략이에요. Wine이라는 이름 자체가 'Wine Is Not an Emulator'의 약자거든요.

물론 갈 길은 멀어요

현실적인 벽도 분명해요. 가장 큰 문제는 애플의 프레임워크예요. macOS 앱 대부분은 AppKit 같은 애플 독점 라이브러리에 기대는데, 이건 라이선스상 다른 OS에 가져다 배포할 수 없거든요. 그래서 이런 프로젝트는 시스템 콜과 기본 C 라이브러리 수준에서 도는 커맨드라인 도구부터 공략하는 게 정석이에요. GUI 앱 실행은 한참 먼 이야기고, 프로젝트 스스로도 '실험적'이라고 명확히 선을 긋고 있어요.

앞서간 프로젝트들과 비교해 보면

사실 macOS 호환 레이어의 원조는 Darling이라는 프로젝트예요. 오랫동안 x86 리눅스에서 macOS 바이너리 실행을 시도해 왔고 커맨드라인 수준에서는 꽤 진전을 이뤘지만, GUI까지는 도달하지 못했죠. Kakehashi는 여기서 무대를 ARM으로 옮긴 셈인데, 애플이 자사 하드웨어를 전부 ARM으로 전환한 지금은 이쪽이 오히려 본류가 될 수 있어요. 새로 나오는 macOS 바이너리가 죄다 ARM64니까요. 참고로 반대 방향의 성공 사례도 있어요. Wine 기반의 Proton은 스팀덱이라는 리눅스 게임기를 성공시키며 '호환 레이어가 플랫폼의 운명을 바꿀 수 있다'는 걸 증명했고, 애플의 Rosetta 2는 x86 바이너리를 ARM 맥에서 돌리는 반대편 다리 역할을 하고 있죠.

한국 개발자에게 주는 시사점

당장 실무에 쓸 물건은 아니에요. 하지만 이 방향이 성숙하면 재미있는 그림이 나와요. 예를 들어 맥 없이 리눅스 CI 서버에서 macOS용 CLI 도구를 테스트한다든가, 값싼 ARM 클라우드 인스턴스에서 macOS 빌드 산출물을 검증하는 식이죠. 그리고 무엇보다 이런 프로젝트는 최고의 학습 교재예요. 실행 파일 포맷, 링커와 로더, 시스템 콜 같은 저수준 지식은 평소 웹 개발만 해서는 접할 기회가 없는데, 이런 코드베이스를 읽으면 운영체제 수업에서 배운 이론이 실제로 어떻게 쓰이는지 생생하게 볼 수 있거든요.

정리하면, Kakehashi는 '같은 CPU, 다른 OS'라는 조건을 영리하게 활용해 macOS와 리눅스 사이에 다리를 놓으려는 시도예요. 여러분은 이런 호환 레이어가 실용 단계까지 갈 수 있다고 보세요? Wine의 성공을 재현할 수 있을지 의견이 궁금해요.


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/wie-project/kakehashi
SHARE
처리 중...