앞서 WSL 설치 관련된 글은 아래 링크를 먼저 확인해주세요. Microsoft WSL2 설치 동영상도 추가합니다.
[개발환경] - Windows 10 에서 Cygwin 또는 WSL 설치
[개발환경] - Windows 10 Insider Preview 설치 (WSL 2.0 설치)
[개발환경] - WSL 2.0 Global configuration (.wslconfig) 을 통한 성능 향상
Windows 10 에서 WSL 2.0 으로 개발 환경에 관련해서 구체적으로 무엇이 가능하고 불가능한지 확인하고자 한다. WSL 2.0을 테스트한 Windows 10 은 빌드 19628 (※Windows Insider의 개발빌드임) 이고, 이 버전은 20H2 공식 버전으로 공식 배포될 것으로 예상된다. WSL은 현재도 많은 개선 사항이 적용되고 있고, 계속 진화되기 때문에 어떻게 발전될지는 지켜볼 필요가 있다.
하고자 하는 것
- SW 개발 환경 측면에서 WSL 에서 가능한 것과 지원하지 않은 것을 확인
WLS는 Windows 10 Home 버전에서 Hypervisor 때문에 설치가 불가능하다고 여러 블로그에 나와 있으나, 실제로는 Windows Home 1904 버전에서는 WSL 1.0 이 설치되고, Build 19603 부터는 WSL 2.0이 설치된다. (인증샷 공유합니다.)
WSL 개념 설명은 나무위키 설명이 가장 쉽고 간결하지만, 나무위키에는 몇가지 내용에는 일부 수정이 필요하다. 실제로 Windows 10 빌드 버전에 따라서 WSL command 가 차이가 날 정도로 Windows 10 의 여러 기능 중 가장 빠르게 개발되고 기능이 확장되고 있어 나무위키쪽에는 아직 업데이트가 안된 것 같다.
Cygwin 처럼 리눅스 소스를 Windows 환경 다시 빌드해서 DLL 이나 EXE를 만든 것이 아니고, Hypervisor 라는 가상화 기술 위에서 리눅스 커널을 그대로 올렸다고 한다. 즉 계층 관계로 보면 우분투 커널과 NT 커널과 대등한 관계이며, 이로써 system call 이 빠르고 호환성이 좋아졌다고 한다.
(나무위키 인용 ) ※ 수정이 필요한 내용은 취소선으로 그었습니다.
2019년 6월부터 WSL 2의 베타 버전이 윈도우 참가자 프로그램 을 통해 공개되었다. WSL 1과는 다르게 WSL 2는 Hyper-V 기반의 최신 가상화 기술을 이용하여 실제 리눅스 커널 을 직접 탑재하였다. 이에 따라 모든 시스템 콜이 완벽하게 호환되며, 성능 또한 비약적으로 상승하였다고 한다.20H1Build 19603 이후 20H2 (20H1 는 19041.264 빌드로 WSL 2.0 포함될지는 불부명) 업데이트에 포함될 예정이다.
WSL 2의 구조도. Hyper-V 레이어 위에 윈도우의 NT 커널과 리눅스 커널이 병렬적으로 올라가서 실행된다는 것을 알 수 있다.# Windows 10 Home Edition은 Hyper-V를 지원하지 않는데, 어차피 이러한 기능들은 유저 레벨에서만 비활성화를 해 놓는 것이기 때문에 내부적으로는 사용이 가능했으리라고 추측할 수 있다. [3]물론 윈도우의 NTFS/FAT 등 파일 시스템도 직접 다룰 수 있다.[4]KDE 데스크탑이나 GNOME 데스크탑 등 설치해서 GUI 환경을 만들 수 있다. (추가 Visual Code 의 WSL extention일 설치 가능하고 WSL 파일을 열어보거나, WSL 설치 tool chain으로 빌드 및 실행이 가능하다.)
https://fossbytes.com/what-is-windows-subsystem-for-linux-wsl/ 에서 발췌:
- For using basic Linux commands.
- You have less powerful hardware.
- You need memory/storage efficiency.
- When you need faster I/O.
- Don’t want to deal with the hassle of installation/management/overheads of a VM.
WSL 2.0 내부 구조야 어찌되었든 SW 개발에 필요한 tool 들(e.g. git, tool chain, python) 이 문제 없이 동작하지는 확인이 필요하고, 코딩 생산성에 영향을 많이주는 IDE와 어떻게 연동이 되는지 확인이 필요하다. 가정 먼저 확인한 WSL Bash 는 리눅스의 Bash 와 완전히 동일하다. SSH 연결한 Network상의 우분투에 로그인 한 것인지 WSL의 우분투에 로그인 한것인지 구분이 안될 정도이다. (정신 없이 코딩하다면 보면 착각하기 쉽다) 다만, PowerShell이라 터미널의 폰트와 색상만 차이가 있을 뿐이다. 심지어는 우분투 20.04와 동일하게 vi 도 예전 버전이 설치되어 있어 apt 로 vim을 설치해야 한다. apt 나 curl을 통한 인터넷 기반의 명령도 무리 없이 잘 돌아가고, python은 설치가 안되어 있지만 apt를 통해서 설치 후에는 특이 사항 없이 잘 돌아간다. 오래된 작업을 할때 shell을 유지 시킬 수 있는 screen 도 잘 동작한다. 결과적으로 repo 와 git으로 Android ASOP 소스를 받기위한 명령어는 문제 없이 잘 동작한다.
# apt list를 update하고 vim, python 설치
$ sudo apt update
$ sudo apt install vim python-dev python3-dev
# Android source download 을 위한 repo tool 다운로드
$ sudo curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ./repo
$ sudo chmod 755 /usr/local/bin
$ sudo mv ./repo /usr/local/bin/repo
$ sudo chmod 755 /usr/local/bin/repo
# screen 명령어
$ sudo screen -R aosp
하지만, NTFS 포맷된 C:\ 드라이브 sda0 와 HDD D:\와 E:\ (/sdb0, sdb1) 은 정상적으로 마운트가 되나, FAT32의 USB 드라이브와 EXT4 의 SSD 는 인식하지 못하였다. MS 블로그에서에서 이동식 드라이브를 drvfs로 mount가 가능하다고 되어 있으나 실제 내 PC에서는 동작하지 않는다. (방법 아시는 분은알려주세요)
#dmesg 를 확인해도 USB 드라이브에 대한 mount 흔적은 없다. Default로 SSD 와 HDD만 인식하는 듯.
[ 1.390064] EXT4-fs (sda): mounted filesystem with ordered data mode. Opts: discard,errors=remount-ro,data=ordered
[ 1.478492] EXT4-fs (sdb): recovery complete
[ 1.480213] EXT4-fs (sdb): mounted filesystem with ordered data mode. Opts: discard,errors=remount-ro,data=ordered
그리고, 가장 매력적인 부분은 Visual code에 Extension을 통해서 WSL과 연동도 된다. Visual code를 설치하면 Remote WSL를 설치를 추천하고, 설치 후에는 WSL 의 폴더를 바로 열수 있으며 WSL 에 설치된 tool chain으로 빌드도 가능하다고 한다.
WSL에 설치된 우분투의 루트 파일 시스템을 확인보면 WSL1.0 과 2.0이 차이가 난다. WSL 1.0 을 실제 폴더와 파일들이 그대로 표시되었다면, WSL 2.0 에서는 EXT4의 가상 드라이브로 만들어져 있다. EXT4 가상 드라이브 크기 조정은 https://docs.microsoft.com/ko-kr/windows/wsl/compare-versions에 설명되어 있다.
요약하면 우분투 Bash 상 command 는 모두 동작, SSD와 HDD의 파일은 Windowns-Ubuntu 상호 공유 가능, Visual Code 에서 WSL 연동도 지원한다.
- git, grep, curl, python, gcc 로 컴파일한 binary 도 동작 ok
- Internet 도 동작 ok
- NTFS 로 포맷한 SSD / HDD는 /mnt/c (or d) 인식함 --> Windows 와 WSL 사이에 파일 공유 가능
- Windows 에서 Visual code를 실행하면 Remote - WSL 설치하고, 1) WSL에 폴더로 바로 이동 가능, 2) WSL 설치된 tool chain으로 빌드 가능, 3) WSL bash 바로 실행 가능하다. 참고사이트
하지만, HW 사용하는 기능은 아직은 동작하지 않는다. (Virtual Machine 처럼 언제가는 될 것 같다)
- FAT 32로 포맷한 이동식 USB 드라이브는 인식 안됨 (USB by pass 도 미지원으로 보임, MTP 도 미지원 예상)
- 별도의 SSD/HDD의 EXT4 로 포맷된 partition 인식 안됨 ( * WSL에 설치된 우분투를 가상 EXT4 드라이브로 인식하기 때문에 별도의 SDD/HDD EXT4 인식은 기술적으로 가능할 것으로 예상되나 당장은 어떻게 mount할지 모르겠다.)
- COM 포트도 안된다고 함 --> 추가 확인 예정
- GPU 관련 드라이버도 안된다고 함 (OPEN GL은 S/W로 돌려야 할 듯) --> 추가 확인 예정
<관련 글>
1. Windows 10 과 Ubuntu 20.4 설치하기
2. Windows 10 에서 Cygwin 또는 WSL 설치
3. Ubuntu 에서 개발 환경 설치
4. Window 와 Ubuntu 파일 공유하기
5. Windows 10 Insider Preview 설치 (WSL 2.0 설치)
6. WSL 2.0 으로 가능한 기능 확인
댓글