this maybe shouldn't be immutable, they tend to be a bit hard to ensure they are rooted properly in the GC (e.g. it may gets copied to the stack in the ccall)