They also base their argument on "shared address space", which seems to me to be a quite arbitrary boundary. Every system call to the kernel at least in part runs in a shared address space with the application, but no one in their right mind considers all applications to be derivative works of the kernel.Huh? A system call traps into kernel code, which is self-contained in a completely different part of memory from the application. There is no part of the kernel that runs in the process's memory space. Perhaps you were thinking about the syscall stubs in libc, but just because user libraries have system call wrappers doesn't mean that there is any intermingling of the process and the kernel, either in address space or in code.