취미 OS에서 윈도우 게임 실행 성공기

by DD
12시간 전
조회수 2

취미 OS 'Astral'에 Wine 포팅을 성공하여 32비트 윈도우 게임 실행 기반 마련

WoW64 모드 구현으로 64비트 OS에서 32비트 코드 실행 가능성 입증

EGL 및 Mesa 패치를 통해 OpenGL 지원을 재구성하며 그래픽 렌더링 문제 해결

TCP 통신 버그 수정으로 게임 내 점수 업로드 기능 복구 및 실용성 향상

32비트 Windows 프로그램 실행을 위한 WoW64 모드 구현

Astral OS는 64비트 전용 환경임에도 불구하고, Wine의 WoW64(Windows 32-bit on Windows 64-bit) 모드를 성공적으로 구현하여 32비트 Windows 프로그램을 실행시켰습니다. 이는 커널 레벨에서의 LDT(Local Descriptor Table) 지원을 통해 가능했으며, 64비트 프로세스 내에서 32비트 시스템 콜 및 데이터 구조 변환을 처리합니다. 이 과정은 32비트 사용자 공간(32-bit Userspace) 라이브러리 없이 32비트 코드를 실행할 수 있게 하여 시스템 복잡성을 줄이는 데 기여했습니다.

OpenGL 지원 재구성을 위한 EGL 및 Mesa 패치

Wine이 그래픽 렌더링을 위해 필수적으로 요구하는 EGL(Embedded-System Graphics Library) 지원이 Astral OS의 Mesa 구현에 누락되어 있었습니다. 개발자는 Mesa의 xlib 백엔드(Xlib Backend)가 EGL을 지원하지 않는다는 사실을 발견하고, DRI(Direct Rendering Infrastructure) 백엔드로 전환하는 복잡한 과정을 거쳤습니다. 이는 X.org 서버가 `/dev/dri` 없이도 시작될 수 있도록 Mesa를 패치하는 수준까지 이르렀으며, 최종적으로 Deltarune과 같은 실제 게임의 그래픽 렌더링을 가능하게 했습니다.

TCP 통신 버그 수정과 PE-to-Unix 디스패처 문제

Cogmind 게임의 점수 업로드 기능 실패는 초기에는 네트워크 스택 문제로 추정되었으나, 실제 원인은 Wine의 PE(Portable Executable) 파일 형식과 Unix 시스템 간의 시스템 콜 디스패처(Syscall Dispatcher) 오류였습니다. 특히 WoW64 환경에서 `__wine_dbg_write` 함수가 작동하지 않는 문제를 해결하는 과정에서, 개발자는 `__wine_unix_call_dispatcher` 함수 내에서 레지스터 저장 누락을 발견했습니다. 이 미묘한 버그 수정이 미정의 동작(Undefined Behavior, UB)을 방지하고 TCP 연결 문제를 해결하는 결정적인 역할을 했습니다.

취미 OS의 실용성 증대와 향후 과제

이번 Wine 포팅 성공은 취미 OS가 단순한 실험을 넘어 실제 게임 플레이가 가능한 수준으로 발전할 수 있음을 보여줍니다. 커뮤니티에서는 이러한 노력이 취미 OS를 일상적인 사용(Daily Driver)으로 전환시키는 가능성을 열었다는 긍정적인 반응을 보입니다. 다만, 개발자는 아직 성능 이슈, 특정 프로그램의 호환성 문제(Steam, Firefox 등), 그리고 커널 레벨의 최적화 등 해결해야 할 과제가 남아있음을 인지하고 있습니다.

Porting WINE to a new Hobby OS