[C++] Linux 서브 시스템, 윈도우 대격변의 서막

윈도우를 배울 때 누구나 그러하듯이 서브시스템이란 것이 존재하고, OS/2, POSIX, WIN32가 있다고 배운다. 하지만 그 존재를 알아채기란 쉽지 않다. 그저 그런가 보다 한다. 왜냐하면 그나마 명맥을 유지하는 거라곤 WIN32밖에 없기 때문이다. 그러다 윈도우의 역사를 좀 알게되고 데이비드 커틀러란 걸출한 프로그래머를 인식하게 되면 개발 초기에는 WIN32보다 OS/2를 지원하는 것이 무척이나 중요했다는 사실을 그나마 알게 된다. 그랬거나 말거나 OS/2는 역사의 뒤안길로 사라졌고 남은건 WIN32 밖에 없다. Windows NT가 출시되고 거의 20년간 그랬다.

그랬던 거의 존재조차 유명무실했던 서브시스템이란 존재가 20년 만에 다시 재조명되고 있다. WIN32 밖에 보지 못해 있는거야 없는거야 라고 느꼈던 많은 프로그래머들도 이제는 그것이 단지 역사가 아닌 실제 존재한다는 사실을 온몸으로 느낄 수 있게 됐다. 바로 8/2일자로 진행된 윈도우 10 1주년 업데이트로 말이다. 20년 만에 윈도우가 리눅스를 품었다. 바로 리눅스 서브시스템이 생긴 것이다. Cygwin 정도를 상상했다면 잊어도 괜찮다. ELF 바이너리가 네이티브로 돌아가는 신세계가 펼쳐지니 말이다.

인사이더 빌드 때부터 꾸준히 말이 많았지만 나이가 들어서 그런지 그래도 어느 정도 완성된 다음에 구경하고 싶은 마음에 정식 출시 하기를 기다렸다. 하지만 정식 출시에서도 베타 딱지는 아직 떼지못한 것으로 보여진다.

윈도우 10 1주년 업데이트는 여기서 다운로드 받아서 설치하면 된다. bash쉘을 활성화하는 법은 정성태 님의 글을 참고 하자. 그저 여기서는 맛배기로 대격변의 서막이 어떻게 진행되고 있는지만 살펴보기로 하자.

#0

wsl1
Figure 1. 프로세스 트리

우선 프로세스 트리다. bash.exe가 일종의 게이트를 하는 것으로 보여진다. 윈도우 실행 파일인데 이 녀석을 실행하면 동시에 svchost.exe 밑에 init, bash가 같이 실행된다. 화면은 쉘에서 vi를 실행시켜서 bahs의 자식으로 vim.basic까지 실행된 것을 볼 수 있다.

#1

wsl2
Figure 2. 실행된 vim.basic의 기본 정보

실행된 vim.basic 프로세스의 기본 정보를 살펴보자. 기본 정보가 표시되어야 하는 곳에 아무 정보도 표시되지 않는 것을 알 수 있다. 고로 우리는 망했어요 ㅠㅜ~

wsl3
Figure 3. 실행된 vim.basic의 메모리 정보

메모리 정보를 살펴보자 vim.basic이 0x400000에 매핑되어 있는 것을 볼 수 있다. 어떤 이유에서인지 MS는 역사적으로 0x400000을 좋아하는 것으로 보여진다.

wsl4
Figure 4. vim.basic의 매핑된 메모리 영역

그럼 최종적으로 0x400000 메모리를 열어보면 이와 같다. 7f 45 4c 46, ELF 실행 파일이 그대로 매핑된 걸 볼 수 있다. 망했어요2 ㅠㅜ~

#2

ps
Figure 5. ps -A 결과

서브시스템 내의 세계는 어떨까? ps -A를 해보면 우리가 bash 쉘에서 실행한 것만 출력된다는 것을 알 수 있다.

그렇다면 새로운 bash 쉘은 새로운 리눅스를 의미할까? bash 쉘을 여러개 띄워서 실행해본 결과 동일한 init의 자식으로 생성되는 것을 알 수 있었다. 더불어 격리된 bash 쉘들에서 실행된 내용은 접근할 수 있는 것으로 보여졌다.

ps -A에서 출력된 pid는 원래 윈도우에서 보여지는 pid와 일치할까? 확인결과 일치하지 않는 것으로 보여진다.

이 정도 결과를 토대로 알 수 있는 것은 리눅스 서브시스템에서는 윈도우로의 접근이 불가능한 샌드박스 같은 구조인 것으로 유추해 볼 수 있겠다. 은막 뒤에서 펼쳐지는 마법의 보다 자세한 사항은 여기를 참고하자. 피코 프로세스라뉘…​ 그리고 이 핫한 기능의 가장 핫한 지점은 깃허브로 추정된다.

#3

WSL(Windows Subsystem for Linux)의 존재를 우리가 처음 알게 됐을 때 가장 우려한 것은 WSL을 이용한 윈도우 세계로의 접근이었다. 하지만 잠깐 살펴본 바에 의하면 기본적으로는 막혀 있는 것으로 보여진다. 하지만 WOW64를 토대로 보건데 뭔가 강을 건너는 숨겨진 문이 있을지도 모를 일이다. 어쨌든 판도라의 상자 밖으로 나와 버린 PEB도 없는 이 애들을 어떡할지 걱정이다.

번외 얘기긴 하지만 CEO 한 명 바꼈을 뿐인데 MS 참 열심히 일한다. 이 작품을 감상하면서 다시금 느꼈다. 이러니 저러니 해도 MS가 명실상부한 지구상에서 소프트웨어를 제일 잘 만드는 기업 중에 하나긴 하다는 사실을 말이다. 그런 의미에서 이제 안드로이드도 네이티브로 돌려주는 신기원을 열어주기를 ㅋㅋㅋ~