Recently I was made aware of one gotcha of using lua/luajit from multiple threads (with lua/luajit vm context per thread). And the problem is simply due to underlying libc thread safety which I (finally) understood why Python did with it's global (per all VM's in the process) lock.<p>Simply - things like getenv() are not-thread safe, and not guaranteed to be if there is setenv(). Not lua/luajit's fault, but might be seen as such (higher level language, supposed to guard folks from things like that).<p>It suddenly changed my thinking of VM's in general and their interaction with the standard library and the OS.<p>(One can say maybe every function from libc/msvcrt/etc. must be thread-safe, but then there are things like errno, or getenv() returning pointer).