AI 요약
WSL9x는 현대의 리눅스 기능을 윈도우 9x(95/98) 환경에 이식하기 위한 야심 찬 오픈소스 프로젝트입니다. 작성 시점 기준 최신 리눅스 커널인 6.19 버전을 활용하며, 윈도우 커널 내에서 리눅스가 협력적으로 작동하도록 설계되어 두 운영체제의 기능을 재부팅 없이 동시에 사용할 수 있습니다. 기술적으로는 패치된 리눅스 커널, VxD 드라이버, wsl.com이라는 세 가지 구성 요소가 맞물려 돌아가며, 리눅스 커널은 링 3가 아닌 링 0(커널 모드)에서 직접 실행됩니다. 특히 인공지능(AI)을 전혀 사용하지 않고 작성되었음을 강조하고 있으며, 윈도우 9x의 제한적인 시스템 구조를 GPF(일반 보호 오류) 핸들러 등을 활용해 극복한 점이 특징입니다.
핵심 인사이트
- 최신 리눅스 커널 통합: 리눅스 커널 6.19 버전을 기반으로 하며, win9x-um-6.19 브랜치를 통해 윈도우 9x 환경에 맞춰 패치되었습니다.
- 특수 메모리 주소 및 할당: 리눅스 커널은 0xd0000000이라는 고정된 베이스 주소로 컴파일되며, 리눅스 진입을 위해 System VM에서 16 KiB 크기의 스택을 할당합니다.
- 시스템 호출(Syscall) 처리 기법: 윈도우 9x의 인터럽트 기술자 테이블(IDT)이 짧아 int 0x80을 직접 설치할 수 없으므로, 대신 GPF(일반 보호 오류) 핸들러를 통해 리눅스 i386 시스템 호출을 가로채어 처리합니다.
- AI 미사용 개발: 개발자는 해당 코드를 작성하는 과정에서 인공지능 도구를 일체 사용하지 않았음을 명시적으로 밝히고 있습니다.
주요 디테일
- VxD 드라이버의 역할: 드라이버는 WSL9x의 초기화를 담당하며, DOS 인터럽트를 사용하여 디스크에서 vmlinux.elf 파일을 로드하고 메모리 맵핑을 설정합니다.
- 사용자 모드 리눅스(UML) 기반: 리눅스 커널은 UML을 기반으로 하지만, POSIX API 대신 윈도우 9x 커널 API를 호출하도록 대폭 수정되었으며 링 0에서 작동합니다.
- 콘솔 통합 메커니즘: 16비트 DOS 프로그램인 wsl.com을 클라이언트로 사용하여 MS-DOS 프롬프트를 TTY 윈도우로 활용하며, 별도의 커스텀 터미널 구현 없이도 리눅스 출력을 표시합니다.
- 인터럽트 0x29 활용: 리눅스에서 출력이 준비되면 MS-DOS VM 컨텍스트에서 int 0x29를 실행하여 화면에 문자를 출력하며, NNANSI와 같은 ANSI 드라이버를 통한 터미널 출력 제어도 가능합니다.
- 이벤트 루프 구조: 드라이버 내의 이벤트 루프는 커널 진입, IRQ 디스패칭, 사용자 공간 복귀 및 유휴 상태(idling) 처리를 관리합니다.
향후 전망
- 레트로 컴퓨팅의 확장: 윈도우 9x 시스템을 사용하는 레트로 하드웨어 유저들이 최신 리눅스 도구와 개발 환경을 동시에 활용할 수 있는 새로운 경로가 열릴 것으로 보입니다.
- 기술적 호기심 충족: 오래된 운영체제의 한계를 현대적 아키텍처(UML, VxD)로 극복하는 사례로서, 시스템 프로그래밍 커뮤니티 내에서 상당한 분석 가치를 가질 것입니다.
출처:hackernews
