Admin/components/README.md
author haftmann
Fri, 01 Aug 2025 20:01:55 +0200
changeset 82912 ad66fb23998a
parent 82320 8d9b5289304c
permissions -rw-r--r--
prefer sign-agnostic conversion following bit structure
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
     1
# Isabelle system components #
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
     2
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
     3
## Multi-platform support of Isabelle ##
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
     4
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
     5
### Preamble ###
35610
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
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
     8
environment, with a minimum of system-specific code in user-space tools.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
     9
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
    10
The Isabelle system infrastructure provides some facilities to make this work,
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
    11
e.g. see the ML and Scala modules `File` and `Path`, or functions like
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
    12
`Isabelle_System.bash`. The settings environment also provides some means for
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
    13
portability, e.g. the `bash` function `platform_path` to keep the impression
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    14
that Windows/Cygwin adheres to Isabelle/POSIX standards, although most
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    15
executables are running natively on Windows.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    16
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
    17
When producing add-on tools, it is important to stay within this clean room of
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
    18
Isabelle, and refrain from non-portable access to operating system functions.
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    19
The Isabelle environment uses Isabelle/Scala as portable system
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    20
infrastructure, and Isabelle/ML refers to that for anything non-trivial.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    21
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    22
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
    23
### Supported platforms ###
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    24
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
    25
A broad range of hardware and operating system platforms are supported by
79990
wenzelm
parents: 79988
diff changeset
    26
building executables on base-line versions that are neither too old nor too
wenzelm
parents: 79988
diff changeset
    27
new. Common OS families should work: Linux, macOS, Windows. Exotic platforms
wenzelm
parents: 79988
diff changeset
    28
are unsupported: NixOS, BSD, Solaris etc.
72366
ed99d0f9b536 clarified;
wenzelm
parents: 72359
diff changeset
    29
79990
wenzelm
parents: 79988
diff changeset
    30
The official platforms, with **base-line operating systems**, and reference
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    31
machines are as follows:
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
    32
80032
wenzelm
parents: 80031
diff changeset
    33
  * `x86_64-linux` and `arm64-linux`
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    34
      - **Ubuntu 18.04 LTS** (e.g. via `docker run -it ubuntu:18.04 bash`)
72366
ed99d0f9b536 clarified;
wenzelm
parents: 72359
diff changeset
    35
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
    36
  * `x86_64-darwin`
82320
8d9b5289304c discontinue macOS 11 Big Sur;
wenzelm
parents: 82309
diff changeset
    37
      - **macOS 12 Monterey** (`mini1` Macmini8,1, 6 cores) (`aleppo` Macmini7,1, 2 cores)
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
    38
      - macOS 13 Ventura (`mini3` Mac14,12 -- MacMini M2 Pro, 6+4 cores)
82320
8d9b5289304c discontinue macOS 11 Big Sur;
wenzelm
parents: 82309
diff changeset
    39
      - macOS 14 Sonoma (`mini2` Macmini8,1, 6 cores)
8d9b5289304c discontinue macOS 11 Big Sur;
wenzelm
parents: 82309
diff changeset
    40
      - macOS 15 Sequoia (`hattusa` Mac16,11 -- MacMini M4 Pro, 10+4 cores)
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
    41
  * `arm64-darwin`
82320
8d9b5289304c discontinue macOS 11 Big Sur;
wenzelm
parents: 82309
diff changeset
    42
      - **macOS 12 Monterey** (`assur` Macmini9,1 -- MacMini M1, 4+4 cores)
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
    43
      - macOS 13 Ventura (`mini3` Mac14,12 -- MacMini M2 Pro, 6+4 cores)
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
    44
      - macOS 14 Sonoma (`studio1` Mac13,2 M1 Ultra, 16+4 cores)
82320
8d9b5289304c discontinue macOS 11 Big Sur;
wenzelm
parents: 82309
diff changeset
    45
      - macOS 15 Sequoia (`hattusa` Mac16,11 -- MacMini M4 Pro, 10+4 cores)
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
    46
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
    47
  * `x86_64-windows`
82309
1a4be2516f50 ZGC of Java 21 is enabled by default: now possible, because Windows Server 2012 (vmnipkow9) has been discontinued;
wenzelm
parents: 82066
diff changeset
    48
      - Windows Server 2019 (minimum for Java ZGC)
80150
96f60533ec1d update Windows test machines;
wenzelm
parents: 80032
diff changeset
    49
      - **Windows Server 2022** (`se0.proof.cit.tum.de`)
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    50
      - **Windows 10**
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    51
      - Windows 11
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
    52
  * `x86_64-cygwin`
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    53
      - **Cygwin 3.5.x**
81755
1609254b74c5 update cygwin near 3.5.5-1, see also https://cygwin.com/pipermail/cygwin-announce/2024-December/012023.html
wenzelm
parents: 81109
diff changeset
    54
        https://isabelle.sketis.net/cygwin_2025 (`x86_64/release`)
72366
ed99d0f9b536 clarified;
wenzelm
parents: 72359
diff changeset
    55
80030
5c00c04f09fb misc tuning;
wenzelm
parents: 79990
diff changeset
    56
Multi-platform tools require thorough testing on all platforms: base-line and
5c00c04f09fb misc tuning;
wenzelm
parents: 79990
diff changeset
    57
latest versions. It "works for me on my system" is not sufficient for the
5c00c04f09fb misc tuning;
wenzelm
parents: 79990
diff changeset
    58
general public.
5c00c04f09fb misc tuning;
wenzelm
parents: 79990
diff changeset
    59
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    60
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    61
### Multiple platform personalities ###
36204
16c371c6ff86 some updates on multi-platform support;
wenzelm
parents: 35610
diff changeset
    62
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    63
Isabelle works with current 64 bit hardware and 64 bit operating systems,
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    64
which usually means Intel (`x86_64`) and very often ARM (`arm64`). Windows and
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    65
macOS provide `x86_64` emulation on their ARM versions, so that is in theory
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    66
sufficient, but native `arm64` is more efficient. Linux lacks proper
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    67
emulation, so tools should be provided for `x86_64-linux` and `arm64-linux`
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    68
whenever possible. Also note that `arm64-linux` is the standard platform for
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    69
Docker on ARM hardware (e.g. Apple Silicon).
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    70
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    71
For extra performance on macOS, Isabelle tools are usually included in both
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    72
variants: `x86_64-darwin` and `arm64-darwin` (or as hybrid executable that
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    73
pretends to be `x86_64-darwin`, the default platform). Windows support is only
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    74
for Intel so far: this could mean `x86_64-windows` or `x86_64-cygwin`, but
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    75
also `x86-windows` for old binary-only tools.
65073
b5bf76cf2b4e more uniform platform settings;
wenzelm
parents: 64406
diff changeset
    76
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
    77
The Isabelle settings environment provides variable `ISABELLE_PLATFORM64` to
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    78
refer to the standard POSIX platform personality (Linux/ARM, Linux/Intel,
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    79
macOS/Intel, Windows/Cygwin64/Intel). Alternative settings are available for
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    80
native platforms as show below. In summary, the symbolic platform names from
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    81
the settings environment are as follows:
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    82
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    83
  * Linux (Intel)
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    84
    - `ISABELLE_PLATFORM64` is `x86_64-linux`
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    85
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    86
  * Linux (ARM)
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    87
    - `ISABELLE_PLATFORM64` is `arm64-linux`
65073
b5bf76cf2b4e more uniform platform settings;
wenzelm
parents: 64406
diff changeset
    88
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    89
  * Windows
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    90
    - `ISABELLE_PLATFORM64` is `x86_64-cygwin`
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    91
    - `ISABELLE_WINDOWS_PLATFORM64` is `x86_64-windows`
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    92
    - `ISABELLE_WINDOWS_PLATFORM32` is `x86-windows`
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    93
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    94
  * macOS (Intel)
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    95
    - `ISABELLE_PLATFORM64` is `x86_64-darwin`
65073
b5bf76cf2b4e more uniform platform settings;
wenzelm
parents: 64406
diff changeset
    96
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    97
  * macOS (ARM)
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    98
    - `ISABELLE_PLATFORM64` is `x86_64-darwin`
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
    99
    - `ISABELLE_APPLE_PLATFORM64` is `arm64-darwin`
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   100
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   101
When used outside their proper system context, platform settings remain empty.
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   102
This allows to refer symbolically to various combinations, using conditional
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   103
expressions in GNU `bash` like this:
72895
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
   104
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   105
  * `"${ISABELLE_WINDOWS_PLATFORM64:-$ISABELLE_PLATFORM64}"`
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   106
    -- native Windows, or default POSIX platform (always Intel on macOS)
72895
dc9f43a9ad23 update on platforms;
wenzelm
parents: 72894
diff changeset
   107
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   108
  * `"${ISABELLE_WINDOWS_PLATFORM64:-${ISABELLE_APPLE_PLATFORM64:-$ISABELLE_PLATFORM64}}"`
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   109
    -- native Windows platform, native Apple Silicon platform, or default/native Linux platform
73646
078ad17eb934 misc updates and clarification;
wenzelm
parents: 73645
diff changeset
   110
65073
b5bf76cf2b4e more uniform platform settings;
wenzelm
parents: 64406
diff changeset
   111
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   112
### Dependable system tools ###
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   113
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   114
The following portable system tools can be taken for granted:
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   115
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   116
* Scala on top of Java. Isabelle/Scala irons out many fine points of the Java
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   117
  platform to make it fully portable as described above.
64339
321065f9f55b misc tuning and updates;
wenzelm
parents: 64337
diff changeset
   118
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   119
* GNU `bash` as uniform shell on all platforms. The POSIX "standard" shell
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   120
  `/bin/sh` does not work portably -- there are too many non-standard
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   121
  implementations of it. On Debian and Ubuntu `/bin/sh` is actually
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   122
  `/bin/dash` and causes many problems.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   123
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   124
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   125
### Common problems ###
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   126
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   127
* The traditional `uname` Unix tool only tells about its own executable
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   128
  format, not the underlying platform! There are special tricks to get
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   129
  underlying platform details, depending on OS versions: Isabelle/Scala and
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   130
  the Isabelle settings environment provide sanitized versions of that.
81109
wenzelm
parents: 80150
diff changeset
   131
  Isabelle tools should not attempt anything on their own account.
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   132
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   133
* Common Unix tools like `/bin/sh`, `/bin/kill`, `sed`, `ulimit` are
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   134
  notoriously non-portable an should be avoided.
35610
a5b7a0903441 Some notes on platform support of Isabelle.
wenzelm
parents:
diff changeset
   135
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   136
* macOS: If Homebrew or MacPorts is installed, there is some danger that
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   137
  accidental references to its shared libraries are created (e.g. `libgmp`).
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   138
  Use `otool -L` to check if compiled binaries also work without MacPorts.
41668
62ed9f31ea90 more platform hints;
wenzelm
parents: 41458
diff changeset
   139
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   140
* macOS as SSH server: The target user shell needs to be set to `/bin/bash`
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   141
  instead of the default `/bin/zsh`, to make shell script escapes work
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   142
  reliably.
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   143
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   144
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   145
## The Isabelle component repository at TUM and sketis.net ##
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   146
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   147
Isabelle repository versions and administrative tools download components via
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   148
HTTPS from `ISABELLE_COMPONENT_REPOSITORY`, the default is
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   149
`https://isabelle.sketis.net/components`, and alternative is
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   150
`https://isabelle.in.tum.de/components`.
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   151
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   152
Isabelle releases have all required components bundled, but additional
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   153
components may be included via suitable manual configuration.
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   154
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   155
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   156
### Quick reference ###
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   157
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   158
The subsequent steps serve as a reminder of how to maintain components:
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   159
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   160
  * local setup (and test) of component directory, e.g. in
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   161
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   162
      - `screwdriver-3.14/`
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   163
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   164
  * packaging (with associated SHA1 digest), e.g.
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   165
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   166
      - `$ isabelle components_build screwdriver-3.14`
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   167
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   168
  * publishing, e.g.
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   169
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   170
      - `$ isabelle components_build -P screwdriver-3.14.tar.gz`
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   171
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   172
  * manual editing of `Admin/components/main`: `screwdriver-3.14`
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   173
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   174
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   175
### Unique names ###
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   176
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   177
Component names are globally unique over time and space: names of published
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   178
components are never re-used! If some component needs to be re-packaged, extra
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   179
indices may be added to the official version number like this:
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   180
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   181
  * `screwdriver-3.14` -- default packaging/publishing, no index
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   182
  * `screwdriver-3.14-1` -- another refinement of the same
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   183
  * `screwdriver-3.14-2` -- yet another refinement of the same
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   184
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   185
There is no standard format for the structure of component names: they are
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   186
compared for equality only, without any guess at an ordering (notions of
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   187
"older", "newer", "better" etc. are irrelevant).
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   188
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   189
Components are registered in `Admin/components/main` (or similar) for use of
79987
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   190
that particular Isabelle repository version, subject to regular Mercurial
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   191
history. This allows to bisect Isabelle versions with full record of the
3b64d268e5b0 reformat source in jEdit (wrap margin 78);
wenzelm
parents: 79986
diff changeset
   192
required components for testing.
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   193
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   194
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   195
### Authentic archives ###
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   196
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   197
TUM provides the shared administrative directory `/p/home/isabelle/components`
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   198
where the single source of all components is located as authentic `.tar.gz`
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   199
archives. The file `Admin/components/components.sha1` contains SHA1
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   200
identifiers within the Isabelle repository, for integrity checking of the
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   201
archives that are exposed to the public file-system. The command-line tool
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   202
`isabelle components_build` maintains these hash-keys automatically.
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   203
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   204
Components are published on https://isabelle.sketis.net/components and
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   205
https://isabelle.in.tum.de/components --- visibility on the web server depends
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   206
on local Unix file permission: nonfree components should omit "read" mode for
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   207
the Unix group/other; regular components should be world-readable.
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   208
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   209
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   210
### Unpacked copy ###
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   211
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   212
A second unpacked copy is provided in `/p/home/isabelle/contrib/`. This allows
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   213
users and administrative services within the TUM network to activate arbitrary
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   214
snapshots of the repository with all standard components being available,
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   215
without extra copying or unpacking of the authentic archives.
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   216
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   217
The command-line tool `isabelle components_build -P` takes care of uploading
79986
980cefd8ff9b more accurate Markdown formatting, both for VSCode and Phabricator;
wenzelm
parents: 79985
diff changeset
   218
the `.tar.gz` archive and unpacking it, unless it is a special component (e.g.
79985
5c50763f2999 just one README.md;
wenzelm
parents: 79782
diff changeset
   219
for multiplatform application bundling).
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   220
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   221
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   222
### Repeatable component builds ###
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   223
81109
wenzelm
parents: 80150
diff changeset
   224
Historically, Isabelle components have often been assembled by hand, packaged
79988
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   225
as `.tar.gz` and uploaded to the administrative directory. This model no
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   226
longer fits the typical complexity of multi-platform tools.
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   227
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   228
The current quality standard demands a separate tool in Isabelle/Scala, to
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   229
build a component in a repeatable manner: e.g. see `isabelle component_jdk` or
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   230
`isabelle component_e` with sources in `src/Pure/Admin`. Such tools often
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   231
require a Unix platform (Linux or macOS), or the specific platform for which
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   232
the target is built. In the latter case, the component build tool is run
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   233
manually in each operating-system context, using the base-line versions
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   234
specified above (e.g. via Docker); all results are assembled into one big
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   235
`.tar.gz` archive.
36e33d227bf0 misc updates, tuning and clarification;
wenzelm
parents: 79987
diff changeset
   236
80030
5c00c04f09fb misc tuning;
wenzelm
parents: 79990
diff changeset
   237
5c00c04f09fb misc tuning;
wenzelm
parents: 79990
diff changeset
   238
### Dynamic setup of large components ###
5c00c04f09fb misc tuning;
wenzelm
parents: 79990
diff changeset
   239
5c00c04f09fb misc tuning;
wenzelm
parents: 79990
diff changeset
   240
An alternative approach, especially for components that are very large and/or
5c00c04f09fb misc tuning;
wenzelm
parents: 79990
diff changeset
   241
rarely used, is to provide an Isabelle setup tool that interested users may
5c00c04f09fb misc tuning;
wenzelm
parents: 79990
diff changeset
   242
run for themselves. This works particularly well for software products that
80031
ebd988ee1d57 more robust Markdown;
wenzelm
parents: 80030
diff changeset
   243
have their own "store" of downloadable artifacts. For example, see
ebd988ee1d57 more robust Markdown;
wenzelm
parents: 80030
diff changeset
   244
`isabelle dotnet_setup` as defined in `src/Pure/Tools/dotnet_setup.scala`.