이 프로젝트는 삼성 Q1 Ultra에 윈도우 2000을 설치하기 위한 과정입니다.
https://gigglehd.com/gg/bbs/14170634 - Q1 Ultra 일대기의 시작
우여곡절 끝에 세팅이 완료된 삼성 센스 Q1 Ultra입니다.
윈도우 XP 태블릿 PC 에디션을 기본 탑재한 2007년산 UMPC로, 0.7Ghz 싱글코어라는 처참한 성능으로 인해 XP도 살짝 버겁습니다. 그래도 mSATA SSD와 2GB 램을 달아주니 생각보단 쓸만하더라구요.
그리고 전 여기에 윈도우 2000을 깔겁니다. (참고로 윈도우 2000이 설치된 컴은 써본 적 없습니다. 제가 직접 설치한 경우 제외하면 말이죠)
선발대 veritas 회원님께서 XP용 드라이버들이 2000에서 돌아가진 않는다는 후기를 남겨주셨습니다. 알려주신 덕분에 직접 테스트하는 수고를 덜었습니다. 감사합니다 SENSEI
따라서, '일반적인 방식으로' 윈도우 2000을 설치 및 세팅했을 때, XP에서 사용한 드라이버 및 유틸리티가 완벽하게 돌아간다는 행복회로는 꺼두고 생각해봅시다.
왜 안 돌아가냐고요? 당연히 드라이버와 유틸리티가 '2000에는 없는 기능'들을 사용하니까 그러겠죠.
그렇다면 그 기능들을 그냥 넣어주면 되지 않을까요?
구형 Windows 관련해서 이것저것 알아보신 분들은 소위 'Extended Kernel'이라고 불리는 것들을 아실 겁니다.
Extended Kernel은 상위 버전 운영체제의 시스템 파일 및 라이브러리를 이식해서, 원래는 안 돌아가는 프로그램 및 드라이버를 돌아가게 만들어주는 패치라고 보면 됩니다. 98/Me 용으로는 KernelEX, XP용으로는 One Core API 등등이 유명합니다.
(원본글 : http://blog.livedoor.jp/blackwingcat/archives/1299806.html)
당연히 윈도우 2000도 Extended Kernel이 있습니다. 일본의 윈도우 2000 개조 장인 'blackwingcat'이 제작한 버전이 가장 유명하고, 지금까지도 조금씩 업데이트가 되고 있습니다. 이걸 쓰면 XP에서 굴러가는 소프트웨어는 대부분 작동한다고 보면 됩니다.
문제는 이게 영문판과 일본어판밖에 없습니다.
Vista 이전 윈도우들은 언어 관련 부분이 모듈화되어 있지 않아서, 다른 언어판 업데이트를 설치하면 윈도우가 맛이 가버립니다. 2000/XP 한정으로 MUI(Multilangual User Interface)라는 방식으로 불완전한 시스템 언어 변경이 가능하긴 하지만, 전 그냥 없는 기능 취급합니다.
한글판 윈도우 95 OSR2에 영문판 USB 패치를 설치하면 이렇게 됩니다. 텍스트 렌더링이 고장나서 시작 버튼이 '시' 버튼이 되어버리고, (사진은 없지만) 블루스크린도 한국어가 완전히 깨져서 외계어로 나오는 등 별 해괴망측한 버그가 일어납니다.
결국 제가 한글판 업데이트 파일 공수한 후 파일 갈아끼워서 해결했습니다.
(참고로, 저 패치는 XUSBSUPP라고 하는 비공식 범용 USB 드라이버 업데이트입니다)
무튼 Extended Kernel을 뜯어고쳐서 한글판 Win2000에 호환되게 만드는 개조 과정에 대해 설명하려면, 일단 PE 포맷에 대해 알아야 합니다.
제 짧은 글재주보다 더 나은 거 같은 챗지피티의 PE 포맷 설명을 들고 왔습니다.
위에 Extended Kernel 설명은 조금 핀트가 엇나간 부분도 있는데 이건 나름 잘 설명해준 거 같네요.
Resource Hacker 같은 적절한 유틸을 쓰면 이렇게 내부 리소스를 뜯어볼 수 있습니다.
물론, 모든 PE 포맷 형식이 Resource Hacker에서 바로 뜯어볼 수 있는 방식으로 리소스를 저장하진 않지만, 대부분의 구형 윈도우 시스템 파일들은 바로 뜯어볼 수 있는 형식입니다.
http://blog.livedoor.jp/blackwingcat/archives/1989811.html
제작자가 이런 식으로 Extended Kernel을 다른 언어로 이식하는 방법을 알려주긴 했는데...
좀 복잡하니다. 일단 Extended Kernel에 들어있는 파일만 350개 정도 되고, 그중에서 한국어판 구동을 위해 수정해야 할 파일을 찾고, 그 파일들의 '한글판' 원본을 2000, XP, 서버 2003의 서비스팩과 업데이트 파일에서 뽑아내야 합니다.
그 후 위에 나온 Resource Hacker와 헥스에디터, 기타 PE 포맷의 중요한 부분을 건들 수 있는 유틸리티를 사용해서 각종 이미지 및 다이얼로그 등의 리소스 및 Image Base, Entry Point 주소 등 메모리 관련된 값들을 한글판 값으로 적용해야 합니다.
PE 포맷의 Image Base가 뭔지는 직접 찾아보시길 바랍니다. 저도 이게 뭔지 잘 모르거든요 (...) 뭔가 메모리 관련된 값이라는 것만 이해하고 작업중입니다.
텍스트로 설명하니 잘 와닿지가 않아서 예시 하나 가져왔습니다. 인터넷 관련 라이브러리인 wininet.dll 입니다. 위쪽 파일이 윈도우 2000 SP4 한글판이고, 아래쪽 파일이 Extended Kernel 일본어판입니다.
아래쪽은 빌드번호가 6.00.2800.1746인데, 6.00.2800은 Internet Explorer 6 서비스 팩 1 버전입니다. 이런 식으로 원본 파일이 뭔지 확인하고, 한글판 IE6 SP1 wininet.dll을 구해서 ImageBase, EntryPoint 값을 알아내고, 한글판 리소스를 추출 후 일본어판에 적용해주면 됩니다.
이제 이런 작업을 90번 정도 해주면 됩니다. 물론 inf 모딩과 리패키징이 남아있습니다
파일을 전부 수정한 뒤에도 문제가 남아있습니다.
일단 저 개조 과정 중 어딘가 잘못되어서 윈도우에 이상이 감지된다 해도, 트러블슈팅이 매우(x100) 어렵습니다. 각종 .dll 라이브러리들과 핵심 커널 파일들이 서로 얽히고 설켜있어서, DLL Hell이라고도 불리는 끔찍한 의존성 문제가 생기면 답도 없습니다.
예를 들어서 탐색기에서 오류가 발생했는데 원인이 인터넷 라이브러리에 있었다거나(...)
그리고 결정적으로 제가 디버깅에 대해선 1도 모릅니다. ollydbg나 WinDbg같은 건 이름만 들어봤고, 쓰는 법은 도저히 이해할 수 없더라고요. 애초에 메모리 구조는 커녕 파이썬도 문외한인데, PE 포맷을 만지작거리는 거 자체가 뭔가 잘못된 게 아닌가 싶네요.
작업이 언제쯤 끝날진 모르겠지만, 수능 전까지 윈도우 2000을 '완벽하게' 까는 게 목적입니다.
긴 글 읽어주셔서 감사합니다!