Reproducibility in software is a big challenge. Churn in FOSS libraries is large. Making sure software runs exactly as it did originally is very hard. This is due to the way software development and distribution currently works.
Linux distributions mostly provide only one version of a library at a time. Since a program can depend on many libraries, somewhere along the stack some code will be different from the original code almost immediately. If the code is run on a different distribution, it will be running using a different version of libraries that the software depends on; if only because the build flags are different.
We can pretend that this should not make a difference, but it does. The software stacks are so complex nowadays, that it's very hard to predict how software will behave.
The closest that scientific software can get to being reproducible is to provide the software compiled for a virtual machine with all the required libraries also implemented in that virtual machine and distributed in source and binary form with the software.
The best candidate for this is currently Java, where the entire set of code, libraries and required data and configuration files can be put in a single jar file. Java has a stable instruction set and is available on many platforms. The behavior of e.g. floating point operations is standardized and independent of compiler flags as it is for compiled code.