On Mon, 6 Apr 2009, Rob Arthan wrote:
I am trying to understand what level of binary compatibility I can expect if I use Poly/ML to create an executable by exporting a function which calls PolyML.rootFunction to give the users a Poly/ML interactive session. The users will then update the Poly/ML state, save it and reload it in later sessions using the functions in PolyML.SaveState. They will also load state files prebuilt for them.
If I build the executable on system A and create some saved state files there, how like A does some other system B have to be for the executable and the saved state files to work on B? I am concerned both about the compatibility for the saved state files and for the shared object files libpolyml.so and libpolymain.so. I understand QinetiQ have no problems moving between systems with Intel hardware and recent-ish slackware and Fedora operating systems. Would the same files work on my Intel Mac?
While David can probably explain better the true details, I can tell how we do it for Isabelle.
* We have a portable shell script that invents platform identifiers for combinations of HW and OS, according to "known equivalences". See http://isabelle.in.tum.de/repos/isabelle/file/tip/lib/scripts/polyml-platfor...
* We precompile Poly/ML for these equivalence classes of platforms as hinted in the README part of http://isabelle.in.tum.de/polyml-5.2.1/ It is important to use a "typical" representative of each platform equivalence class, neither too old, nor too new (to escape DLL-hell).
* We never "install" Poly/ML in a fixed place, but have a startup script that modifies LD_LIBRARY_PATH such that all libpoly* component are found again (on Mac OS this is DYLD_LIBRARY_PATH). Thus everything can be kept within a single "Isabelle" distribution directory, although this is not mandatory.
* Images produced by PolyML.SaveState are decorated by the same platform identifier. Poly/ML appears to require exactly the same executable to reload such an image.
This homegrown variant of "fat binaries" works quite well across a broad range of platforms, e.g. see the 7 platforms available via http://isabelle.in.tum.de/download_x86-linux.html
Only in rare situations, some users with very old Linux installations ever had to compile themselves.
Makarius