Have you ever checked out a project from its last release and found the build no longer worked? Or, maybe a project that you had just built yesterday seems to have magically stopped building today.
If build portability is the ability to run a build anywhere with a minimum amount of configuration, reproducibility is the ability to run the build the same way every time, particularly at some point in the future.
This is particularly relevant for releasing, which we will examine in more detail in later chapters. Once that build is locked down, you want to make sure it is already equipped to be reproduced exactly at a point in the future.
The portability that we have just examined is a prerequisite to reproducibility, particularly if the source code is being distributed to third parties to build instead of consuming the official binary releases. To ensure reproducibility, the build must be isolated from change, so dependence on external resources and configuration is likely...