기본 지식
ArchLinux 에는 총 3개의 Code 가 제공된다. Code – OSS, VS Code, VSCodium. 이 중에서, pacman 으로 설치할 수 있는 건 Code – OSS 뿐이다. 나머지는 AUR 을 이용해야 한다. 차이가 있다면 편하냐, 그렇지 않느냐다. 저장소에 있으면 판올림이 편하고, AUR 은 스스로 해야 해서 불편하다.
설치 편의성은 그렇다치고, 이게 뭐가 어떻게 다른 건지..? 저작권이 복잡하게 얽힌 모양이긴 한데.. 그냥 대충 내가 이해한대로만 정리해본다. 공식 문서에도 이 내용이 있고, 정확하게 이 문제를 설명한 vscode 이슈창 댓글도 있다.
Code – OSS 와 VS Code 는, Chromium 과 Google Chrome 관계와 비슷하다. Code – OSS 는 크로뮴처럼 오픈소스이고, VS Code 는 Code – OSS 기반으로 MIT 저작권이고, Microsoft 가 몇가지를 추가하여 MICROSOFT SOFTWARE LICENSE 로 공개한 제품이다.
‘추가한 몇가지’ 는 product.json
으로 구현된 모양인데, MS 에선 이 파일을 MS 용으로 교체하여 실행파일을 만든다고 한다. 뒤에 다시 얘기하겠지만, 이 파일이 사용 편의성에 꽤 중요한 역할을 한다.
Github 에 있는 VS Code 를 내려받아 그대로 컴파일하면 그 결과물은 MIT License 가 된다. 이게 ArchLinux 에서 VS Code 를 제공하는 방식이다. 그리고 product.json 파일은 거의 건드리지 않기 때문에, 사용면에서 여러가지 불편한 점이 많다. 물론, 그냥 편집기 자체로만 쓰겠다면, 즉 확장프로그램을 설치하지 않는다면, Code – OSS 를 써도 되겠다.
반면, VSCodium 은 일단 VS Code 를 살짝 수정하여, 원치않는 부분(telemetry)을 걸러낸 작품(?)이다. VS Code OSS 가 순수 원석, VS Code 가 잘 가공된 보석이라면, Codium 은 조금 거칠게 깎아낸 세공품이라고 할 수도 있지 않을까.
각각 설치는?
Code OSS
pacman -S code
VS Code
aur 로 visual-studio-code-bin 설치.
VS Codium
aur 로 vscodium-bin 설치.
VS Codium 용 AUR 에는, bin 이 붙은게 있고, 그렇지 않은게 있다. bin 이 붙은 건, 이미 빌드된 실행파일을 그냥 내려받아 설치만 하는 방식이다. bin 이 없다면, 소스를 내려받아 직접 빌드를 해야 하는데, 이러려면 추가로 필요한 라이브러리들도 있고, 게다가 그 중 몇몇(nvm 등)은 aur 로만 설치해야 하기에 번거롭다. 그냥 ‘bin’ 판을 선택하는게 정신건강에 이롭다.
결론 : 뭘 택하나?
이건 취향이고, 선택인데, 결국은 오픈소스냐 그렇지 않느냐는 문제다. 그러면 VS Code 와 Code OSS/VS Codium 으로 나뉘는데.. 후자를 잠깐 써 본 결과 VS Codium 쪽을 택하기로 했다.
이유는 한가지. 바로 편의성.
이 편의성엔 product.json 이 중요한 역할을 했다.
Extension activation failed?
Code OSS 에서 파이썬 파일을 열었는데, 이런 오류가 발생했다.
Extension activation failed, run the ‘Developer: Toggle Developer Tools’ command for more information.
왜 이런? KDE Neon 에서 VS Codium 을 쓸 때는 못보던 오류인데..? 이걸 알게되기까지 시간이 걸리긴 했는데, 답은 이미 아치 문서에 나와있었다. 표현이 좀 다르게 되어 못찾았을 뿐..
저 오류는 ms-python 과 ms-jupyter 확장프로그램에서 비롯됐다. 이 두 개가 제대로 실행되려면 특정 API 가 허가돼야만 하는데, Code OSS 에는 이 내용이 빠져있기에 이런 결과가 나왔다. 이를 위해서는 두가지 방법을 쓸 수 있다.
첫번째. 실행 시에 해당 내용을 명시.
/usr/bin/code-oss --enable-proposed-api ms-python.python --enable-proposed-api ms-toolsai.jupyter
두번째. product.json
파일에 내용 추가.
"extensionAllowedProposedApi": [ "ms-vscode.vscode-js-profile-flame", "ms-vscode.vscode-js-profile-table", "GitHub.remotehub", "GitHub.remotehub-insiders", "ms-python.python", "ms-toolsai.jupyter" ]
GitHub.remotehub-insiders 까지가 기본이고, 아래 두 줄을 넣어주면 된다.
그러나….
product.json 문제?
그냥 이 파일을 편집하면 내가 원하는 기능을 쓸 수 있는데.. 그거 고치기가 싫어서 문제??
일단, 이 파일은 아치 리눅스 기준 /usr/lib/code/product.json
에 위치하고 있다. 따라서 편집하려면 관리자 권한이 필요하다. 뭐, 이것만 해도 큰 문젠 아니다.
더 큰 문제는, 판올림됐을 때 이게 지워진다(초기화)는데 있다.
이를 위해 편법(code-features)이 또 존재하는데.. 이쯤되면 그냥 VS code 를 설치하는게 나을 수도 있겠다.
결론: VS Codium
VS Codium 은 위 문제를 모두 해결한다.(1.66 판부턴 product.json 형식이 조금 달라졌다.) 여기서 제공하는 product.json(/opt/vscodium-bin/resources/app/product.json) 에는 꽤 많은 API 가 제공되고 있다. 이게 VS Code 와 동일한 내용인지는 확인해보지 않아서 모르겠다.
"extensionAllowedProposedApi": [ "ms-vscode.vscode-js-profile-flame", "ms-vscode.vscode-js-profile-table", "GitHub.remotehub", "GitHub.remotehub-insiders", "ms-vscode.cpptools", "ms-azuretools.vscode-docker", "visualstudioexptteam.vscodeintellicode", "GitHub.codespaces", "GitHub.vscode-pull-request-github-insiders", "GitHub.vscode-pull-request-github", "Microsoft.vscode-nmake-tools", "ms-ai-tools.notebook-renderers", "ms-dotnettools.dotnet-interactive-vscode", "ms-python.gather", "ms-python.python", "ms-toolsai.jupyter", "ms-toolsai.vscode-ai", "ms-toolsai.vscode-ai-remote", "ms-vscode-remote.remote-containers-nightly", "ms-vscode-remote.remote-containers", "ms-vscode-remote.remote-ssh-edit-nightly", "ms-vscode-remote.remote-ssh-edit", "ms-vscode-remote.remote-ssh-nightly", "ms-vscode-remote.remote-ssh", "ms-vscode-remote.remote-wsl-nightly", "ms-vscode-remote.remote-wsl", "ms-vscode-remote.remote-wsl-recommender", "ms-vscode-remote.vscode-remote-extensionpack-nightly", "ms-vscode-remote.vscode-remote-extensionpack", "ms-vscode.azure-account", "ms-vscode.azure-sphere-tools-ui", "ms-vscode.azure-sphere-tools", "ms-vscode.github-browser", "ms-vscode.github-richnav", "ms-vscode.js-debug-nightly", "ms-vscode.js-debug", "ms-vscode.lsif-browser", "ms-vscode.vscode-js-profile-flame", "ms-vscode.vscode-js-profile-table", "ms-vscode.vscode-selfhost-test-provider", "ms-vsliveshare.cloudenv-explorer", "ms-vsliveshare.cloudenv", "ms-vsliveshare.vsliveshare", "ms-vsonline.vsonline", "dbaeumer.vscode-eslint"]
게다가, 사용자 디렉토리(~/.config/VSCodium
)에 product.json 을 추가로 넣을 수도 있다. 예를 들어, MS Market Place 를 사용하는 동시에, 기타 추가 API 를 사용하고 싶기도 하다면, $HOME/.config/VSCodium/product.json 을 이런 식으로 편집해주면 된다.
{ "extensionsGallery": { "serviceUrl": "https://marketplace.visualstudio.com/_apis/public/gallery", "cacheUrl": "https://vscode.blob.core.windows.net/gallery/index", "itemUrl": "https://marketplace.visualstudio.com/items", "controlUrl": "", "recommendationsUrl": "" }, "extensionAllowedProposedApi": [ "api.foo", "api2.bar" ]
이 뿐만 아니라 다른 항목도 가능할 듯 하다.
이렇게 사용자가 생성한 product.json 을 사용하는 기능은 Code OSS 에는 없다. 원래 없는 건지, 내가 못찾은 건지는 알 수가 없지만, ~/.config/Code OSS 에 product.json 을 넣어봤지만 아무 효과가 없었다.
- Codium 1.66 부터 product.json 형식에 변화가 생겼다.
아치 aur 꾸러미에는 바뀐 내용이 반영되지 못했고, 예전 product.json 이 그대로 포함돼 있었다. 그래서 Jupyter 에서 문제가 있었는데, 1.66.1 부터는 수정판이 적용되어, 오류는 사라졌다.
한가지 아쉬움! 및 Flatpak
VS Codium 은 AUR 이기에, 판올림은 수동으로 해야만 한다. 한달에도 최소 한번 이상 새 판이 나오는 Codium 이기에, 조금 번거롭긴 하다. (aur 디렉토리로 가서 git pull
한 뒤, makepkg
해서 다시 빌드/설치해줘야 한다.)
Codium 은 Flatpak 설치도 된다. 다만, Flatpak 이 Sandbox 기반이기에, 시스템에 있는 SDK 들을 직접 접근하는데 조금 번거로움이 있다. 따라서, 지금은 그냥 귀찮더라도 AUR 설치가 최선이다.
Extension 용 디렉토리
Code OSS 와 VS Codium 은 ~/.vscode-oss
를 공유한다. 그냥 생각으로는 .vscode-oss 와 .vscodium 이라야 할 듯 하지만, 그냥 .vcode-oss 로 동일하다.
여기엔 Extension 과 argv.json 등이 자리잡고 있다.
반면, VS Code 는 ~/.vscode
를 사용한다.