
64비트 윈도우가 놓아버린 16비트 프로그램
오래된 교육용 CD나 90년대 업무 프로그램을 윈도우 10이나 11에서 실행했다가 ‘64비트 버전의 Windows와 호환되지 않는다’는 메시지를 본 적 있나요? 범인은 대개 16비트 프로그램이에요. 윈도우 3.1 시절까지의 프로그램은 16비트로 만들어졌는데, 64비트 윈도우는 이걸 아예 실행하지 못하거든요.
32비트 윈도우에는 NTVDM(NT Virtual DOS Machine)과 WOW(Windows on Windows)라는 호환 계층이 있어서 16비트 앱을 돌려줬어요. 그런데 x64 CPU가 64비트 모드(롱 모드)로 동작하면, 16비트 DOS 코드를 돌리던 ‘가상 8086 모드’를 쓸 수 없어요. 게다가 마이크로소프트가 64비트 윈도우에 16비트 서브시스템을 아예 넣지 않았고요. 윈도우 10까지는 32비트 에디션이라는 탈출구라도 있었는데, 윈도우 11은 64비트 전용이라 그 길마저 막혔어요.
winevdm은 바로 이 빈자리를 메우는 오픈소스 프로젝트예요. 실행 파일 이름을 따서 otvdm이라고도 불러요. 저장소 설명대로 윈도우 1.x, 2.x, 3.0, 3.1용 16비트 프로그램을 64비트 윈도우에서 돌리는 게 목표예요.
어떻게 동작하냐면
핵심은 두 가지 기술을 합친 거예요.
1. CPU 에뮬레이션: 64비트 모드의 CPU로는 16비트 코드를 직접 실행하기 어려워요. 그래서 winevdm은 16비트 x86 명령어를 소프트웨어로 하나하나 해석해서 실행해요. 여기엔 MAME 프로젝트의 x86 CPU 에뮬레이터 코드가 쓰였어요. 쉽게 말해 옛날 CPU를 흉내 내는 통역사를 프로그램 안에 하나 둔 셈이에요.
2. Wine의 Win16 API 구현: 16비트 프로그램은 창을 띄우거나 파일을 열 때 윈도우 3.1의 API를 불러요. KERNEL, USER, GDI 같은 16비트 DLL들이요. 리눅스에서 윈도우 프로그램을 돌려주는 Wine에는 이 16비트 API를 32비트 API로 이어주는 코드가 이미 있었는데요. winevdm은 이걸 가져와서 윈도우 위에서도 돌아가게 만들었어요. 그래서 16비트 앱이 CreateWindow를 부르면, 결국 지금 윈도우에 진짜 창이 만들어져요.
이 구조의 장점은 가상 머신처럼 윈도우 3.1을 통째로 설치할 필요가 없다는 거예요. 16비트 앱 창이 지금 쓰는 데스크톱에 다른 앱처럼 그냥 떠요. 파일도 원래 쓰던 파일 시스템을 그대로 쓰고요.
써보는 방법
GitHub 릴리스에서 압축 파일을 받아 풀고, 명령줄에서 otvdm.exe 프로그램.exe처럼 16비트 실행 파일을 넘겨주면 돼요. 함께 들어 있는 설치 스크립트를 실행하면 레지스트리가 설정돼서, 그다음부터는 16비트 exe를 더블클릭만 해도 winevdm이 알아서 떠요.
특히 쓸모 있는 게 16비트 설치 프로그램이에요. 90년대 후반 32비트 프로그램 중에도 설치 프로그램(setup.exe)만 16비트인 경우가 꽤 많았거든요. 본체는 멀쩡히 돌아가는데 설치를 못 해서 포기했던 프로그램도, winevdm으로 설치까지 끝낼 수 있는 경우가 있어요.
다른 방법과 비교하면
16비트 프로그램을 돌리는 방법은 winevdm 말고도 있어요.
- DOSBox + 윈도우 3.1: DOS 환경을 통째로 흉내 내고 그 안에 윈도우 3.1을 설치해요. 호환성은 좋은데, 윈도우 3.1 설치 파일이 따로 있어야 하고 지금 쓰는 PC와 파일이나 클립보드를 주고받기가 불편해요.
- 86Box, PCem: 옛날 PC 하드웨어를 칩 수준까지 재현해요. 정확도는 제일 높지만 설정이 번거로워요.
- 가상 머신 + 32비트 윈도우: VirtualBox 같은 데 32비트 윈도우 XP나 10을 올려서 NTVDM을 쓰는 방법이에요. 원래 환경에 제일 가깝지만 무겁고, 라이선스도 신경 써야 해요.
- 리눅스의 Wine: 리눅스에서는 Wine이 16비트 앱도 꽤 잘 돌려요. winevdm은 그 능력을 윈도우로 다시 들여온 셈이에요.
한국 개발자에게 주는 시사점
“요즘 누가 16비트 앱을 써?” 싶겠지만, 현장에는 생각보다 많이 남아 있어요. 공장 설비에 연결된 오래된 설정 툴, 소스도 업체도 사라진 사내 업무 프로그램, 90년대 교육용 CD-ROM 타이틀 같은 것들이요. 윈도우 11로 넘어가야 하는데 이런 프로그램 하나 때문에 구형 PC를 못 버리고 있다면, 가상 머신을 꾸리기 전에 winevdm부터 테스트해 볼 만해요.
다만 실무에 넣기 전에 조심할 점도 있어요. 레지스트리를 건드리는 도구라서 업무용 PC에 설치하기 전에 별도 환경에서 충분히 검증해야 해요. 중요한 데이터를 다루는 프로그램이라면 결과가 원래 환경과 같은지 꼼꼼히 비교해 보시고요.
공부하기에도 좋은 프로젝트예요. CPU 에뮬레이터와 API 변환 계층이 어떻게 맞물리는지 실제 코드로 볼 수 있는 경우가 흔치 않거든요. 호환성 계층, 에뮬레이션, ABI 같은 주제에 관심 있다면 소스를 한번 둘러보세요.
마무리
한 줄 정리: winevdm은 CPU 에뮬레이션과 Wine의 Win16 구현을 합쳐서, 64비트 윈도우에서 사라진 16비트 호환 계층을 되살려 주는 프로젝트예요.
여러분 주변에도 아직 은퇴하지 못한 16비트 프로그램이 있나요? 그런 레거시는 에뮬레이션으로 살려 두는 편인가요, 아니면 과감히 새로 만드는 편인가요?
🔗 출처: Hacker News