1. Portability of programs using PractRand: In general, PractRands attempts to produce identical results across all platforms. However, there are some exceptions, particularly with regard to endianness. These exceptions include: Some non-recommended RNGs may produce different results on big endian platforms than on little endian platforms There are numerous minor endianness issues in the tests, and in how the TestBlocks for the tests are filled. These tend to cause tests results to not be identical between big and little endian platforms, though the differences are minor. The recommended RNGs themselves are intended to return identical output on big and little endian platforms. The ones that can act as entropy pools are intended to respond identically to the same input across big and little endian platforms. However, small errors in endian portability may have crept in. Furthermore, in many scenarios it can be very difficult for a user to correctly handle endianness portability, indepent of the behavior of library. Thus, it is recommended that users who need strict endian independence think carefully about what that means and do plenty of testing. 2. Portability of PractRand itself: I have built PractRand on: gcc 4.6.1 / x86-64 (64-bit) / Ubuntu Linux gcc 4.5.4 / MinGW x64 (64-bit) gcc 3.4.5 / MinGW x86 (32-bit) - though TLS was not supported VC 2010 x86 (32-bit) VC 2013 x86 (32-bit) PractRand uses a subset of C++98 and/or C99. explicitly: C++11 support is not required. Same for C++13. When compiling on a different platform, the first thing that must be done is a few minor edits in include/PractRand/config.h In addition to that, the basic version of PractRand requires: note: if you don't know what any of these means, don't freak; this stuff all basically just translates to a reasonably compliant C++ compiler and a normal hardware environment typical of modern PCs and many embedded chips. memory be addressed in 8-bit units (sizeof(Uint8) == 1) support for 8, 16, 32, and 64 bit signed and unsigned integers including unsigned right-shifts on all unsigned integer types and signed right-shifts on signed integer types basic C++ support including namespaces and templates all decent C++ compilers qualify template support not completely required, but very strongly recommended exceptions are not required the standard C/C++ library, including STL all decent C++ compilers support this endianness must be either big endian or little endian, not "middle endian" all remotely modern architectures qualify auto-seeding & automatic entropy work best on either Windows or *nix see platform_specifics.cpp You can add code there for your platform IEEE compliant floating point only required for randf & randlf methods and even then nothing very bad happens if it's not compliant and it can be adjusted for non-IEEE formats in RNG_internals.h If you are using PractRand from a multithreaded program, some additional requirements may apply: compiler-level support for Thread Local Storage (TLS) not actually mandatory, but autoseeding works better with TLS the implementation of the C/C++ standard library used must be thread-safe ie thread-safe malloc, etc multithreading on unrecognized platforms may cause PractRand to leak, but only a 1 byte heap allocation per thread created In addition to that, the tools (as opposed to the libraries) may require: a command line environment either pthreads or win32 (not actually required, but recommended) Exception: Test_calibration is not portable at this time. It's not ready for use by end users anyway, so that shouldn't matter.