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