Linux on Windows

windows 10에서 VM이 아닌 상태로 Linux를 기동할 수 있게 되었다는 얘긴 예전에 들은 바 있었는데, 실제로 linux distribution을 Windows상에 설치해서 동작해본 적은 없었다. 사실 윈도우즈를 10년간 안쓰고 있었으니 그럴 법도 하지만, 서울에 있을 때 은행일을 볼 때나 관공서 사이트에 들락거린다거나 회사에서 간혹 워드 혹은 Visio 같은 소프트웨어를 써야할 땐 어쩔 수 없이 윈도우즈를 어떻게든 썼었으니까 적어도 이 정도는 해봤어야 되지 싶었는데 나도 참 새소식에 느린 사람이구나 했다. (이미 고립되어버렸는지도 ㅠ)

어쨌든 오늘에야 와서 실험해 볼 수 있었다. 또 하나 발견한 것이 windows안에 CMD 말고 powershell이라는 게 있고 다양한 명령어가 있다는 사실이다. 난 솔직히 같은 기능을 하는 건데 확장하지 않고 이름 따로 붙여서 몰래 새로 만들어놓는 거 너무 싫어하는데, 윈도우즈가 그 짓을 참 잘한다. 맥에서도 그런 것은 보기 힘들다.

또 윈도우즈도 가만 보면 예전에 Mac이 power PC 시절 바이너리와 intel 바이너리가 따로 있듯이 x86이라고 32 비트 버전 따로 64 비트 버전 따로 있는데, 이 파워쉘이라는 것도 동일한 기능을 하는 것으로 보여지는 실행 파일이 두 개 별도로 있었다. 모양새는 파란(!!) 바탕 화면에 cmd가 뜨는 것 같았으나 cmd에서 쓸 수 없는 명령어가 들었다. 이 얘기가 왜 나오냐면 윈도우즈가 그대로 윈도우즈에서 동작하는 리눅스 배포판을 그대로 실행할 수 없고 뭔가 기능 변경을 해야하는데, 그것을 powershell에서 어떤 명령어를 쳐넣는 것으로 가능하게 할 수 있다고 해서다. 뭘 하나 하려고 해도 과정이 복잡한 것은 윈도우즈만의 특징이니까.

그렇게해서 일단 윈도우즈의 용도 변경(?)을 시행하고 윈도우즈 마켓에 가서 윈도우즈 상에서 동작하는 윈도우즈 배포판을 따로 받아서 설치하면 제법 시간을 소모하지만 결국 설치가 완료된다. 실행하면 bash 같은 게 실행되는지 터머널이 떡하니 뜨고 또 뭔가를 설치해야하니 좀 기다리라고 한다. 그게 끝이나면 user를 하나 만들어야 되니 username과 password를 새로 입력하라고 하고 그게 끝나면 일단 기동이 가능하다.

과연 얼마나 쓸만할지 궁금해서 예전에 속도 벤치마크를 하려고 만들어놓은 것을 그대로 컴파일해서 돌려봤더니..!

native linux로 boot했을 때와 거의 같은 속도를 보여주었다 (아쉽지만 아주!! 약간 느리다)!! cygwin에서 검파일 한 것이 약간 느리지만 거의 그에 육박하고 그 뒤로 비주얼 스튜디오, mingw64, mingw32 순으로 나타났다. 이 리눅스는 VM에서 돌아가는 게 아니라 kernel에서 부르는 system call을 윈도우즈가 변환해서 실행이 가능하게 한 것이라고 하는데, 그러니까 쉽게 말해서 native install과 비교했을 때 system call 다음에 layer가 하나 더 위치하는 것이라 실행속도가 빠르다고 하는 것 같다. 사실상 거의 native install에 육박하는..

그렇게 되면 지지하게 cygwin이니 mingw 같은 거 윈도우즈에 설치해서 쓸 이유가 없는 것 아닐까 하게 되는데, 서로가 약간의 장단점들을 가지고 있으니까 전부 다 몰아내긴 어렵다 싶긴 하지만 내가 보기에 어설프게 유닉스 환경을 지원하는 것보단 그냥 linux를 설치할 수 있고 전부 다 native하게 쓸 수 있고 용량도 그다지 큰 문제가 안되면 linux를 그대로 올리는 게 나은 것 아닌가 하게 된다.

어찌보면 윈도우에서 유닉스 환경을 natively (almost) 하게 쓸 수 있다면 구태여 리눅스를 멀티부팅으로 설치할 필요도 없는 것 아닌가?? 하는 생각도 하게 된다.

cygwin에서 컴파일한 것은 cygwin이 제공하는 dll이 필요하고 mingw는 마찬가지로 libc++ 관련 dll을 요구한다. linux에서 컴파일한 것을 linux shell이 아닌 다른 윈도우즈 cmd나 데스크톱에서 실행할 수는 없다. 그런데 linux shell 상에서는 윈도우즈 실행 바이너리를 실행할 수 있다. DLL이 필요한 것들은 실행시에 DLL을 달라며 에러를 내는데 여기부턴 더 알아봐야겠지만, DLL의 의존이 필요없는 것들은 곧바로 실행이 된다.

윈도우즈 위에 우분투의 데스크탑 같은 것을 띄우는 것도 가능하다. 방법이 좀 웃긴데, 윈도우즈 상에서 X server를 구동하고 tcp를 통해서 리눅스측에서 윈도우측으로 연결하는 방법인 것이다. 일단은 윈도우즈에서 VM을 통해 리눅스를 실행하는 경우에 비해 매우 빠르다는 느낌을 받았다. 어차피 이 과정은 윈도우즈에 설치된 X server가 대부분의 일을 해내는 것이고, 사실 그렇게 해서 띄워올린 윈도우의 모양이 리눅스 상에서 보여지는 것처럼 깔끔하지 않다. 물론 이것은 Xserver application에서 이걸 얼마나 잘해내느냐의 문제로 본다.

종합하면

나는 어떻게 생각하냐고? 난 윈도우즈를 워낙 싫어하고 윈도우즈에서 걸핏하면 뭔가 바쁘게 돌아가고 업데이트 일어나고 하는 것은 어차피 그 위에 리눅스를 올려서 사용하나 별 차이가 없으니까 리눅스를 제대로 쓸 것이라면 native 설치를 권한다. 그런데 cygwin이나 mingw 같은 거 설치해서 뭔가를 윈도우 상에서 해야하는 상황이라면 linux on windows를 쓰는 게 더 낫지 않나 싶다. Linux GUI application/desktop을 윈도우즈 상에 띄우는 것은 별로 쓰게 되지 않을 듯 하다.