Admin/PLATFORMS
author wenzelm
Fri, 17 Aug 2012 11:18:26 +0200
changeset 49848 10584ca5785f
parent 46877 36cd232b18bb
child 49851 90a0af19004c
permissions -rw-r--r--
updates on 32 bit vs. 64 bit platforms;
added Mountain Lion;
dropped Leopard;
tuned;
wenzelm@36204
     1
Some notes on multi-platform support of Isabelle
wenzelm@36204
     2
================================================
wenzelm@35610
     3
wenzelm@35610
     4
Preamble
wenzelm@35610
     5
--------
wenzelm@35610
     6
wenzelm@35610
     7
The general programming model is that of a stylized ML + Scala + POSIX
wenzelm@49848
     8
environment, with as little system-specific code in user-space tools
wenzelm@49848
     9
as possible.
wenzelm@35610
    10
wenzelm@35610
    11
The basic Isabelle system infrastructure provides some facilities to
wenzelm@49848
    12
make this work, e.g. see the ML and Scala modules File and Path, or
wenzelm@49848
    13
functions like Isabelle_System.bash.  The settings environment also
wenzelm@49848
    14
provides some means for portability, e.g. jvm_path to keep the
wenzelm@49848
    15
impression that Java on Windows/Cygwin adheres to Isabelle/POSIX
wenzelm@49848
    16
standards, although inside the JVM itself there are many
wenzelm@49848
    17
Windows-specific things.
wenzelm@35610
    18
wenzelm@35610
    19
When producing add-on tools, it is important to stay within this clean
wenzelm@35610
    20
room of Isabelle, and refrain from overly ambitious system hacking.
wenzelm@49848
    21
The existing Isabelle scripts follow a peculiar style that reflects
wenzelm@49848
    22
long years of experience in getting system plumbing right.
wenzelm@35610
    23
wenzelm@35610
    24
wenzelm@35610
    25
Supported platforms
wenzelm@35610
    26
-------------------
wenzelm@35610
    27
wenzelm@35610
    28
The following hardware and operating system platforms are officially
wenzelm@36204
    29
supported by the Isabelle distribution (and bundled tools), with the
wenzelm@36204
    30
following reference versions (which have been selected to be neither
wenzelm@36204
    31
too old nor too new):
wenzelm@35610
    32
wenzelm@45747
    33
  x86-linux         Ubuntu 10.04 LTS
wenzelm@49848
    34
  x86_64-linux      Ubuntu 10.04 LTS
wenzelm@49848
    35
wenzelm@49848
    36
  x86_64-darwin     Mac OS Snow Leopard (macbroy2)
wenzelm@45848
    37
                    Mac OS Lion (macbroy6)
wenzelm@49848
    38
                    Mac OS Mountain Lion (macbroy30)
wenzelm@49848
    39
wenzelm@45747
    40
  x86-cygwin        Cygwin 1.7 (vmbroy9)
wenzelm@35610
    41
wenzelm@36204
    42
All of the above platforms are 100% supported by Isabelle -- end-users
wenzelm@45747
    43
should not have to care about the differences (at least in theory).
wenzelm@49848
    44
There are also some additional platforms where Poly/ML might also
wenzelm@49848
    45
happen to work, but they are *not* covered by the official Isabelle
wenzelm@45747
    46
distribution:
wenzelm@35610
    47
wenzelm@35610
    48
  ppc-darwin
wenzelm@49848
    49
  x86-darwin
wenzelm@35610
    50
  sparc-solaris
wenzelm@35610
    51
  x86-solaris
wenzelm@35610
    52
  x86-bsd
wenzelm@35610
    53
wenzelm@45747
    54
There are increasing problems to make contributing components of
wenzelm@45747
    55
Isabelle work on such fringe platforms.  Note that x86-bsd is silently
wenzelm@45747
    56
treated like x86-linux -- this works if certain Linux compatibility
wenzelm@49848
    57
packages are installed on BSD.  Old 32 bit Macintosh hardware is no
wenzelm@49848
    58
longer supported due the its lack of Java 7.
wenzelm@36204
    59
wenzelm@36204
    60
wenzelm@36204
    61
32 bit vs. 64 bit platforms
wenzelm@36204
    62
---------------------------
wenzelm@36204
    63
wenzelm@49848
    64
Most users have 64 bit hardware and are running a 64 bit operating
wenzelm@49848
    65
system by default.  For Linux this often means missing 32 bit shared
wenzelm@49848
    66
libraries, so native x86_64-linux needs to be used by default, despite
wenzelm@49848
    67
its doubled space requirements for Poly/ML heaps.  For Mac OS X, the
wenzelm@49848
    68
x86-darwin personality usually works seamlessly for C/C++ programs,
wenzelm@49848
    69
but the Java 7 platform is only available for x86_64-darwin.
wenzelm@49848
    70
wenzelm@49848
    71
Add-on executables are expected to without manual user configuration,
wenzelm@49848
    72
Each component settings script needs to work out the platform details
wenzelm@49848
    73
appropriately.
wenzelm@49848
    74
wenzelm@49848
    75
The Isabelle settings environment provides the following variables to
wenzelm@49848
    76
help configuring platform-dependent tools:
wenzelm@49848
    77
wenzelm@49848
    78
  ISABELLE_PLATFORM64  (potentially empty)
wenzelm@49848
    79
  ISABELLE_PLATFORM32
wenzelm@49848
    80
  ISABELLE_PLATFORM
wenzelm@36204
    81
wenzelm@36204
    82
The ISABELLE_PLATFORM setting variable refers to the 32 bit version of
wenzelm@49848
    83
the platform, even on 64 bit hardware.  Using regular bash notation,
wenzelm@49848
    84
tools may express their preference for 64 bit with a fall-back for 32
wenzelm@49848
    85
bit as follows:
wenzelm@36204
    86
wenzelm@49848
    87
  "${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}"
wenzelm@36204
    88
wenzelm@49848
    89
Moreover note that ML and JVM usually have a different idea of the
wenzelm@49848
    90
platform, depending on the respective binaries that are actually run.
wenzelm@49848
    91
Poly/ML 5.5.x runs most efficiently on 32 bit, even for large
wenzelm@49848
    92
applications.  The JVM usually performs better in 64 bit mode.
wenzelm@49848
    93
wenzelm@49848
    94
The traditional "uname" Unix tool usually only tells about its own
wenzelm@49848
    95
executable format, not the underlying platform!
wenzelm@35610
    96
wenzelm@35610
    97
wenzelm@35610
    98
Dependable system tools
wenzelm@35610
    99
-----------------------
wenzelm@35610
   100
wenzelm@35610
   101
The following portable system tools can be taken for granted:
wenzelm@35610
   102
wenzelm@36204
   103
* GNU bash as uniform shell on all platforms.  The POSIX "standard"
wenzelm@36204
   104
  shell /bin/sh is *not* appropriate, because there are too many
wenzelm@45747
   105
  non-standard implementations of it.
wenzelm@35610
   106
wenzelm@36204
   107
* Perl as largely portable system programming language.  In some
wenzelm@36204
   108
  situations Python may serve as an alternative, but it usually
wenzelm@36204
   109
  performs not as well in addressing various delicate details of
wenzelm@36204
   110
  operating system concepts (processes, signals, sockets etc.).
wenzelm@35610
   111
wenzelm@49848
   112
* Scala with Java 1.7.  The Isabelle/Scala layer irons out many
wenzelm@49848
   113
  oddities and portability issues of the Java platform.
wenzelm@35610
   114
wenzelm@35610
   115
wenzelm@35610
   116
Known problems
wenzelm@35610
   117
--------------
wenzelm@35610
   118
wenzelm@42539
   119
* Mac OS: If MacPorts is installed there is some danger that
wenzelm@42539
   120
  accidental references to its shared libraries are created
wenzelm@42539
   121
  (e.g. libgmp).  Use otool -L to check if compiled binaries also work
wenzelm@42539
   122
  without MacPorts.
wenzelm@42539
   123
wenzelm@35610
   124
* Mac OS: If MacPorts is installed and its version of Perl takes
wenzelm@35610
   125
  precedence over /usr/bin/perl in the PATH, then the end-user needs
wenzelm@36204
   126
  to take care of installing extra modules, e.g. for HTTP support.
wenzelm@36204
   127
  Such add-ons are usually included in Apple's /usr/bin/perl by
wenzelm@36204
   128
  default.
wenzelm@35610
   129
wenzelm@35610
   130
* The Java runtime has its own idea about the underlying platform,
wenzelm@49848
   131
  which affects Java native libraries in particular.  In
wenzelm@49848
   132
  Isabelle/Scala isabelle.Platform.jvm_platform identifies the JVM
wenzelm@36204
   133
  platform.  Since there can be many different Java installations on
wenzelm@36204
   134
  the same machine, which can also be run with different options,
wenzelm@36204
   135
  reliable JVM platform identification works from inside the running
wenzelm@36204
   136
  JVM only.