Skip to content

Download alternative server depending on platform requirements #206790

@deepak1556

Description

@deepak1556

As a next step in the linux server story we want to build and consume two different flavors of server that will be used depending on the platform requirements. This is useful to pretest the server with newer requirements before the EOL of legacy server which is currently set for February 2025.

  1. Server with glibc >= 2.28 and libstdc++ >= 3.4.25
  2. Server with glibc >= 2.17 and libstdc++ >= 3.4.19, we will call this legacy server

There are 3 parts to this next step,

(i) Production:

VS Code production pipeline will create the above two variants of the server for each of the linux supported architectures (x64, armhf, arm64). A prototype was already created in #204139, I will polish the PR and prepare it for merge as next step. The end result will look like the following screenshot.
Screenshot 2024-03-04 at 14 21 31

(ii) Detection:

Today we have detection of glibc and libstdc++ in two variations, one in the tunnel binary used in the exec server mode and the other as a shell script. The shell script can only perform the detection on a best effort basis due to various limitations but thanks for efforts from the community it works in most cases.

However I wonder if we should just have one variant of the detection as part of this effort, basically we rely on the tunnel binary to do the detection, add a new property to ExecEnvironment that will provide the glibc version and libstdc++ max version. Thoughts @connor4312 ?

Another question, can the remote extensions today use the execServer mode just for detection even if it is not for the other parts of the modal ? That is, get the result from execServer.env() and proceed to their usual server setup flow.

export interface ExecEnvironment {
		...
             /** provides the result of gnu_get_libc_version **/
             glibcVersion?: string
             /** provides the maximum version of the symbol found in the libstdc++.so.6 library **/
             glibcxxMaxVersion?: string
}

(iii) Consumption:

This needs change in the places where the server gets downloaded today, based on the result of detection we want to either download from https://update.code.visualstudio.com/commit:${commit}/${legacy ? 'legacy-' : ''}server-${build.id}${web ? '-web' : ''}/${quality}. The only difference in the download endpoint will be the legacy- prefix.

Let me know if this plan makes sense.

Metadata

Metadata

Labels

engineeringVS Code - Build / issue tracking / etc.on-testplanremoteRemote system operations issues

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions