They didn't prioritize it until fixing at a late stage, barely before WSL 2 came out. Sometimes i do wonder if they made a premature decision to move to WSL2 since there was quite a lot of basic applications/runtimes that were crashing due to this fix lacking (Naturally a lot of other new Linux API's like io_uring probably would have made it an api chasing treadmill that they just wanted to circumvent).
I thought you could do it using ntdll functions, no?
https://www.jeremyong.com/winapi/io/2024/11/03/windows-memor...
Regardless this led WSL1 to have fatal incompatibilities for a long time, iirc basic stuff like the rpm system or something similarly fundamental for some distros/languages relied on it. And once WSL2 existed people just seems to have gone over.
As for NTFS: it's not NTFS specifically, it's the way the I/O system is designed in the NT kernel. Imagine any call from outside that layer transitioning through a stack of filter drivers before actually reaching the implementation. Very powerful stuff, but also very bad for performance.
Linux BPF programmers say, "hold my beer, watch this!"
They can code 12 BPF filters for the price of 3 Windows filters.
1. https://learn.microsoft.com/en-us/archive/blogs/wsl/pico-pro...