Btw, never understood why do we need it in kernel as a part of kernel project.
For performance.
But it could be DKMS module or something other run as separate project? I got software arch point, but it seems very odd having such things in kernel project, no?
If the kernel had a standard ABI, an out-of-tree kernel module would be the way. As it is, DKMS is a pain and so in-tree modules are the easiest where license allows it.
Linus decided it's OK, so it's there. If Linus wouldn't approve it, DKMS would be an alternative. There are plenty of stuff in kernel, which might look weird to be there.