Yes, it's intentional. For this case exec.Command.Run just returns
the error from os.StartProcess, which is documented to consistently
return an error of type *os.PathError. StartProcess returns
PathError so that it can return the name of the executable that was
not started.
It's true that in some cases it would be better to return
SyscallError, although that would require some work to keep track of
exactly which system call failed: it might easily be a system call
executed by the child process. But I'm not sure we can change it now,
given that it has worked this way for a long time and it is
documented.
Ian