윈도우에서 리눅스를!
MS의 현명한 선택
마이크로소트프(MS)가 놀랍습니다. 과거엔 오픈소스가 MS의 경쟁자였다면, 지금은 MS가 오픈소스를 다 품는 양상입니다. VSCode(비주얼 스튜디오 코드)나 깃허브(GitHub) 같은 개발 환경을 MS가 무료로 제공함은 물론이고, 윈도우에서 아예 리눅스를 띄울 수 있게도 했지요. 당연한 이야기입니다만, 이건 자선 사업이 아니라 MS에게도 유리한 일입니다. 주로 리눅스 환경에서 작업하는 개발자들이 리눅스 컴퓨터나 맥 대신 윈도우 PC를 사용할 수 있게 되었으니 말입니다. 과거엔 독점의 상징이었던 MS가, 모두에게 좋은, 아주 현명한 판단을 했다 여깁니다. (애플에겐 그리 반갑지 않은 소식일지도 모르겠습니다만…)
WSL(Windows Subsystem for Linux)
WSL이란 윈도우에서 구현한 리눅스용 가상 환경을 뜻합니다. 듀얼 부팅이 아니라 윈도우가 돌고 있는 상태에서 띄우는 리눅스인 거지요. (맥에서 패러랠스 같은 앱을 이용해 윈도우를 돌리는 일과 비슷한 개념입니다.) 그런데 이 WSL이 제대로 된 리눅스이면서도 아주 가볍습니다. 설치도 간단하고요. 버전 2004 이상(빌드 19041 이상)의 Windows 10이나 Windows 11에서 관리자 권한으로 PowerShell을 열고, 다음과 같이 한 줄만 입력하고 재부팅하면 됩니다.
wsl --install
무척 간단하지요? 다른 리눅스도 설치할 수 있지만, 기본은 우분투(Ubuntu)입니다. 자세한 설명은 아래 페이지에 있습니다.
WSL2 설치: https://docs.microsoft.com/ko-kr/windows/wsl/install
WSL2는 지난해 업그레이드된 WSL을 이전 버전의 WSL과 구별하기 위해 붙인 이름입니다. 지금 WSL이라 하면 WSL2를 뜻하는 경우가 대부분이겠지만 말입니다. 한데 WSL 설치와 관련한 웹 페이지에 가보면, 대부분 다음과 같이 훨씬 더 복잡한 과정을 거치도록 안내하고 있습니다.
WSL 설치 후 WSL2로 업그레이드: https://docs.microsoft.com/ko-kr/windows/wsl/install-manual
이건 과거 버전의 WSL을 먼저 설치하고 그걸 WSL2로 업그레이드하는 절차인데요, 혹시 위에서 소개한 한 줄짜리 명령어가 잘 통하지 않는다면 이 방법을 써봐도 좋겠습니다.
WSL을 설치하고 나면 우분투 창을 띄울 수 있습니다. 마이크로소프트 스토어에서 Windows Terminal을 내려받으면, 거기서 PowerShell과 우분투 탭을 함께 열 수도 있습니다.
윈도우와 리눅스의 협주
리눅스 터미널에서 ‘echo $PATH’를 입력하면 리눅스 폴더뿐만 아니라 윈도우 명령어가 있는 폴더도 표시됩니다. 참고로 윈도우 파일 시스템은 ‘/mnt/c’에서 볼 수 있습니다. D 드라이브가 있다면 /mnt/d’도 나타나겠지요. 흥미로운 건 윈도우 실행 파일을 리눅스도 열 수 있다는 점입니다. 이를테면, 그림 1에서처럼 explorer로 현재의 폴더를 펼칠 수도 있답니다. 물론 ‘explorer .’처럼 적으면 안 되고, ‘explorer.exe .’라 써야겠지요. 실행 파일의 이름이 explorer.exe니 말입니다. 인터넷 브라우저도 이와 같은 방식으로 열 수 있음은 물론입니다. 그래서 저는 리눅스에서 GUI 도구들을 굳이 따로 설치하지 않았습니다.

WSL에서 아나콘다 파이썬 깔아보기
리눅스가 돌고 있으니, 뭐라도 해야겠지요? 아나콘다(Anaconda) 파이썬 패키지를 깔아보기로 했습니다. 리눅스용 설치 스크립트는 아나콘다 설치 페이지의 맨 아래 부분에서 찾을 수 있습니다. 제 PC의 CPU가 인텔 i5이므로 저는 64-Bit (x86) installer를 선택했습니다. 리눅스에 지금 GUI 도구가 없기에 설치 스크립트는 그 파일이 있는 URL을 확인하고 나서 다음과 같은 명령어로 내려받았습니다.
wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
2021년 10월 현재, 가장 최신의 리눅스용 x86 설치 스크립트는 ‘https://repo.anaconda.com/archive/‘에 있고 파일의 이름이 ‘Anaconda3-2021.05-Linux-x86_64.sh’란 이야기입니다. 이 정보는 (윈도우) 브라우저로 연 Anaconda 설치 사이트에서 해당 파일에 마우스를 대고 오른쪽 버튼을 누르면 얻을 수 있고요. 이제 다음과 같이 설치 스크립트를 돌리기만 하면 아나콘다 파이썬 패키지를 깔 수가 있습니다.
bash Anaconda3-2021.05-Linux-x86_64.sh
개발 환경은 윈도우의 VSCode를 그냥 사용합니다. ‘Remote - WSL’이란 확장 프로그램을 이용하면 됩니다. VSCode가 원래 원격 작업도 지원하므로 WSL을 품는 건 사실 일도 아니겠지요. 그림 2는 VSCode에서 윈도우 파일과 리눅스 파일을 함께 연 모습입니다.

GUI를 위한 추가 설정1
이미 언급한 바 있듯이 리눅스에서 윈도우 프로그램을 사용할 수 있어 리눅스용 GUI 도구는 준비해두지 않았습니다. 하지만 파이썬의 matplotlib나 tkinter가 만드는 그림을 윈도우가 바로 그려주려면 WSL이 GUI까지 지원해야 합니다. 그런데 제 윈도우 10은 그게 가능하지 않다는 게 문제였습니다. 해법은 윈도우에 X 서버 프로그램을 설치하는 것입니다. 여러 방법이 있다 하는데, 저는 눈에 제일 잘 띄는 VsXsrv를 골랐고요, 설치하고 나서 실행할 때 마지막 부분에서 ‘Disable Access Control’을 선택해주었습니다.
이제 리눅스 환경 변수만 지정하면 됩니다. 아래와 같이 말입니다. 첫 줄에 있는 DISPLAY 환경 변수는 필수고요, 그다음에 있는 두 줄은 터미널 창에 파이썬이 보내는 불평이 표시되지 않도록 적어둔 것입니다.
export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"
export LIBGL_ALWAYS_INDIRECT=1
export XDG_RUNTIME_DIR="$HOME/tmp/"
이 내용은 자신의 shell이 bash인지 zsh인지에 따라 .bashrc나 .zshrc에 넣어두면 되겠고요, 첫 줄이 좀 복잡한 건 매번 달라지는 WSL의 IP 주소를 읽기 위함입니다. 참고로 마지막 줄에 있는 “$HOME/tmp/”는 임시 폴더의 이름으로 아무렇게나 정해도 됩니다. 참, 주피터 노트북도 윈도우 브라우저까지 자동으로 띄우진 못합니다. 그러니 그냥 브라우저 없이 주피터 노트북을 실행하고, 터미널에 나오는 정보를 브라우저 검색창에 입력하는 게 좋습니다. (Windows Terminal에선 마우스로 윈도우 브라우저를 열 수도 있더군요.) 브라우저 없이 주피터 노트북을 여는 방법은 다음과 같습니다.
jupyter notebook --no-browser
마지막으로 예를 하나 들겠습니다. 그림 3과 4는 같은 프로그램을 윈도우와 리눅스에서 돌린 모습니다. 물론 같은 기계에서요. 윈도우와 리눅스 모두 비슷한 속도로 프로그램을 실행하고 있습니다.


제대로 된 리눅스를 윈도우에서 이렇듯 가볍게 사용해보는 건 정말 멋진 경험이었습니다.
1 GUI를 위한 추가 설정은 윈도우 10에만 해당합니다. 윈도우 11은 WSL이 GUI를 지원하기 때문입니다. 요컨대 윈도우 11에선 여기 나온 바와 같은 미세 조정이 필요 없습니다. (추가 프로그램 설치나 DISPLAY 환경 변수 설정 없이) 그냥 됩니다.
댓글남기기