Honestly, I would bet that MRI releases the GIL when it does IO or similar. I know the behavior in CPython is similar, where when you call out to libc funcs to do IO, the GIL is released first. I don’t know anything specifically about the internals of MRI Ruby, but I wouldn’t be surprised if it was the case there as well. This reinforces the author’s conclusion that high IO workloads wouldn’t benefit from TruffleRuby/JRuby.
No, it’s not GIL here. As the article states, Jekyll is not multithreaded.
Author here. One thing I was thinking about was is how a popular program like jekyll becomes optimized for its runtime and all those tweaks likely harm performance if the runtime is changed. Like Ruby strings are mutable and java strings are immutable and a thousand other things like that.