Description
What version of Go are Windows users using (go version
)?
$ go version go version * windows/*
Does this issue reproduce with the latest release?
Yes, it is due to architectural differences between Windows and other operating systems.
What did Windows people do?
Nothing.
We include regular end users of Go programs, including system administrators and developers who use software written in Go like Docker or software which is partially written in or makes use of Go components like Visual Studio and Git.
What did you expect to see?
That software written in go continues to work after disaster recovery or changing a sub directory from being physically present to being a reparse point to a large fresh volume, without hunting down configuration issues with go software because it persisted paths after calling EvalSymLinks
, assuming that the path would be more stable than the path configured explicitly by the system administrator after calling EvalSymLinks
.
Why should EvalSymLinks no-op on Windows?
On Windows, the path that EvalSymLinks
returns is not more stable, rather it is in very common situations random due to the GPT volume identifier being random and is hence the path returned by this API is also not under control of the administrator. The administrator might be forced to change reparse points or hard links due to disk failure, disaster recovery, resolving disk full problems, and similar. Hence, the use of EvalSymLinks
for the purposes it is designed for is wrong on Windows, even if its use is justified in the same software on other operating systems.
What did you see instead?
Docker services stop being able to start, even though they should have run and should continue to run from C:\Docker
, regardless of the fact that this directory resolves now to a Windows path on a different volume with a different GPT unique identifer and hence a different volume path in the form \\?\Volume{guid}
.