Admin/PLATFORMS
author wenzelm
Thu, 07 Apr 2016 20:51:52 +0200
changeset 62908 d7009a515733
parent 62011 03e69b1bf359
child 63520 2803d2b8f85d
permissions -rw-r--r--
clarified mode of ROOT.ML files;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
     1
Some notes on multi-platform support of Isabelle
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
     2
================================================
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
     3
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
     4
Preamble
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
     5
--------
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
     6
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
     7
The general programming model is that of a stylized ML + Scala + POSIX
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
     8
environment, with as little system-specific code in user-space tools
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
     9
as possible.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    10
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    11
The basic Isabelle system infrastructure provides some facilities to
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    12
make this work, e.g. see the ML and Scala modules File and Path, or
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    13
functions like Isabelle_System.bash.  The settings environment also
61294
2d3d26e9b191 renamed jvmpath to platform_path;
wenzelm
parents: 59114
diff changeset
    14
provides some means for portability, e.g. the bash function
2d3d26e9b191 renamed jvmpath to platform_path;
wenzelm
parents: 59114
diff changeset
    15
"platform_path" to keep the impression that Windows/Cygwin adheres to
2d3d26e9b191 renamed jvmpath to platform_path;
wenzelm
parents: 59114
diff changeset
    16
Isabelle/POSIX standards, although Poly/ML and the JVM are
2d3d26e9b191 renamed jvmpath to platform_path;
wenzelm
parents: 59114
diff changeset
    17
Windows-specific things.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    18
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    19
When producing add-on tools, it is important to stay within this clean
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    20
room of Isabelle, and refrain from overly ambitious system hacking.
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    21
The existing Isabelle scripts follow a peculiar style that reflects
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    22
long years of experience in getting system plumbing right.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    23
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    24
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    25
Supported platforms
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    26
-------------------
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    27
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    28
The following hardware and operating system platforms are officially
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    29
supported by the Isabelle distribution (and bundled tools), with the
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    30
following reference versions (which have been selected to be neither
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    31
too old nor too new):
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    32
44876
243e2a413787 some updates of PLATFORMS;
wenzelm
parents: 42424
diff changeset
    33
  x86-linux         Ubuntu 10.04 LTS
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    34
  x86_64-linux      Ubuntu 10.04 LTS
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    35
61741
adf6dd1d490e updated platform baseline to Mac OS X 10.8 Mountain Lion;
wenzelm
parents: 61294
diff changeset
    36
  x86_64-darwin     Mac OS X 10.8 Mountain Lion (macbroy30)
59114
8281f83d286f isatest for Mac OS X Yosemite;
wenzelm
parents: 58780
diff changeset
    37
                    Mac OS X 10.9 Mavericks (macbroy2)
8281f83d286f isatest for Mac OS X Yosemite;
wenzelm
parents: 58780
diff changeset
    38
                    Mac OS X 10.10 Yosemite (macbroy31)
61741
adf6dd1d490e updated platform baseline to Mac OS X 10.8 Mountain Lion;
wenzelm
parents: 61294
diff changeset
    39
                    Mac OS X 10.11 El Capitan
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    40
62011
wenzelm
parents: 61741
diff changeset
    41
  x86-cygwin        http://isabelle.in.tum.de/cygwin_2015 (x86/release)
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    42
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    43
All of the above platforms are 100% supported by Isabelle -- end-users
44876
243e2a413787 some updates of PLATFORMS;
wenzelm
parents: 42424
diff changeset
    44
should not have to care about the differences (at least in theory).
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    45
55391
eae296b5ef33 Mac OS X Lion (macbroy6) is baseline for portable executables;
wenzelm
parents: 49144
diff changeset
    46
Fringe platforms like BSD or Solaris are unsupported.
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    47
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    48
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    49
32 bit vs. 64 bit platforms
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    50
---------------------------
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    51
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    52
Most users have 64 bit hardware and are running a 64 bit operating
55391
eae296b5ef33 Mac OS X Lion (macbroy6) is baseline for portable executables;
wenzelm
parents: 49144
diff changeset
    53
system by default.  For Linux this usually means missing 32 bit shared
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    54
libraries, so native x86_64-linux needs to be used by default, despite
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    55
its doubled space requirements for Poly/ML heaps.  For Mac OS X, the
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    56
x86-darwin personality usually works seamlessly for C/C++ programs,
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    57
but the Java 7 platform is only available for x86_64-darwin.
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    58
49144
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
    59
Add-on executables are expected to work without manual user
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
    60
configuration.  Each component settings script needs to determine the
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
    61
platform details appropriately.
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    62
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    63
The Isabelle settings environment provides the following variables to
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    64
help configuring platform-dependent tools:
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    65
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    66
  ISABELLE_PLATFORM64  (potentially empty)
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    67
  ISABELLE_PLATFORM32
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    68
  ISABELLE_PLATFORM
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    69
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    70
The ISABELLE_PLATFORM setting variable refers to the 32 bit version of
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    71
the platform, even on 64 bit hardware.  Using regular bash notation,
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    72
tools may express their preference for 64 bit with a fall-back for 32
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    73
bit as follows:
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    74
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    75
  "${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}"
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    76
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    77
Moreover note that ML and JVM usually have a different idea of the
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    78
platform, depending on the respective binaries that are actually run.
49144
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
    79
Poly/ML 5.5.x performs best in 32 bit mode, even for large
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
    80
applications, thanks to its sophisticated heap management.  The JVM
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
    81
usually works better in 64 bit mode, which allows its heap to grow
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
    82
beyond 2 GB.
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    83
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    84
The traditional "uname" Unix tool usually only tells about its own
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
    85
executable format, not the underlying platform!
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    86
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    87
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    88
Dependable system tools
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    89
-----------------------
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    90
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    91
The following portable system tools can be taken for granted:
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    92
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    93
* GNU bash as uniform shell on all platforms.  The POSIX "standard"
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    94
  shell /bin/sh is *not* appropriate, because there are too many
44876
243e2a413787 some updates of PLATFORMS;
wenzelm
parents: 42424
diff changeset
    95
  non-standard implementations of it.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    96
58780
1f8c0da85664 discontinued python from standard system environment;
wenzelm
parents: 55438
diff changeset
    97
* Perl as largely portable system programming language, with its
1f8c0da85664 discontinued python from standard system environment;
wenzelm
parents: 55438
diff changeset
    98
  fairly robust support for processes, signals, sockets etc.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    99
61294
2d3d26e9b191 renamed jvmpath to platform_path;
wenzelm
parents: 59114
diff changeset
   100
* Scala with Java 1.8.  Isabelle/Scala irons out many oddities and
49144
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
   101
  portability issues of the Java platform.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   102
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   103
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   104
Known problems
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   105
--------------
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   106
55391
eae296b5ef33 Mac OS X Lion (macbroy6) is baseline for portable executables;
wenzelm
parents: 49144
diff changeset
   107
* Mac OS X: If MacPorts is installed there is some danger that
41668
62ed9f31ea90 more platform hints;
wenzelm
parents: 41458
diff changeset
   108
  accidental references to its shared libraries are created
62ed9f31ea90 more platform hints;
wenzelm
parents: 41458
diff changeset
   109
  (e.g. libgmp).  Use otool -L to check if compiled binaries also work
62ed9f31ea90 more platform hints;
wenzelm
parents: 41458
diff changeset
   110
  without MacPorts.
62ed9f31ea90 more platform hints;
wenzelm
parents: 41458
diff changeset
   111
55391
eae296b5ef33 Mac OS X Lion (macbroy6) is baseline for portable executables;
wenzelm
parents: 49144
diff changeset
   112
* Mac OS X: If MacPorts is installed and its version of Perl takes
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   113
  precedence over /usr/bin/perl in the PATH, then the end-user needs
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
   114
  to take care of installing extra modules, e.g. for HTTP support.
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
   115
  Such add-ons are usually included in Apple's /usr/bin/perl by
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
   116
  default.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   117
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   118
* The Java runtime has its own idea about the underlying platform,
48833
10584ca5785f updates on 32 bit vs. 64 bit platforms;
wenzelm
parents: 46006
diff changeset
   119
  which affects Java native libraries in particular.  In
49144
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
   120
  Isabelle/Scala the function isabelle.Platform.jvm_platform
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
   121
  identifies the JVM platform.  Since a particular Java version is
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
   122
  always bundled with Isabelle, the resulting settings also provide
84699f37481d misc tuning;
wenzelm
parents: 48836
diff changeset
   123
  some clues about its platform, without running it.
55438
3b95e70c5cb3 more platform notes;
wenzelm
parents: 55391
diff changeset
   124
3b95e70c5cb3 more platform notes;
wenzelm
parents: 55391
diff changeset
   125
* Common Unix tools like /bin/sh, /bin/kill, sed, ulimit are
3b95e70c5cb3 more platform notes;
wenzelm
parents: 55391
diff changeset
   126
  notoriously non-portable an should be avoided.