There are several ways, a filesystem can be used to introduce nondeterminism:
-
readdir order is already covered in its own section
-
storing
mtime,ctimeoratimevalues of files touched during build will introduce varying timestamps -
using
st_inoorst_devfields fromstat(2) -
storing
st_sizefor directories or usingst_blocksorst_blksizefor any file, because it is filesystem-dependent. E.g. creating a million files and removing them again, will cause a directory to be large on ext4