It's not a "shell construct" either, the standard execvp libc function looks at PATH.
This isn’t really true. It is just that internally, the kernel calls the thread ID “pid” and the process ID “tgid” (“thread group ID”). But the getpid system call returns the “tgid” not the “pid”, and to get the “pid” you need to call gettid (get thread ID). Other kernel interfaces also use the terminology “thread”, e.g. /proc/thread_self, set_tid_address, set_thread_area/get_thread_area, the CLONE_THREAD flag to clone, inter alia
So, respectfully, you shouldn't dismiss grandparent with "This isn't really true".
It is false that it doesn't have the concept of processes and threads, or the distinction between them
What I was saying "isn't really true" is the second claim, not the first claim