Admin/PLATFORMS
changeset 68002 13d5b2fc9b02
parent 67235 759d4fb30bfc
child 68374 8740e1241555
equal deleted inserted replaced
68001:0a2a1b6507c1 68002:13d5b2fc9b02
     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 as little system-specific code in user-space tools
     8 environment, with a minimum of system-specific code in user-space
     9 as possible.
     9 tools.
    10 
    10 
    11 The Isabelle system infrastructure provides some facilities to make
    11 The Isabelle system infrastructure provides some facilities to make
    12 this work, e.g. see the ML and Scala modules File and Path, or
    12 this work, e.g. see the ML and Scala modules File and Path, or
    13 functions like Isabelle_System.bash.  The settings environment also
    13 functions like Isabelle_System.bash.  The settings environment also
    14 provides some means for portability, e.g. the bash function
    14 provides some means for portability, e.g. the bash function
    17 Windows.
    17 Windows.
    18 
    18 
    19 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
    20 room of Isabelle, and refrain from non-portable access to operating
    20 room of Isabelle, and refrain from non-portable access to operating
    21 system functions. The Isabelle environment uses peculiar scripts for
    21 system functions. The Isabelle environment uses peculiar scripts for
    22 GNU bash and perl to get the plumbing right. This style should be
    22 GNU bash and perl as system glue: this style should be observed as far
    23 imitated as far as possible.
    23 as possible.
    24 
    24 
    25 
    25 
    26 Supported platforms
    26 Supported platforms
    27 -------------------
    27 -------------------
    28 
    28 
    34   x86_64-linux      Ubuntu 12.04 LTS
    34   x86_64-linux      Ubuntu 12.04 LTS
    35 
    35 
    36   x86_64-darwin     Mac OS X 10.10 Yosemite (macbroy31 MacBookPro6,2)
    36   x86_64-darwin     Mac OS X 10.10 Yosemite (macbroy31 MacBookPro6,2)
    37                     Mac OS X 10.11 El Capitan (macbroy2 MacPro4,1)
    37                     Mac OS X 10.11 El Capitan (macbroy2 MacPro4,1)
    38                     macOS 10.12 Sierra (macbroy30 MacBookPro6,2)
    38                     macOS 10.12 Sierra (macbroy30 MacBookPro6,2)
       
    39                     macOS 10.13 High Sierra
    39 
    40 
    40   x86_64-windows    Windows 7
    41   x86_64-windows    Windows 7
    41   x86_64-cygwin     Cygwin 2.8 http://isabelle.in.tum.de/cygwin_2017 (x86_64/release)
    42   x86_64-cygwin     Cygwin 2.8 http://isabelle.in.tum.de/cygwin_2017 (x86_64/release)
    42 
    43 
    43 All of the above platforms are 100% supported by Isabelle -- end-users
    44 All of the above platforms are 100% supported by Isabelle -- end-users
    44 should not have to care about the differences (at least in theory).
    45 should not have to care about the differences (at least in theory).
    45 
    46 
    46 Fringe platforms like BSD or Solaris are not supported.
    47 Exotic platforms like BSD, Solaris, NixOS are not supported.
    47 
    48 
    48 
    49 
    49 64 bit vs. 32 bit platform personality
    50 64 bit vs. 32 bit platform personality
    50 --------------------------------------
    51 --------------------------------------
    51 
    52 
    52 Isabelle requires 64 bit hardware running a 64 bit operating
    53 Isabelle requires 64 bit hardware running a 64 bit operating
    53 system. Windows and Mac OS X allow x86 executables as well, but for
    54 system. Windows and Mac OS X allow x86 executables as well, but for
    54 Linux this requires separate installation of 32 bit shared
    55 Linux this requires separate installation of 32 bit shared
    55 libraries. The POSIX emulation on Windows via Cygwin64 is exclusively
    56 libraries. The POSIX emulation on Windows via Cygwin64 works
    56 for x86_64.
    57 exclusively for x86_64.
    57 
    58 
    58 ML works both for x86_64 and x86, and the latter is preferred for space
    59 Poly/ML supports both for x86_64 and x86, and the latter is preferred
    59 and performance reasons. Java is always for x86_64 on all platforms.
    60 for space and performance reasons. Java is always the x86_64 version
       
    61 on all platforms.
    60 
    62 
    61 Add-on executables are expected to work without manual user
    63 Add-on executables are expected to work without manual user
    62 configuration. Each component settings script needs to determine the
    64 configuration. Each component settings script needs to determine the
    63 platform details appropriately.
    65 platform details appropriately.
    64 
    66 
    65 
    67 
    66 The Isabelle settings environment provides the following variables to
    68 The Isabelle settings environment provides the following important
    67 help configuring platform-dependent tools:
    69 variables to help configuring platform-dependent tools:
    68 
    70 
    69   ISABELLE_PLATFORM64  (potentially empty)
    71   ISABELLE_PLATFORM64  (potentially empty)
    70   ISABELLE_PLATFORM32  (potentially empty)
    72   ISABELLE_PLATFORM32  (potentially empty)
    71   ISABELLE_PLATFORM
       
    72 
    73 
    73 The ISABELLE_PLATFORM setting variable prefers the 32 bit personality of
    74 Each can be empty, but not both at the same time. Using GNU bash
    74 the platform, if possible. Using regular bash notation, tools may
    75 notation, tools may express their platform preference, e.g. first 64
    75 express their preference for 64 bit with a fall-back for 32 bit as
    76 bit and second 32 bit, or the opposite:
    76 follows:
       
    77 
    77 
    78   "${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}"
    78   "${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}"
       
    79   "${ISABELLE_PLATFORM32:-$ISABELLE_PLATFORM64}"
    79 
    80 
    80 
    81 
    81 There is a second set of settings for native Windows (instead of the
    82 There is a another set of settings for native Windows (instead of the
    82 POSIX emulation of Cygwin used before):
    83 POSIX emulation of Cygwin used before):
    83 
    84 
    84   ISABELLE_WINDOWS_PLATFORM64
    85   ISABELLE_WINDOWS_PLATFORM64
    85   ISABELLE_WINDOWS_PLATFORM32
    86   ISABELLE_WINDOWS_PLATFORM32
    86   ISABELLE_WINDOWS_PLATFORM
       
    87 
    87 
    88 It can be used like this:
    88 These are always empty on Linux and Mac OS X, and non-empty on
    89 
    89 Windows. They can be used like this to prefer native Windows and then
    90   "${ISABELLE_WINDOWS_PLATFORM:-$ISABELLE_PLATFORM}"
    90 Unix (first 64 bit second 32 bit):
    91 
    91 
    92   "${ISABELLE_WINDOWS_PLATFORM64:-${ISABELLE_WINDOWS_PLATFORM32:-${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}}}"
    92   "${ISABELLE_WINDOWS_PLATFORM64:-${ISABELLE_WINDOWS_PLATFORM32:-${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}}}"
    93 
    93 
    94 
    94 
    95 Dependable system tools
    95 Dependable system tools
    96 -----------------------
    96 -----------------------
    97 
    97 
    98 The following portable system tools can be taken for granted:
    98 The following portable system tools can be taken for granted:
    99 
    99 
   100 * Scala on top of Java 8.  Isabelle/Scala irons out many oddities and
   100 * Scala on top of Java.  Isabelle/Scala irons out many oddities and
   101   portability issues of the Java platform.
   101   portability issues of the Java platform.
   102 
   102 
   103 * GNU bash as uniform shell on all platforms. The POSIX "standard" shell
   103 * GNU bash as uniform shell on all platforms. The POSIX "standard"
   104   /bin/sh does *not* work -- there are too many non-standard
   104   shell /bin/sh does *not* work portably -- there are too many
   105   implementations of it. On Debian and Ubuntu /bin/sh is actually
   105   non-standard implementations of it. On Debian and Ubuntu /bin/sh is
   106   /bin/dash and thus introduces many oddities.
   106   actually /bin/dash and introduces many oddities.
   107 
   107 
   108 * Perl as largely portable system programming language, with its
   108 * Perl as largely portable system programming language, with its
   109   fairly robust support for processes, signals, sockets etc.
   109   fairly robust support for processes, signals, sockets etc.
   110 
   110 
   111 
   111 
   121   precedence over /usr/bin/perl in the PATH, then the end-user needs
   121   precedence over /usr/bin/perl in the PATH, then the end-user needs
   122   to take care of installing extra modules, e.g. for HTTP support.
   122   to take care of installing extra modules, e.g. for HTTP support.
   123   Such add-ons are usually included in Apple's /usr/bin/perl by
   123   Such add-ons are usually included in Apple's /usr/bin/perl by
   124   default.
   124   default.
   125 
   125 
   126 * The Java runtime has its own idea about the underlying platform, which
       
   127   affects Java native libraries in particular. In Isabelle/Scala the
       
   128   function isabelle.Platform.jvm_platform identifies the JVM platform.
       
   129   In the settings environment, ISABELLE_JAVA_PLATFORM provides the same
       
   130   information without running the JVM.
       
   131 
       
   132 * Common Unix tools like /bin/sh, /bin/kill, sed, ulimit are
   126 * Common Unix tools like /bin/sh, /bin/kill, sed, ulimit are
   133   notoriously non-portable an should be avoided.
   127   notoriously non-portable an should be avoided.
   134 
   128 
   135 * The traditional "uname" Unix tool only tells about its own executable
   129 * The traditional "uname" Unix tool only tells about its own executable
   136   format, not the underlying platform!
   130   format, not the underlying platform!