1 Some notes on multi-platform support of Isabelle
2 ================================================
7 The general programming model is that of a stylized ML + Scala + POSIX
8 environment, with hardly any system specific code in user-space tools
11 The basic Isabelle system infrastructure provides some facilities to
12 make this work, e.g. see the ML structures File and Path, or functions
13 like bash_output. The settings environment also provides some means
14 for portability, e.g. jvm_path to hold up the impression that Java on
15 Windows/Cygwin adheres to Isabelle/POSIX standards.
17 When producing add-on tools, it is important to stay within this clean
18 room of Isabelle, and refrain from overly ambitious system hacking.
19 The existing Isabelle scripts follow a certain style that might look
20 odd at first sight, but reflects long years of experience in getting
21 system plumbing right (which is quite hard).
27 The following hardware and operating system platforms are officially
28 supported by the Isabelle distribution (and bundled tools), with the
29 following reference versions (which have been selected to be neither
32 x86-linux Ubuntu 8.04 LTS Server
33 x86-darwin Mac OS Leopard
36 x86_64-linux Ubuntu 8.04 LTS Server (64)
37 x86_64-darwin Mac OS Leopard
39 All of the above platforms are 100% supported by Isabelle -- end-users
40 should not have to care about the differences at all. There are also
41 some secondary platforms where Poly/ML also happens to work:
48 There is no guarantee that Isabelle add-ons work on these fringe
49 platforms. Even Isabelle/Scala already fails on ppc-darwin due to
50 lack of JVM 1.6 support by Apple.
53 32 bit vs. 64 bit platforms
54 ---------------------------
56 64 bit hardware becomes more and more important for power users.
57 Add-on tools need to work seamlessly without manual user
58 configuration, although it is often sufficient to fall back on 32 bit
61 The ISABELLE_PLATFORM setting variable refers to the 32 bit version of
62 the platform, even on 64 bit hardware. Power-tools need to indicate
63 64 bit support explicitly, via the (optional) ISABELLE_PLATFORM64
64 setting. The following bash expressions prefers the 64 bit platform,
67 "${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM}"
69 Note that ML and JVM may have a different idea of the platform,
70 depending the the respective binaries that are actually run.
73 Dependable system tools
74 -----------------------
76 The following portable system tools can be taken for granted:
78 * GNU bash as uniform shell on all platforms. The POSIX "standard"
79 shell /bin/sh is *not* appropriate, because there are too many
80 different implementations of it.
82 * Perl as largely portable system programming language. In some
83 situations Python may serve as an alternative, but it usually
84 performs not as well in addressing various delicate details of
85 operating system concepts (processes, signals, sockets etc.).
87 * Scala with Java Runtime 1.6. The Isabelle/Pure.jar library irons
88 out many oddities and portability problems of the Java platform.
94 * Mac OS: If MacPorts is installed and its version of Perl takes
95 precedence over /usr/bin/perl in the PATH, then the end-user needs
96 to take care of installing extra modules, e.g. for HTTP support.
97 Such add-ons are usually included in Apple's /usr/bin/perl by
100 * The Java runtime has its own idea about the underlying platform,
101 e.g. on a 64 bit machine Isabelle/ML could be x86-linux, but the JVM
102 could be x86_64-linux. This affects Java native libraries in
103 particular -- which cause extra portability problems and can make
104 the JVM crash anyway.
106 In Isabelle/Scala isabelle.Platform.jvm_platform identifies the JVM
107 platform. Since there can be many different Java installations on
108 the same machine, which can also be run with different options,
109 reliable JVM platform identification works from inside the running