Probably already doesn't matter, but this doesn't seem to be the reason.
Indeed, It is not the only reason. there are actually two (and to be even more precise even 3). The major one being that the compiler sometimes (wrongfully) indicate that the checksum has changed of a compiled unit and tries to rebuild that unit. At second stage it tries to place the rebuilded unit at a non-writeable location.
The third reason has to do with the order in which some units are included (and this becomes complicated pretty fast).
I always install my FPC and Lazarus in user space and literally never have I experienced this issue (well, the issue is there but in my case the compiler is actually able to perform al the actions. If you like to have more details then dive into the bug-tracker (both FPC and Lazarus). As of today it still seems to be an issue for some platforms.