I think that a ppu file stores checksum information of all ppu files it is using (only for the first level ppu's, the ones in a uses statement) . So, at the end, there is a tree of check sum data to validate all files needed to build Lazarus.
Yes, but that is for the compiler.
And that is why the compiler say "checksum changed".
So if the compiler is trying to use a PPU for some unit, then it can check if that PPU is "valid".
That is, if that PPU uses other units, and those other PPU are loaded, then the compiler can tell if the former PPU was build with those other PPU. And if not the compiler will (try to) recompile it.
And, if you have no packages, and if all source files are in one folder, then the compiler can see all those sources and do the work.
Well of course if a file in the RTL changed, and that single ppu was substituted, then the RTL source may not be in reach....
And the same happen with packages.
Packages are pre-compiled. After that the compiler only gets to see the ppu, but not the sources.
But that means, if a package needs to be recompiled, the IDE must do that before the package gets used.
And the IDE does not load each PPU to check all checksums. That would mean a lot of work (and time) before the IDE could even start the compiler.