Remote Development with Linux

    The extensions are known to work when connecting to recent stable/LTS version of:

    • Ubuntu 64-bit x86, ARMv8l (AArch64) (16.04+, IoT 18.04+)
    • Debian 64-bit x86, ARMv8l (AArch64) (Stretch/9+)
    • Raspbian ARMv7l (AArch32) 32-bit (Stretch/9+)
    • CentOS / RHEL 64-bit x86 (7+)
    • Alpine Linux 64-bit x86 containers or WSL hosts (3.8+) in Remote - Containers, Remote - WSL

    The following non-Linux SSH hosts are also supported:

    However, if you are using a non-standard configuration or downstream distribution of Linux, you may run into issues. This document provides information on requirements as well as tips to help you get up and running even if your configuration is only community-supported.

    Note that other extensions may have dependencies beyond those listed here. Some extensions also contain compiled native code that may not work on Alpine Linux, or ARMv7 (AArch32), or ARMv8 (AArch64). These platforms are considered in “preview” for this reason. If you encounter an issue that only occurs with a particular extension, contact the extension authors for information on their native dependencies.

    In addition, specific Remote Development extensions have further requirements:

    • Remote - SSH: ssh needs to be in the path. The shell binary is typically in the openssh-client package.
    • Remote - Containers: Docker CE/EE 18.06+ and Docker Compose 1.21+. Follow the . If you are using Docker Compose, follow the Install Docker Compose directions as well. (Note that the Ubuntu Snap package is not supported and packages in distributions may be out of date.) docker and docker-compose must also be in the path. However, Docker does not need to be running if you are .

    Platform prerequisites are primarily driven by the version of the Node.js runtime (and by extension the ) shipped in the server component automatically installed on each remote endpoint. This server also has a set of related native node modules that need to be compiled and tested for each target. 64-bit x86 glibc-based Linux distributions currently provide the best support given these requirements.

    You may encounter issues with certain extensions with native dependencies with ARMv7l (AArch32) / ARMv8l (AArch64) glibc-based hosts, containers, or WSL and 64-bit x86 musl-based Alpine Linux. For ARMv7l/ARMv8l, extensions may only include x86_64 versions of native modules or runtimes in the extension. For Alpine Linux, included native code or runtimes may not work due to fundamental differences between how libc is implemented in Alpine Linux (musl) and other distributions (glibc). In both these cases, extensions will need to opt-in to supporting these platforms by compiling / including binaries for these additional targets. Please raise an issue with the appropriate extension author requesting support if you encounter an extension that does note work as expected.

    The following is a list of distributions and any base requirements that may be missing. End-of-life versions of distributions are not included.

    • ✅ = Working
    • ⚠️ = Working, but see note for limitations
    • 🔬 = Experimental
    • ❌ = Unsupported
    Server DistributionDocker ImageMissing librariesNotes / additional steps
    ⚠️ Alpine Linux 3.10 (64-bit)alpine:3.10libgcc libstdc++Supported in Remote - Containers and Remote - WSL only. Some extensions installed in the container may not work due to glibc dependencies in extension native code.
    CentOS 7 Server (64-bit)<none><none>
    🛑 CentOS 6 Server (64-bit)centos:6glibc >= 2.17, libstdc++ >= 3.4.18.
    Debian 9 Server (64-bit)debian:9<none><none>
    Debian 8 Server (64-bit)debian:8<none><none>
    openSUSE Leap Server 15 (64-bit)opensuse/leap:15Docker image is missing tar and gzip.<none>
    openSUSE Leap Server 42.3 (64-bit)opensuse/leap:42.3Docker image is missing tar and gzip.<none>
    Oracle Linux 7 (64-bit)oraclelinux:7<none><none>
    🛑️ Oracle Linux 6 (64-bit)oraclelinux:6glibc >= 2.17, libstdc++ >= 3.4.18. Docker image is missing tar.Requires a workaround.
    ⚠️ Raspbian Stretch/9 (ARMv7l 32-bit)<n/a><none>Some extensions may not work when installed on an ARMv7l host due to extension x86 native code. Remote - Containers does support connecting to containers on an ARM host.
    RedHat Enterprise Linux 7 (64-bit)<none><none>
    🛑 RedHat Enterprise Linux 6 (64-bit)glibc >= 2.17, libstdc++ >= 3.4.18.
    SUSE Linux Enterprise Server 15 (64-bit)Docker image is missing tar and gzip.<none>
    SUSE Linux Enterprise Server 12 (64-bit)Docker image is missing tar and gzip.<none>
    SUSE Linux Enterprise Server 11 (64-bit)glibc >= 2.17, libstdc++ >= 3.4.18Might work compiling glibc from source, but untested.
    ⚠️ Ubuntu 18.04 IoT (ARMv8l 64-bit)<n/a>Some extensions may not work when installed on an ARMv8l host due to extension x86 native code. Remote - Containers does support connecting to containers on an ARM host.
    Ubuntu Server 19.04 (64-bit)ubuntu:19.04<none><none>
    Ubuntu Server 18.04 (64-bit)ubuntu:18.04<none><none>
    Ubuntu Server 16.04 (64-bit)ubuntu:16.04<none><none>
    Ubuntu Server 14.04 (64-bit)<none><none>

    However, as a workaround, you can either build glibc manually or use the following script to install updated binaries. The bash script below will upgrade these libraries without having to build them. It is adapted from information in this article, this , and this Fedora copr project. The article also includes instructions for manually building glibc if you would prefer not to use the binaries from the article.

    Do not run this script on anything mission critical without a rollback strategy since it does update libraries that other applications depend on.

    For servers, run the following script and restart the server so the updates take effect.

    In a container environment, you can add similar contents to a Dockerfile:

    1. FROM centos:6
    2. RUN yum -y install wget tar
    3. # Update glibc
    4. RUN wget -q http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm \
    5. && wget -q http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm \
    6. && wget -q http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm \
    7. && wget -q http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm \
    8. && wget -q https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-utils-2.17-55.el6.x86_64.rpm \
    9. && wget -q https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-static-2.17-55.el6.x86_64.rpm \
    10. && rpm -Uh --force --nodeps \
    11. glibc-2.17-55.el6.x86_64.rpm \
    12. glibc-common-2.17-55.el6.x86_64.rpm \
    13. glibc-devel-2.17-55.el6.x86_64.rpm \
    14. glibc-headers-2.17-55.el6.x86_64.rpm \
    15. glibc-utils-2.17-55.el6.x86_64.rpm \
    16. && rm *.rpm
    17. # Update libstdc++
    18. RUN wget -q https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/gcc-4.8.2-16.3.fc20/libstdc++-4.8.2-16.3.el6.x86_64.rpm \
    19. && wget -q https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/gcc-4.8.2-16.3.fc20/libstdc++-devel-4.8.2-16.3.el6.x86_64.rpm \
    20. && wget -q https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/gcc-4.8.2-16.3.fc20/libstdc++-static-4.8.2-16.3.el6.x86_64.rpm \
    21. && rpm -Uh \
    22. libstdc++-4.8.2-16.3.el6.x86_64.rpm \
    23. libstdc++-devel-4.8.2-16.3.el6.x86_64.rpm \
    24. && rm *.rpm