I like the fact that using Kakoune has improved my shell script skills like crazy. (Posix) shell scripting is just everywhere and is an important skill to have. Kakoune uses shell integration everywhere and I've come to appreciate the the pragmatism/elegance of the "kakscript as a glue language paradigm".
Not on Windows.
Which may or not may matter.
I'm out of the loop and haven't touched windows seriously in years (other than to fix WiFi or printer issues for family. Sigh), so I probably misunderstood this Ubuntu in Windows completely.
You can't ask a regular Windows user to have it set up as a dependency.
I can't just go "wsl.exe" and have a very clean and seamless integration into Windows and pretend that "wsl.exe" is just another shell like cmd.exe or powershell.exe, WSL is it's own box off in a corner.
It is also too easy to write poor shell scripts. It is too easy, even for experienced developers to sneak in GNUisms, and forget simple facts, like how Bash and especially Perl aren't guaranteed to be installed on all systems. Sometimes I also wonder: does Kakoune set `-o pipefail` or `-o errexit`? If somebody sets `ENV` and does something fishy, will that make my text editor unlaunchable? Behavior rooted in common semantics rather than heavy syntax (Bash, Perl) or micro-languages (Awk, Sed) make the overall experience much more pleasant. Especially if you do something like Neovim (Awesome, etc.) and use Lua for Config so you don't have to reinvent anything
I agree that shelling out on a whim that Kakoune does is a tremendous waste of CPU cycles as the OS needs to construct and tear down a whole process just to do something trivial. Having said that, in day to day usage, kakoune feels quite responsive. It's also easy to hack up plugins really quickly.
Shelling out is a crude way of getting some parallelism also. You might be surprised that constructing a new thread vs constructing a new process in Linux is not that much different resource/latency wise. Since bash/dash code is probably cached in the system memory somewhere already and libc etc are again dynamically shared, it may not be as bad to construct a whole new process. TL;DR it's bad but maybe not as bad as one thinks. It's definitely avoidable and I would not design it this way myself. I remember having to shell out once because kakscript does not know how to increment 1 to a variable and I needed dash to do that! That was one expensive +1 calculation! and I can almost imagine my CPU heating up!