Admin/components/PLATFORMS
author wenzelm
Sun, 04 Feb 2024 21:51:30 +0100
changeset 79573 0e7dd3eaa6e8
parent 79563 76ad72736e9e
child 79591 6e5f40cfa877
permissions -rw-r--r--
updated windows_app based on launch4j-3.50-linux-x64, without rebuilding GNU binutils (missing COFF target pe-i386);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64339
321065f9f55b misc tuning and updates;
wenzelm
parents: 64337
diff changeset
     1
Multi-platform support of Isabelle
321065f9f55b misc tuning and updates;
wenzelm
parents: 64337
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
68002
13d5b2fc9b02 misc tuning and clarification;
wenzelm
parents: 67235
diff changeset
     8
environment, with a minimum of system-specific code in user-space
13d5b2fc9b02 misc tuning and clarification;
wenzelm
parents: 67235
diff changeset
     9
tools.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    10
67235
wenzelm
parents: 67088
diff changeset
    11
The Isabelle system infrastructure provides some facilities to make
wenzelm
parents: 67088
diff changeset
    12
this work, e.g. see the ML and Scala modules File and Path, or
48833
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
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    16
Isabelle/POSIX standards, although many executables are native on
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    17
Windows (notably Poly/ML and Java).
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
67235
wenzelm
parents: 67088
diff changeset
    20
room of Isabelle, and refrain from non-portable access to operating
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    21
system functions. The Isabelle environment uses GNU bash and
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    22
Isabelle/Scala as portable system infrastructure, using somewhat
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    23
peculiar implementation techniques.
35610
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
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    26
Supported platforms
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
72366
ed99d0f9b536 clarified;
wenzelm
parents: 72359
diff changeset
    29
A broad range of hardware and operating system platforms are supported
ed99d0f9b536 clarified;
wenzelm
parents: 72359
diff changeset
    30
by building executables on base-line versions that are neither too old
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    31
nor too new. Common OS families should work: Linux, macOS,
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    32
Windows. More exotic platforms are unsupported: NixOS, BSD, Solaris.
72366
ed99d0f9b536 clarified;
wenzelm
parents: 72359
diff changeset
    33
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    34
Official platforms:
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    35
78773
9198e785d3d7 updated Linux baseline to Ubuntu 18.04;
wenzelm
parents: 78771
diff changeset
    36
  x86_64-linux      Ubuntu 18.04 LTS
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    37
78777
3b424f9cd5eb update platforms: discontinue macOS 10.13 High Sierra, macOS 10.14 Mojave, macOS 10.15 Catalina;
wenzelm
parents: 78773
diff changeset
    38
  x86_64-darwin     macOS 11 Big Sur (mini1 Macmini8,1)
3b424f9cd5eb update platforms: discontinue macOS 10.13 High Sierra, macOS 10.14 Mojave, macOS 10.15 Catalina;
wenzelm
parents: 78773
diff changeset
    39
                    macOS 12 Monterey (???)
78484
18c2c03a699d more hardware details;
wenzelm
parents: 78304
diff changeset
    40
                    macOS 13 Ventura (mini3 Mac14,12 -- MacMini M2 Pro, 6+4 cores)
78771
d7f4c5c7bebb more platform tests: initial support for macOS 14 Sonoma;
wenzelm
parents: 78743
diff changeset
    41
                    macOS 14 Sonoma (mini2 Macmini8,1)
72366
ed99d0f9b536 clarified;
wenzelm
parents: 72359
diff changeset
    42
78484
18c2c03a699d more hardware details;
wenzelm
parents: 78304
diff changeset
    43
  arm64-darwin      macOS 11 Big Sur (assur Macmini9,1 -- MacMini M1, 4+4 cores)
76375
089e546f671f more macOS platforms, without reference hardware;
wenzelm
parents: 76028
diff changeset
    44
                    macOS 12 Monterey (???)
78484
18c2c03a699d more hardware details;
wenzelm
parents: 78304
diff changeset
    45
                    macOS 13 Ventura (mini3 Mac14,12 -- MacMini M2 Pro, 6+4 cores)
78771
d7f4c5c7bebb more platform tests: initial support for macOS 14 Sonoma;
wenzelm
parents: 78743
diff changeset
    46
                    macOS 14 Sonoma (studio1 Mac13,2 M1 Ultra, 16+4 cores)
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    47
72526
a3d096a98b69 clarified Windows base line;
wenzelm
parents: 72483
diff changeset
    48
  x86_64-windows    Windows 10
78304
e4b57eea7f86 update cygwin for Isabelle2023 -- somewhere after cygwin 3.4.0-1 (see https://cygwin.com/pipermail/cygwin-announce/2022-December/010821.html);
wenzelm
parents: 78144
diff changeset
    49
  x86_64-cygwin     Cygwin 3.4.x https://isabelle.sketis.net/cygwin_2023 (x86_64/release)
72366
ed99d0f9b536 clarified;
wenzelm
parents: 72359
diff changeset
    50
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    51
Experimental platforms:
72359
9af8124f7f0d clarified platforms;
wenzelm
parents: 71537
diff changeset
    52
79563
76ad72736e9e rebuild "verit" for arm64-linux for more robustness, e.g. relevant for theory "HOL-ex.BigO";
wenzelm
parents: 78777
diff changeset
    53
  arm64-linux       Ubuntu 18.04 LTS (e.g. via "docker run -it ubuntu:20.04 bash")
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    54
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    55
66911
d122c24a93d6 misc tuning and modernization;
wenzelm
parents: 66908
diff changeset
    56
64 bit vs. 32 bit platform personality
d122c24a93d6 misc tuning and modernization;
wenzelm
parents: 66908
diff changeset
    57
--------------------------------------
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    58
67235
wenzelm
parents: 67088
diff changeset
    59
Isabelle requires 64 bit hardware running a 64 bit operating
72895
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    60
system. Only Windows still supports native x86 executables, but the
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    61
POSIX emulation on Windows via Cygwin64 works exclusively for x86_64.
65073
b5bf76cf2b4e more uniform platform settings;
wenzelm
parents: 64406
diff changeset
    62
72895
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    63
The Isabelle settings environment provides variable
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    64
ISABELLE_PLATFORM64 to refer to the standard platform personality. On
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    65
Windows this is for Cygwin64, but the following native platform
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    66
identifiers are available as well:
65073
b5bf76cf2b4e more uniform platform settings;
wenzelm
parents: 64406
diff changeset
    67
66732
e566fb4d43d4 more and updated documentation;
wenzelm
parents: 66728
diff changeset
    68
  ISABELLE_WINDOWS_PLATFORM64
65073
b5bf76cf2b4e more uniform platform settings;
wenzelm
parents: 64406
diff changeset
    69
  ISABELLE_WINDOWS_PLATFORM32
b5bf76cf2b4e more uniform platform settings;
wenzelm
parents: 64406
diff changeset
    70
72894
bd2269b6cd99 updated "macOS" terminology: current Big Sur is already version 11;
wenzelm
parents: 72526
diff changeset
    71
These are always empty on Linux and macOS, and non-empty on
72895
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    72
Windows. For example, this is how to refer to native Windows and
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    73
fall-back on Unix (always 64 bit):
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    74
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    75
  "${ISABELLE_WINDOWS_PLATFORM64:-$ISABELLE_PLATFORM64}"
65073
b5bf76cf2b4e more uniform platform settings;
wenzelm
parents: 64406
diff changeset
    76
72895
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    77
And this is for old 32 bit executables on Windows, but still 64 bit on
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    78
Unix:
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    79
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
    80
  "${ISABELLE_WINDOWS_PLATFORM32:-$ISABELLE_PLATFORM64}"
65073
b5bf76cf2b4e more uniform platform settings;
wenzelm
parents: 64406
diff changeset
    81
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    82
For Apple Silicon the native platform is "$ISABELLE_APPLE_PLATFORM64"
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    83
(arm64-darwin), but thanks to Rosetta 2 "$ISABELLE_PLATFORM64"
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    84
(x64_64-darwin) works routinely with fairly good performance.
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    85
65073
b5bf76cf2b4e more uniform platform settings;
wenzelm
parents: 64406
diff changeset
    86
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    87
Dependable system tools
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    88
-----------------------
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
The following portable system tools can be taken for granted:
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    91
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    92
* Scala on top of Java.  Isabelle/Scala irons out many fine points of
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    93
  the Java platform to make it fully portable as described above.
64339
321065f9f55b misc tuning and updates;
wenzelm
parents: 64337
diff changeset
    94
68002
13d5b2fc9b02 misc tuning and clarification;
wenzelm
parents: 67235
diff changeset
    95
* GNU bash as uniform shell on all platforms. The POSIX "standard"
13d5b2fc9b02 misc tuning and clarification;
wenzelm
parents: 67235
diff changeset
    96
  shell /bin/sh does *not* work portably -- there are too many
13d5b2fc9b02 misc tuning and clarification;
wenzelm
parents: 67235
diff changeset
    97
  non-standard implementations of it. On Debian and Ubuntu /bin/sh is
13d5b2fc9b02 misc tuning and clarification;
wenzelm
parents: 67235
diff changeset
    98
  actually /bin/dash and introduces many oddities.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    99
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   100
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   101
Known problems
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
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
   104
* macOS: If Homebrew or MacPorts is installed, there is some danger
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
   105
  that accidental references to its shared libraries are created
41668
62ed9f31ea90 more platform hints;
wenzelm
parents: 41458
diff changeset
   106
  (e.g. libgmp).  Use otool -L to check if compiled binaries also work
62ed9f31ea90 more platform hints;
wenzelm
parents: 41458
diff changeset
   107
  without MacPorts.
62ed9f31ea90 more platform hints;
wenzelm
parents: 41458
diff changeset
   108
55438
3b95e70c5cb3 more platform notes;
wenzelm
parents: 55391
diff changeset
   109
* Common Unix tools like /bin/sh, /bin/kill, sed, ulimit are
64339
321065f9f55b misc tuning and updates;
wenzelm
parents: 64337
diff changeset
   110
  notoriously non-portable an should be avoided.
66911
d122c24a93d6 misc tuning and modernization;
wenzelm
parents: 66908
diff changeset
   111
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
   112
* The traditional "uname" Unix tool only tells about its own
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
   113
  executable format, not the underlying platform!