ArchLinux : Code – OSS, VS Code, VSCodium? 뭐가 다른건지? 그리고 ‘뭘’ 쓰는게 좋을지!

기본 지식

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 를 사용한다.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.