Windows에서 리눅스를 실행할 수 있도록 해주는 Windows Subsystem for Linux(이하 WSL)에는 특별한 기능이 하나 있는데, 그것은 바로 WSL내에서 Windows 프로세스 시작을 지원하는 것이다. 즉 WSL에서 exe 프로그램 실행이 가능한 것이다.
이러한 상호 운용성 기능을 활용한 예시를 아래 포스트에서 확인할 수 있다.
WSL 상호 운용성 기능은 때론 유용하지만 일반 Linux에서 발생하지 않을 예기치 않은 결과를 발생시킬 수도 있어서 주의가 필요하다. 예를 들어, Host Windows에서 node를 설치하여 npm 명령을 사용가능하다고 했을 때, WSL에도 npm이 설치되어 있다면 WSL에서 실행하는 npm 명령의 우선 순위가 windows의 npm이 될 수도 있다는 것이다. 이 경우 관련 의존성 및 필요한 파일이 windows 기준 디렉터리에 저장되므로 추후 문제가 발생할 소지가 있다.
이러한 상호 운용성 기능은 설정을 통해서 해제가 가능하며 2가지 설정을 지원한다. WSL내에서 /etc/wsl.conf를 수정하여 [interop] 섹션 레이블을 추가하고 아래 2가지 옵션을 적절하게 사용하면 된다.
Key | Value | Default | Description |
enabled | 불리언 | true | 이 키를 설정하면 WSL에서 Windows 프로세스 시작을 지원하는지 여부가 결정됩니다. |
appendWindowsPath | boolean | true | 이 키를 설정하면 WSL에서 Windows 경로 요소를 $PATH 환경 변수에 추가할지 여부가 결정됩니다. |
참고: WSL의 고급 설정 구성 | Microsoft Learn
vi /etc/wsl.conf # WSL 설정 편집
###
#
# [interop]
# enabled = false
# appendWindowsPath = false
###
appendWindowsPath를 false
로 지정하는 것 만으로도 예기치 않은 실행 결과는 예방할 수 있다. 필요한 경우 Windows의 exe 프로그램을 실행할 수 도 있으므로, enabled의 값은 true
로 유지하는 것을 권장한다.
appendWindowsPath의 값을 false
로 지정하면 clip.exe를 바로 실행하는 것은 불가능하지만 clip.exe의 실행 자체가 불가능한 것은 아니다. 따라서 /mnt/c/Windows/System32/clip.exe 와 같이 Host Windows의 exe 실행 경로를 직접 참조하면 된다.