원문 : Announcing WSL 2

마이크로소프트가 Build 2019에서 공개한 Windows Subsystem for Linux (WSL)의 새버전 WSL 2을 소개하는 글입니다.

WSL 2에 대한 제 생각은 본문 아래에 서술합니다.


Windows Subsystem for Linux의 새로운 아키텍쳐인 WSL2를 공개합니다! 새로운 아키텍쳐로의 변화가 무엇을 의미하냐구요? 파일 시스템 성능이 비약적으로 향상되었으며, 리눅스 시스템 콜을 완벽하게 지원합니다. 이를 통해 WSL 2에서는 더 많고 다양한 리눅스 애플리케이션을 사용할 수 있습니다. 예를 들면, 도커(Docker) 와 같은 것을 말이죠.

대체 WSL 2가 뭔가요?

WSL 커뮤니티에서 우리에게 가장 많이 요청한 것은 파일 시스템의 성능을 향상시켜달라는 것, 그리고 더 많은 애플리케이션이 WSL 환경에서 돌아가게 해달라는 것 (즉, 시스템 콜 지원을 늘려달라는 것)이었습니다. 우리는 커뮤니티의 피드백을 경청하였고, WSL 2에서 이러한 문제들을 해결하였습니다.

WSL 2는 윈도우즈 환경에서 ELF64 리눅스 바이너리를 실행시키기 위해서 고안된 Windows System for Linux의 새로운 아키텍쳐입니다. 이 새로운 아키텍쳐는 리눅스 바이너리가 윈도우즈 OS 및 컴퓨터 하드웨어와 상호작용하는 방식을 새롭게 바꾸면서도, 기존에 WSL 1을 사용하던 유저들이 똑같은 경험을 할 수 있도록 디자인되었습니다. 각각의 리눅스 배포판을 WSL 1에서 실행할 수도 있고, WSL 2에서 실행할 수도 있으며, 언제든지 업그레이드 및 다운그레이드가 가능합니다. 또는 WSL 1과 WSL 2를 동시에 따로따로 실행하는 것도 가능합니다.

WSL 2는 실제 리눅스 커널을 사용하는 완전히 새로운 아키텍쳐입니다.

윈도우즈에 리눅스 커널이 들어갑니다

네, 지금 제목 똑바로 읽으신 것 맞습니다! 실제 리눅스 커널이 윈도우즈에 포함되고, 이를 통해서 리눅스 시스템 콜을 완전하게 지원합니다. 마이크로소프트는 이미 지난 2018년에도 Azure Sphere에 리눅스 커널을 포함시킨 적이 있습니다. 그러나 우리는 이번에 처음으로 윈도우즈 에 리눅스 커널을 포함시키기로 했습니다, 마이크로소프트가 리눅스를 얼마나 좋아하는지 알 수 있는 부분이죠! kernel.org에 있는 최근 리눅스 커널 소스가 빌드되어 윈도우즈에 포함될 것이고, 처음 공개하는 것은 4.19 버전 커널을 포함시킨 것이 될 것입니다.

윈도우즈에서 리눅스의 놀라운 경험을 제공하기 위해서는 크기와 성능 측면에서 최적화가 필요했습니다. 그래서 우리는 WSL 2를 위해서 커널에 적절한 수정을 했습니다. 이렇게 수정된 커널은 윈도우 업데이트를 통해서 배포될 것입니다. 즉, 여러분은 스스로 관리하지 않고도 최신 보안 패치나 커널 패치 등을 적용받을 수 있습니다.

마지막으로, 이 리눅스 커널은 완전히 오픈 소스입니다! WSL 2가 공개되면 모든 코드가 깃헙에 공개될 예정이고, 여러분은 어떤 원리로 커널이 동작하는지 확인하고 직접 빌드해볼 수 있을 겁니다. 커널에 대해서 더 알고 싶다면, 커널을 빌드한 팀에서 쓴 이 포스트를 참고해주세요.

WSL 2의 구조 변화

WSL 2는 최신 가상화 기술을 사용하여 리눅스 터널을 가벼운(lightweight) VM에서 실행합니다. 그러나, WSL 2는 기존에 VM 경험과는 완전히 다를 것입니다. 보통 VM하면, 부팅 과정이 느리고, 완전히 독립된 환경에서 동작하고, 자원을 아주 많이 잡아먹고, 관리에 많은 시간이 들어가는 것을 떠올리실 겁니다. WSL 2에서는 이러한 불편함이 없습니다. WSL 2는 WSL 1이 가지고 있던 장점들을 그대로 가지고 있습니다. 높은 수준에서 윈도우즈와 리눅스 환경을 통합할 수 있고, 매우 빠른 부팅 속도에 적은 자원을 사용하고, 무엇보다도 VM을 관리하거나 설정하는데 전혀 신경쓸 필요가 없습니다.

WSL 2를 사용하는 데모를 한번 봅시다. WSL 2를 통해 리눅스 배포판을 실행해서 bash 쉘을 띄우는 데까지 2초가 채 걸리지 않는 것을 확인할 수 있습니다. 그리고 도커와 같은 앱을 곧바로 실행할 수 있습니다.

WSL 2 데모

정리하자면, WSL 2는 VM을 사용하지만, 백그라운드에서 모든 관리가 이루어지고 유저들은 WSL 1과 똑같은 느낌으로 WSL 2를 사용할 수 있습니다.

이 블로그에 곧 더 자세한 내용을 담은 글이 올라올 예정입니다, 그러니 기대하세요!

WSL 2는 얼마나 빠른가요?

파일 접근이 많은 명령들, 예를 들면 git clone, npm install, apt update, apt upgrade들은 크게 빨라졌습니다. 물론 다른 명령들도 마찬가지구요. 실제 속도 향상 정도는 어떤 애플리케이션을 실행하는지, 그리고 애플리케이션의 파일 시스템과의 상호작용 정도에 따라 다를겁니다. 우리가 수행한 테스트에서는, tarball 압축파일을 해제하는 데 WSL 2가 WSL 1보다 20배 빠른 속도를 보여주었으며, git clone, npm install, cmake 같은 명령어에서는 2-5배 빠른 속도를 보여주었습니다. WSL 2이 공개되고나면 여러 커뮤니티에서 속도 비교 실험을 수행하겠죠, 그때를 기대해주세요!

시스템 콜 완전 호환

리눅스 바이너리는 파일에 접근하거나, 메모리를 할당받거나, 프로세스를 생성하거나, 그외 여러 작업을 하기 위하여 시스템 콜을 사용합니다. WSL 1에서는 중간에 변환 층(translation layer)을 사용하여 리눅스 시스템 콜을 윈도우즈 NT 커널에 맞추어 변환하는 방식을 사용했습니다. 그러나 모든 시스템 콜을 이러한 방식으로 변환하는 것은 매우 어려운 일이었고, 그래서 WSL 1에서는 일부 애플리케이션을 실행하는 것이 불가능했습니다. WSL 2에서는 자체적인 리눅스 커널을 포함하고 있기 때문에, 모든 시스템 콜이 호환됩니다. 이를 통해서 훨씬 더 많은 애플리케이션이 WSL 환경에서 사용가능해졌습니다. 대표적인 예로는 Docker와 FUSE(Filesystem in Userspace)가 있습니다!

또한 WSL 2를 사용한다는 것은 리눅스 커널에서 새로운 기능이 업데이트 되면 그 업데이트를 WSL 1보다 훨씬 빨리 적용받을 수 있다는 것을 의미합니다. WSL 1에서는 새 기능을 모두 직접 구현해야하는 반면, WSL 2에서는 그냥 커널을 업데이트하면 되는 것이니까요.

WSL 2는 매우 강력한 플랫폼이며, 여러분이 리눅스 환경에서 할 수 있던 것들을 윈도우즈에서 더 많이 할 수 있도록 만들어 줄 것입니다.

릴리즈 날짜

WSL 2의 초기 빌드는 Windows insider program을 통해서 2019년 6월 말에 공개될 예정입니다. 공개되면 이 블로그와 트위터를 통해서 발표될 예정입니다. WSL 팀의 트위터를 팔로우하고, 새로운 소식을 받으세요!

  • Taylor Brown @Taylorb_msft
  • Yosef Durr @yosefdurr
  • Sven Groot @svengroot_ms
  • Ben Hillis @benhillis
  • Craig Loewen @craigaloewen
  • Sunil Muthuswamy @SunilMut
  • Brian Perkins
  • Palkesh Soni @sonipalkesh
  • John Starks @gigastarks
  • Craig Wilhite @CraigWilhite
  • Kayla Cinnamon @cinnamon_msft

WSL은 커뮤니티 구성원 여러분의 도움이 없었다면 절대로 존재할 수 없었을 것입니다. 여러분의 성원에 늘 감사드리며, WSL에 대한 피드백은 언제나 환영합니다!

-The WSL Team


평가

마이크로소프트가 WSL 1에서 리눅스 시스템 콜을 윈도우즈 API로 변환하는 것을 넘어서, 이제는 WSL 2에서 아예 윈도우즈에 리눅스를 올려버렸습니다.

WSL의 고질적인 문제였던 느린 파일 시스템 성능도 개선이 되었고, 리눅스 커널 자체를 VM에서 돌림으로써 docker와 같은 시스템 밑부분을 깊게 건드리는 애플리케이션도 실행가능해졌습니다.

기존 WSL도 충분히 유용하게 쓰고 있었던 입장에서, 이런 변화는 매우 반가울 수밖에 없습니다. 나아가면, 리눅스 커널 자체가 올라간 만큼 WSL이 64bit ELF만 지원하던 것을 넘어서 32bit ELF까지 지원할 수 있지 않을까 싶네요. 그러면 정말로 굳이 윈도우즈 컴퓨터에 듀얼 부팅이나 VM 등으로 리눅스를 설치할 필요가 없어지는 상황이 올지도 모르겠습니다 :)


Reference

https://devblogs.microsoft.com/commandline/announcing-wsl-2/