dk packages /

CommonsLang_OCaml 0.1.20260803004612

Relocatable OCaml compiler toolchains and developer tools (the OCaml compiler, flexdll, dune, opam, and Diskuv's DkML MSVC track) as dk packages for Windows, Linux, and macOS.

Apache-2.0 AND LGPL-2.1-only WITH OCaml-LGPL-linking-exception AND LGPL-2.0-only WITH OCaml-LGPL-linking-exception AND LGPL-3.0-or-later AND GPL-2.0-only AND Zlib AND MIT AND GPL-3.0-or-later AND BSD-2-Clause AND Info-ZIP Source → Generated

Relocatable OCaml compiler toolchains and developer tools (the OCaml compiler, flexdll, dune, opam, and Diskuv's DkML MSVC track) as dk packages for Windows, Linux, and macOS.

CommonsLang_OCaml builds and redistributes an OCaml developer toolchain (the OCaml compiler, runtime, and standard library at 4.14.3, 5.4.1, and 5.5.0-beta1, the flexdll linker, dune 3.23.1, and opam 2.5.1) across the dk build system's Windows, Linux, and macOS slots. It also ships Diskuv's Apache-2.0 DkML MSVC track and an MSYS2 tree used to build and run the Windows toolchain. Because it is assembled from many upstreams, its redistributed payload carries several licenses in combination.

Usage

DkML

  $ get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Darwin_arm64 -d ${RUNTIME}/Darwin_arm64-DkML-4.14.3
  \test(pass)
  \dk.object(abi: "Release.Darwin_arm64", value-id: "omazl3zdevzgvni5a3audg2gwt3vfs3cckdearnvx4zsi5lac4rya")\;

  $ run-object CommonsBase_FileMagic.File@7.8.50407 -s Release.execution_abi -m ./bin/file.exe -e bin/file.exe --
  >   -b $(get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.target_abi -d : -e file.exe)/bin/ocamlopt
  \test(pass)
  \dk.target(abi: "Darwin_arm64")[Mach-O 64-bit executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|PIE>
  ]\;

  $ run-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Darwin_arm64 -e 'bin/*' -c bin/ocamlopt -- -version
  \test(pass)
  \dk.target(abi: "Darwin_arm64")[4.14.3+relocatable
  ]\;

  $ get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Darwin_x86_64 -d ${RUNTIME}/Darwin_x86_64-DkML-4.14.3
  \test(pass)
  \dk.object(abi: "Release.Darwin_x86_64", value-id: "oaftselzqfnqpsym3e4bxyxszyo4worywq5sbp6dr6dmfdchdx6sq")\;

  $ run-object CommonsBase_FileMagic.File@7.8.50407 -s Release.execution_abi -m ./bin/file.exe -e bin/file.exe --
  >   -b $(get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.target_abi -d : -e file.exe)/bin/ocamlopt
  \test(pass)
  \dk.target(abi: "Darwin_x86_64")[Mach-O 64-bit executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|PIE>
  ]\;

  $ get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Linux_arm64 -d ${RUNTIME}/Linux_arm64-DkML-4.14.3
  \test(pass)

  $ run-object CommonsBase_FileMagic.File@7.8.50407 -s Release.execution_abi -m ./bin/file.exe -e bin/file.exe --
  >   -b $(get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.target_abi -d : -e file.exe)/bin/ocamlopt
  \test(pass)
  \dk.target(abi: "Linux_arm64")[ELF 64-bit LSB executable, ARM aarch64
  ]\;

  $ run-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Linux_arm64 -e 'bin/*' -c bin/ocamlopt -- -version
  \test(pass)

  $ get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Linux_x86 -d ${RUNTIME}/Linux_x86-DkML-4.14.3
  \test(pass)
  \dk.object(abi: "Release.Linux_x86", value-id: "ohpjasgizzqwot4a7mstj6tweggsxa3dolyoby7owwvitgzwwgvlq")\;

  $ run-object CommonsBase_FileMagic.File@7.8.50407 -s Release.execution_abi -m ./bin/file.exe -e bin/file.exe --
  >   -b $(get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.target_abi -d : -e file.exe)/bin/ocamlopt
  \test(pass)
  \dk.target(abi: "Linux_x86")[ELF 32-bit LSB executable, Intel i386, version 1 (SYSV)
  ]\;

  $ get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Linux_x86_64 -d ${RUNTIME}/Linux_x86_64-DkML-4.14.3
  \test(pass)
  \dk.object(abi: "Release.Linux_x86_64", value-id: "o5mirv4qjdaoy3bfdgtz7uk5gw7lyqbuxow4rtn3qouuckfnygqha")\;

  $ run-object CommonsBase_FileMagic.File@7.8.50407 -s Release.execution_abi -m ./bin/file.exe -e bin/file.exe --
  >   -b $(get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.target_abi -d : -e file.exe)/bin/ocamlopt
  \test(pass)
  \dk.target(abi: "Linux_x86_64")[ELF 64-bit LSB executable, x86-64, version 1 (SYSV)
  ]\;

  $ run-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Linux_x86_64 -e 'bin/*' -c bin/ocamlopt -- -version
  \test(pass)
  \dk.target(abi: "Linux_x86_64")[4.14.3+relocatable
  ]\;

The native_pack_linker must be a relocatable, PATH-resolved partial linker (a
bare `ld -r -o`), never an absolute build-host path such as the ephemeral
`.../src-ocaml/support/with-host-c-compiler.sh.ld64.sh` a stock build bakes;
otherwise `ocamlopt -pack` fails off the build machine.

  $ run-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Linux_x86_64 -e 'bin/*' -c bin/ocamlopt -- -config-var native_pack_linker
  \test(pass)
  \dk.target(abi: "Linux_x86_64")[ld -r -o ]\;

  $ get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Linux_x86_64_musl -d ${RUNTIME}/Linux_x86_64_musl-DkML-4.14.3
  \test(pass)
  \dk.object(abi: "Release.Linux_x86_64_musl", value-id: "ounhvq6pmc7fsih6j5iirtkgraf56gkk343xdvgvr3zsbemtrobma")\;

The musl ocamlopt is a musl binary (ELF interpreter /lib/ld-musl-x86_64.so.1),
so it runs wherever the musl loader is present: natively on musl hosts, and on
the glibc manylinux build host because the build provisions the loader at that
path (see the per-ABI dynamic linker in DK0-REFERENCE.md). The file(1) string
below is harvested from the first CI run.

  $ run-object CommonsBase_FileMagic.File@7.8.50407 -s Release.execution_abi -m ./bin/file.exe -e bin/file.exe --
  >   -b $(get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.target_abi -d : -e file.exe)/bin/ocamlopt
  \test(pass)
  \dk.target(abi: "Linux_x86_64_musl")[ELF 64-bit LSB ${x?pie executable:shared object}, x86-64, version 1 (SYSV)
  ]\;

  $ run-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Linux_x86_64_musl -e 'bin/*' -c bin/ocamlopt -- -version
  \test(pass)
  \dk.target(abi: "Linux_x86_64_musl")[4.14.3+relocatable
  ]\;

The native_pack_linker must be a relocatable, PATH-resolved partial linker (a
bare `x86_64-linux-musl-ld -r -o`, resolved through the slot's
bin/x86_64-linux-musl-* dispatch wrappers), never an absolute build-host path
such as the ephemeral `.../src-ocaml/support/with-host-c-compiler.sh.ld64.sh` a
stock build bakes; otherwise `ocamlopt -pack` fails off the build machine. The
musl partial linker is required because the host `ld` cannot read the musl
toolchain's compressed debug sections.

  $ run-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Linux_x86_64_musl -e 'bin/*' -c bin/ocamlopt -- -config-var native_pack_linker
  \test(pass)
  \dk.target(abi: "Linux_x86_64_musl")[x86_64-linux-musl-ld -r -o ]\;

The baked C compiler must be the bare musl cross driver, resolved through the
bin/x86_64-linux-musl-* dispatch wrappers shipped in the same slot, so
consumer machines link static musl executables wherever the slot's bin/ is on
PATH.

  $ run-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Linux_x86_64_musl -e 'bin/*' -c bin/ocamlopt -- -config-var c_compiler
  \test(pass)
  \dk.target(abi: "Linux_x86_64_musl")[x86_64-linux-musl-gcc]\;

  $ get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Windows_x86 -d ${RUNTIME}/Windows_x86-DkML-4.14.3
  \test(pass)
  \dk.object(abi: "Release.Windows_x86", value-id: "o56wqacou2uoowgr7jfhskdjodil2ubc4wrk2i54k43okaeeca6ka")\;

Release.Windows_x86_64 will be used as Release.execution_abi on normal (64-bit) build + CI machines.

  $ run-object CommonsBase_FileMagic.File@7.8.50407 -s Release.execution_abi -m ./bin/file.exe -e bin/file.exe --
  >   -b $(get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.target_abi -d : -e file.exe)/bin/ocamlopt.exe
  \test(pass)
  \dk.target(abi: "Windows_x86")[PE32 executable for MS Windows 6.00 (console),, 5 sections
  ]\;

  $ run-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Windows_x86 -c bin/ocamlopt.exe -- -version
  \test(pass)
  \dk.target(abi: "Windows_x86")[4.14.3+relocatable
  ]\;

  $ get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Windows_x86_64 -d ${RUNTIME}/Windows_x86_64-DkML-4.14.3
  \test(pass)
  \dk.object(abi: "Release.Windows_x86_64", value-id: "owlmowkfztyo22bqesxelr2gri5l4wiunqjnulgb7x2gpxmaugouq")\;

  $ run-object CommonsBase_FileMagic.File@7.8.50407 -s Release.execution_abi -m ./bin/file.exe -e bin/file.exe --
  >   -b $(get-object CommonsLang_OCaml.DkML@4.14.3 -s Release.target_abi -d : -e file.exe)/bin/ocamlopt.exe
  \test(pass)
  \dk.target(abi: "Windows_x86_64")[PE32+ executable for MS Windows 6.00 (console),, 6 sections
  ]\;

  $ run-object CommonsLang_OCaml.DkML@4.14.3 -s Release.Windows_x86_64 -c bin/ocamlopt.exe -- -version
  \test(pass)
  \dk.target(abi: "Windows_x86_64")[4.14.3+relocatable
  ]\;

Base

  $ run-object CommonsLang_OCaml.Base@5.5.0 -s Release.Darwin_arm64 -e 'bin/*' -c bin/ocamlopt -- -version
  \test(pass)
  \dk.target(abi: "Darwin_arm64")[5.5.0
  ]\;

  $ run-object CommonsLang_OCaml.Base@5.5.0 -s Release.Darwin_x86_64 -e 'bin/*' -c bin/ocamlopt -- -version
  \test(pass)
  \dk.target(abi: "Darwin_x86_64")[5.5.0
  ]\;

  $ run-object CommonsLang_OCaml.Base@5.5.0 -s Release.Linux_x86_64 -e 'bin/*' -c bin/ocamlopt -- -version
  \test(pass)
  \dk.target(abi: "Linux_x86_64")[5.5.0
  ]\;

  $ run-object CommonsLang_OCaml.Base@5.5.0 -s Release.Windows_x86_64 -e 'bin/*' -c bin/ocamlopt.exe -- -version
  \test(pass)
  \dk.target(abi: "Windows_x86_64")[5.5.0
  ]\;

Dune

  $ run-object CommonsLang_OCaml.Dune@3.23.1 -s Release.Darwin_arm64 -e 'bin/*' -c bin/dune.exe -- --version
  \test(pass)
  \dk.target(abi: "Darwin_arm64")[3.23.1
  ]\;

  $ run-object CommonsLang_OCaml.Dune@3.23.1 -s Release.Darwin_x86_64 -e 'bin/*' -c bin/dune.exe -- --version
  \test(pass)
  \dk.target(abi: "Darwin_x86_64")[3.23.1
  ]\;

  $ run-object CommonsLang_OCaml.Dune@3.23.1 -s Release.Linux_arm64 -e 'bin/*' -c bin/dune.exe -- --version
  \test(pass)
  \dk.target(abi: "Linux_arm64")[3.23.1
  ]\;

  $ run-object CommonsLang_OCaml.Dune@3.23.1 -s Release.Linux_x86 -e 'bin/*' -c bin/dune.exe -- --version
  \test(pass)
  \dk.target(abi: "Linux_x86")[3.23.1
  ]\;

  $ run-object CommonsLang_OCaml.Dune@3.23.1 -s Release.Linux_x86_64 -e 'bin/*' -c bin/dune.exe -- --version
  \test(pass)
  \dk.target(abi: "Linux_x86_64")[3.23.1
  ]\;

  $ run-object CommonsLang_OCaml.Dune@3.23.1 -s Release.Linux_x86_64_musl -e 'bin/*' -c bin/dune.exe -- --version
  \test(pass)
  \dk.target(abi: "Linux_x86_64_musl")[3.23.1
  ]\;

  $ run-object CommonsLang_OCaml.Dune@3.23.1 -s Release.Windows_x86 -e 'bin/*' -c bin/dune.exe -- --version
  \test(pass)
  \dk.target(abi: "Windows_x86")[3.23.1
  ]\;

  $ run-object CommonsLang_OCaml.Dune@3.23.1 -s Release.Windows_x86_64 -e 'bin/*' -c bin/dune.exe -- --version
  \test(pass)
  \dk.target(abi: "Windows_x86_64")[3.23.1
  ]\;

Opam

  $ run-object CommonsLang_OCaml.Opam@2.5.1 -s Release.Darwin_arm64 -e 'bin/*' -c bin/opam.exe -- --version
  \test(pass)
  \dk.target(abi: "Darwin_arm64")[2.5.1
  ]\;

  $ run-object CommonsLang_OCaml.Opam@2.5.1 -s Release.Darwin_x86_64 -e 'bin/*' -c bin/opam.exe -- --version
  \test(pass)
  \dk.target(abi: "Darwin_x86_64")[2.5.1
  ]\;

  $ run-object CommonsLang_OCaml.Opam@2.5.1 -s Release.Linux_arm64 -e 'bin/*' -c bin/opam.exe -- --version
  \test(pass)
  \dk.target(abi: "Linux_arm64")[2.5.1
  ]\;

  $ run-object CommonsLang_OCaml.Opam@2.5.1 -s Release.Linux_x86 -e 'bin/*' -c bin/opam.exe -- --version
  \test(pass)
  \dk.target(abi: "Linux_x86")[2.5.1
  ]\;

  $ run-object CommonsLang_OCaml.Opam@2.5.1 -s Release.Linux_x86_64 -e 'bin/*' -c bin/opam.exe -- --version
  \test(pass)
  \dk.target(abi: "Linux_x86_64")[2.5.1
  ]\;

  $ run-object CommonsLang_OCaml.Opam@2.5.1 -s Release.Windows_x86 -e 'bin/*' -c bin/opam.exe -- --version
  \test(pass)
  \dk.target(abi: "Windows_x86")[2.5.1
  ]\;

  $ run-object CommonsLang_OCaml.Opam@2.5.1 -s Release.Windows_x86_64 -e 'bin/*' -c bin/opam.exe -- --version
  \test(pass)
  \dk.target(abi: "Windows_x86_64")[2.5.1
  ]\;

Dk.OpamLock

Run one rule of the CommonsLang_OCaml.Dk.OpamLock scriptmodule so its
author-time OpamLock uirule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

How the lock is produced: the OpamLock.Solve uirule launches `opam` to SOLVE
the dependency closure -- it runs `opam list --resolve` to compute the closure
and `opam show` to read each package's version/source/deps/build commands, and
never `opam install`s. opam has no switch-less solve (the solver needs a
switch's repositories, pins, and os/arch variables), so Solve creates an EMPTY
opam switch purely as a throwaway resolution context: it adds the pinned
repositories, applies the version pins from dk-opam-pins.txt, path-pins the
local packages, then resolves. By default that switch is an ephemeral LOCAL
switch in the rule's sandbox -- unique per run (no cross-project or cross-run
pin contamination, so the lock is reproducible) and removed once the solve
finishes; nothing is ever installed into it.

### Resolving ocaml 5.1.1 as the solve compiler

ocaml is left unpinned so the solve resolves it from the pinned repository
commit to 5.1.1, one of the first releases with the corrected ocaml-env,
host-arch and conf-mingw-w64 selectors (pinning ocaml in the shared pin table
would break the CI build's DkML toolchain). The pinned commit makes that
resolution deterministic, and the version is a solve artifact only: the DkML
4.14.3 toolchain ocaml replaces it at build time.

+ ocaml 5.1.1 carries the corrected ocaml-env, host-arch and conf-mingw-w64
  selectors, so the solved closure resolves the right platform packages for
  every slot.
+ The resolved ocaml version drives per-slot mingw selection: 5.1.1 resolves
  the Windows_x86 slot to the 32-bit ocaml-env-mingw32 toolchain, where 4.14.2
  resolves the wrong 64-bit one.
+ The DkML 4.14.3 toolchain ocaml replaces this solve compiler at build time,
  so the lock's ocaml and ocaml-base-compiler entries are solve artifacts, not
  build inputs.

  $ run-function CommonsLang_OCaml.Dk.OpamLock.Export@1.0.0 -f ${RUNTIME}/OpamLock.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Darwin_arm64", value-id: "ow6itgcoxmhhcyhnh76cz576ptu3t6xpuyghxqtyki7ixhykaltka")\;


Run one rule of the CommonsLang_OCaml.Dk.OpamLock scriptmodule so its
author-time OpamLock uirule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

How the lock is produced: the OpamLock.Solve uirule launches `opam` to SOLVE
the dependency closure -- it runs `opam list --resolve` to compute the closure
and `opam show` to read each package's version/source/deps/build commands, and
never `opam install`s. opam has no switch-less solve (the solver needs a
switch's repositories, pins, and os/arch variables), so Solve creates an EMPTY
opam switch purely as a throwaway resolution context: it adds the pinned
repositories, applies the version pins from dk-opam-pins.txt, path-pins the
local packages, then resolves. By default that switch is an ephemeral LOCAL
switch in the rule's sandbox -- unique per run (no cross-project or cross-run
pin contamination, so the lock is reproducible) and removed once the solve
finishes; nothing is ever installed into it.

### Resolving ocaml 5.1.1 as the solve compiler

ocaml is left unpinned so the solve resolves it from the pinned repository
commit to 5.1.1, one of the first releases with the corrected ocaml-env,
host-arch and conf-mingw-w64 selectors (pinning ocaml in the shared pin table
would break the CI build's DkML toolchain). The pinned commit makes that
resolution deterministic, and the version is a solve artifact only: the DkML
4.14.3 toolchain ocaml replaces it at build time.

+ ocaml 5.1.1 carries the corrected ocaml-env, host-arch and conf-mingw-w64
  selectors, so the solved closure resolves the right platform packages for
  every slot.
+ The resolved ocaml version drives per-slot mingw selection: 5.1.1 resolves
  the Windows_x86 slot to the 32-bit ocaml-env-mingw32 toolchain, where 4.14.2
  resolves the wrong 64-bit one.
+ The DkML 4.14.3 toolchain ocaml replaces this solve compiler at build time,
  so the lock's ocaml and ocaml-base-compiler entries are solve artifacts, not
  build inputs.

  $ run-function CommonsLang_OCaml.Dk.OpamLock.Export@1.0.0 -f ${RUNTIME}/OpamLock.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Darwin_arm64", value-id: "ow6itgcoxmhhcyhnh76cz576ptu3t6xpuyghxqtyki7ixhykaltka")\;


Run one rule of the CommonsLang_OCaml.Dk.OpamLock scriptmodule so its
author-time OpamLock uirule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

How the lock is produced: the OpamLock.Solve uirule launches `opam` to SOLVE
the dependency closure -- it runs `opam list --resolve` to compute the closure
and `opam show` to read each package's version/source/deps/build commands, and
never `opam install`s. opam has no switch-less solve (the solver needs a
switch's repositories, pins, and os/arch variables), so Solve creates an EMPTY
opam switch purely as a throwaway resolution context: it adds the pinned
repositories, applies the version pins from dk-opam-pins.txt, path-pins the
local packages, then resolves. By default that switch is an ephemeral LOCAL
switch in the rule's sandbox -- unique per run (no cross-project or cross-run
pin contamination, so the lock is reproducible) and removed once the solve
finishes; nothing is ever installed into it.

### Resolving ocaml 5.1.1 as the solve compiler

ocaml is left unpinned so the solve resolves it from the pinned repository
commit to 5.1.1, one of the first releases with the corrected ocaml-env,
host-arch and conf-mingw-w64 selectors (pinning ocaml in the shared pin table
would break the CI build's DkML toolchain). The pinned commit makes that
resolution deterministic, and the version is a solve artifact only: the DkML
4.14.3 toolchain ocaml replaces it at build time.

+ ocaml 5.1.1 carries the corrected ocaml-env, host-arch and conf-mingw-w64
  selectors, so the solved closure resolves the right platform packages for
  every slot.
+ The resolved ocaml version drives per-slot mingw selection: 5.1.1 resolves
  the Windows_x86 slot to the 32-bit ocaml-env-mingw32 toolchain, where 4.14.2
  resolves the wrong 64-bit one.
+ The DkML 4.14.3 toolchain ocaml replaces this solve compiler at build time,
  so the lock's ocaml and ocaml-base-compiler entries are solve artifacts, not
  build inputs.

  $ run-function CommonsLang_OCaml.Dk.OpamLock.Export@1.0.0 -f ${RUNTIME}/OpamLock.Export.zip
  \test(pass)

Run one rule of the CommonsLang_OCaml.Dk.OpamLock scriptmodule so its
author-time OpamLock uirule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

How the lock is produced: the OpamLock.Solve uirule launches `opam` to SOLVE
the dependency closure -- it runs `opam list --resolve` to compute the closure
and `opam show` to read each package's version/source/deps/build commands, and
never `opam install`s. opam has no switch-less solve (the solver needs a
switch's repositories, pins, and os/arch variables), so Solve creates an EMPTY
opam switch purely as a throwaway resolution context: it adds the pinned
repositories, applies the version pins from dk-opam-pins.txt, path-pins the
local packages, then resolves. By default that switch is an ephemeral LOCAL
switch in the rule's sandbox -- unique per run (no cross-project or cross-run
pin contamination, so the lock is reproducible) and removed once the solve
finishes; nothing is ever installed into it.

### Resolving ocaml 5.1.1 as the solve compiler

ocaml is left unpinned so the solve resolves it from the pinned repository
commit to 5.1.1, one of the first releases with the corrected ocaml-env,
host-arch and conf-mingw-w64 selectors (pinning ocaml in the shared pin table
would break the CI build's DkML toolchain). The pinned commit makes that
resolution deterministic, and the version is a solve artifact only: the DkML
4.14.3 toolchain ocaml replaces it at build time.

+ ocaml 5.1.1 carries the corrected ocaml-env, host-arch and conf-mingw-w64
  selectors, so the solved closure resolves the right platform packages for
  every slot.
+ The resolved ocaml version drives per-slot mingw selection: 5.1.1 resolves
  the Windows_x86 slot to the 32-bit ocaml-env-mingw32 toolchain, where 4.14.2
  resolves the wrong 64-bit one.
+ The DkML 4.14.3 toolchain ocaml replaces this solve compiler at build time,
  so the lock's ocaml and ocaml-base-compiler entries are solve artifacts, not
  build inputs.

  $ run-function CommonsLang_OCaml.Dk.OpamLock.Export@1.0.0 -f ${RUNTIME}/OpamLock.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Linux_x86_64", value-id: "o7mmvaocrhvy765tkdtsbp76eyj2423m3espmw34kthkdoqvl3cdq")\;


Run one rule of the CommonsLang_OCaml.Dk.OpamLock scriptmodule so its
author-time OpamLock uirule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

How the lock is produced: the OpamLock.Solve uirule launches `opam` to SOLVE
the dependency closure -- it runs `opam list --resolve` to compute the closure
and `opam show` to read each package's version/source/deps/build commands, and
never `opam install`s. opam has no switch-less solve (the solver needs a
switch's repositories, pins, and os/arch variables), so Solve creates an EMPTY
opam switch purely as a throwaway resolution context: it adds the pinned
repositories, applies the version pins from dk-opam-pins.txt, path-pins the
local packages, then resolves. By default that switch is an ephemeral LOCAL
switch in the rule's sandbox -- unique per run (no cross-project or cross-run
pin contamination, so the lock is reproducible) and removed once the solve
finishes; nothing is ever installed into it.

### Resolving ocaml 5.1.1 as the solve compiler

ocaml is left unpinned so the solve resolves it from the pinned repository
commit to 5.1.1, one of the first releases with the corrected ocaml-env,
host-arch and conf-mingw-w64 selectors (pinning ocaml in the shared pin table
would break the CI build's DkML toolchain). The pinned commit makes that
resolution deterministic, and the version is a solve artifact only: the DkML
4.14.3 toolchain ocaml replaces it at build time.

+ ocaml 5.1.1 carries the corrected ocaml-env, host-arch and conf-mingw-w64
  selectors, so the solved closure resolves the right platform packages for
  every slot.
+ The resolved ocaml version drives per-slot mingw selection: 5.1.1 resolves
  the Windows_x86 slot to the 32-bit ocaml-env-mingw32 toolchain, where 4.14.2
  resolves the wrong 64-bit one.
+ The DkML 4.14.3 toolchain ocaml replaces this solve compiler at build time,
  so the lock's ocaml and ocaml-base-compiler entries are solve artifacts, not
  build inputs.

  $ run-function CommonsLang_OCaml.Dk.OpamLock.Export@1.0.0 -f ${RUNTIME}/OpamLock.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Linux_x86_64", value-id: "o7mmvaocrhvy765tkdtsbp76eyj2423m3espmw34kthkdoqvl3cdq")\;


Run one rule of the CommonsLang_OCaml.Dk.OpamLock scriptmodule so its
author-time OpamLock uirule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

  $ run-function CommonsLang_OCaml.Dk.OpamLock.Export@1.0.0 -f ${RUNTIME}/OpamLock.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Linux_x86_64", value-id: "o7mmvaocrhvy765tkdtsbp76eyj2423m3espmw34kthkdoqvl3cdq")
  \dk.object(abi: "Release.Linux_x86_64_musl", value-id: "odx35phn7zbcsqd3u6oimt5ga4chrzhaimrl73snmj2dk6yxztvpq")\;

Run one rule of the CommonsLang_OCaml.Dk.OpamLock scriptmodule so its
author-time OpamLock uirule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

How the lock is produced: the OpamLock.Solve uirule launches `opam` to SOLVE
the dependency closure -- it runs `opam list --resolve` to compute the closure
and `opam show` to read each package's version/source/deps/build commands, and
never `opam install`s. opam has no switch-less solve (the solver needs a
switch's repositories, pins, and os/arch variables), so Solve creates an EMPTY
opam switch purely as a throwaway resolution context: it adds the pinned
repositories, applies the version pins from dk-opam-pins.txt, path-pins the
local packages, then resolves. By default that switch is an ephemeral LOCAL
switch in the rule's sandbox -- unique per run (no cross-project or cross-run
pin contamination, so the lock is reproducible) and removed once the solve
finishes; nothing is ever installed into it.

### Resolving ocaml 5.1.1 as the solve compiler

ocaml is left unpinned so the solve resolves it from the pinned repository
commit to 5.1.1, one of the first releases with the corrected ocaml-env,
host-arch and conf-mingw-w64 selectors (pinning ocaml in the shared pin table
would break the CI build's DkML toolchain). The pinned commit makes that
resolution deterministic, and the version is a solve artifact only: the DkML
4.14.3 toolchain ocaml replaces it at build time.

+ ocaml 5.1.1 carries the corrected ocaml-env, host-arch and conf-mingw-w64
  selectors, so the solved closure resolves the right platform packages for
  every slot.
+ The resolved ocaml version drives per-slot mingw selection: 5.1.1 resolves
  the Windows_x86 slot to the 32-bit ocaml-env-mingw32 toolchain, where 4.14.2
  resolves the wrong 64-bit one.
+ The DkML 4.14.3 toolchain ocaml replaces this solve compiler at build time,
  so the lock's ocaml and ocaml-base-compiler entries are solve artifacts, not
  build inputs.

  $ run-function CommonsLang_OCaml.Dk.OpamLock.Export@1.0.0 -f ${RUNTIME}/OpamLock.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Windows_x86_64", value-id: "o4z5z3zdrecgprn5m46h7hczhygs6tra4jc4tjxwtfdqxagnsik2a")\;


Run one rule of the CommonsLang_OCaml.Dk.OpamLock scriptmodule so its
author-time OpamLock uirule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

How the lock is produced: the OpamLock.Solve uirule launches `opam` to SOLVE
the dependency closure -- it runs `opam list --resolve` to compute the closure
and `opam show` to read each package's version/source/deps/build commands, and
never `opam install`s. opam has no switch-less solve (the solver needs a
switch's repositories, pins, and os/arch variables), so Solve creates an EMPTY
opam switch purely as a throwaway resolution context: it adds the pinned
repositories, applies the version pins from dk-opam-pins.txt, path-pins the
local packages, then resolves. By default that switch is an ephemeral LOCAL
switch in the rule's sandbox -- unique per run (no cross-project or cross-run
pin contamination, so the lock is reproducible) and removed once the solve
finishes; nothing is ever installed into it.

### Resolving ocaml 5.1.1 as the solve compiler

ocaml is left unpinned so the solve resolves it from the pinned repository
commit to 5.1.1, one of the first releases with the corrected ocaml-env,
host-arch and conf-mingw-w64 selectors (pinning ocaml in the shared pin table
would break the CI build's DkML toolchain). The pinned commit makes that
resolution deterministic, and the version is a solve artifact only: the DkML
4.14.3 toolchain ocaml replaces it at build time.

+ ocaml 5.1.1 carries the corrected ocaml-env, host-arch and conf-mingw-w64
  selectors, so the solved closure resolves the right platform packages for
  every slot.
+ The resolved ocaml version drives per-slot mingw selection: 5.1.1 resolves
  the Windows_x86 slot to the 32-bit ocaml-env-mingw32 toolchain, where 4.14.2
  resolves the wrong 64-bit one.
+ The DkML 4.14.3 toolchain ocaml replaces this solve compiler at build time,
  so the lock's ocaml and ocaml-base-compiler entries are solve artifacts, not
  build inputs.

  $ run-function CommonsLang_OCaml.Dk.OpamLock.Export@1.0.0 -f ${RUNTIME}/OpamLock.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Windows_x86_64", value-id: "o4z5z3zdrecgprn5m46h7hczhygs6tra4jc4tjxwtfdqxagnsik2a")\;


Dk.OpamBuild

Run one rule of the CommonsLang_OCaml.Dk.OpamBuild scriptmodule so its
per-package build rule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

  $ run-function CommonsLang_OCaml.Dk.OpamBuild.Export@1.0.0 -f ${RUNTIME}/OpamBuild.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Darwin_arm64", value-id: "ot36qu3466etoe2n4fwegx5oven5jtringcjn4njmy7n4ayspxb6q")\;
Run one rule of the CommonsLang_OCaml.Dk.OpamBuild scriptmodule so its
per-package build rule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

  $ run-function CommonsLang_OCaml.Dk.OpamBuild.Export@1.0.0 -f ${RUNTIME}/OpamBuild.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Darwin_arm64", value-id: "ot36qu3466etoe2n4fwegx5oven5jtringcjn4njmy7n4ayspxb6q")
  \dk.object(abi: "Release.Darwin_x86_64", value-id: "ow53l5vi6n5qcxrcherm65hd2t3u245u6uthawrgryjjeospk5kjq")\;
Run one rule of the CommonsLang_OCaml.Dk.OpamBuild scriptmodule so its
per-package build rule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

  $ run-function CommonsLang_OCaml.Dk.OpamBuild.Export@1.0.0 -f ${RUNTIME}/OpamBuild.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Linux_arm64", value-id: "ow53l5vi6n5qcxrcherm65hd2t3u245u6uthawrgryjjeospk5kjq")\;
Run one rule of the CommonsLang_OCaml.Dk.OpamBuild scriptmodule so its
per-package build rule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

  $ run-function CommonsLang_OCaml.Dk.OpamBuild.Export@1.0.0 -f ${RUNTIME}/OpamBuild.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Linux_x86", value-id: "ow53l5vi6n5qcxrcherm65hd2t3u245u6uthawrgryjjeospk5kjq")
  \dk.object(abi: "Release.Linux_x86_64", value-id: "ox2yguwbuo7ev3o5ovs5vcjgsljpqjev73hi6ze6isy6mmksrfasq")\;
Run one rule of the CommonsLang_OCaml.Dk.OpamBuild scriptmodule so its
per-package build rule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

  $ run-function CommonsLang_OCaml.Dk.OpamBuild.Export@1.0.0 -f ${RUNTIME}/OpamBuild.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Linux_x86_64", value-id: "ox2yguwbuo7ev3o5ovs5vcjgsljpqjev73hi6ze6isy6mmksrfasq")\;
Run one rule of the CommonsLang_OCaml.Dk.OpamBuild scriptmodule so its
per-package build rule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

  $ run-function CommonsLang_OCaml.Dk.OpamBuild.Export@1.0.0 -f ${RUNTIME}/OpamBuild.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Linux_x86_64", value-id: "ox2yguwbuo7ev3o5ovs5vcjgsljpqjev73hi6ze6isy6mmksrfasq")
  \dk.object(abi: "Release.Linux_x86_64_musl", value-id: "ofwoywfonzbccnnyo6uhzrxd5allydjh4mgiqjlzo37364avaonga")\;
Run one rule of the CommonsLang_OCaml.Dk.OpamBuild scriptmodule so its
per-package build rule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

  $ run-function CommonsLang_OCaml.Dk.OpamBuild.Export@1.0.0 -f ${RUNTIME}/OpamBuild.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Windows_x86", value-id: "ow53l5vi6n5qcxrcherm65hd2t3u245u6uthawrgryjjeospk5kjq")
  \dk.object(abi: "Release.Windows_x86_64", value-id: "orlivsdhgqn6hmk3yq3gm35adggjgmx3bccn6nyluhahl4wl27cvq")\;
Run one rule of the CommonsLang_OCaml.Dk.OpamBuild scriptmodule so its
per-package build rule ships in this distribution. Running any rule of a
scriptmodule brings in the whole scriptmodule; the marker output is otherwise
unused. The value-id is harvested from the first CI run (the DkML pattern).

  $ run-function CommonsLang_OCaml.Dk.OpamBuild.Export@1.0.0 -f ${RUNTIME}/OpamBuild.Export.zip
  \test(pass)
  \dk.object(abi: "Release.Windows_x86_64", value-id: "orlivsdhgqn6hmk3yq3gm35adggjgmx3bccn6nyluhahl4wl27cvq")\;

MSYS2

MSYS2 tree for `opam init --cygwin-local-install --cygwin-location=<obj>` in
the Dk.OpamLock hermetic bootstrap (opam detects MSYS2 via
usr/bin/cygpath.exe). Windows x86_64 only: x86/arm64 Windows hosts run the
x64 tree through WOW64/emulation.

  $ get-object CommonsLang_OCaml.MSYS2@2026.6.11 -s Release.Windows_x86_64 -f ${RUNTIME}/Windows_x86_64-MSYS2-2026.6.11.zip
  \test(pass)
  \dk.object(abi: "Release.Windows_x86_64", value-id: "ozjqpoyewgl2wsnrk5uekbleo3644auhcyri2gexstfr3k5slof5q")\;

Provides

ModuleVersionPlatformvalue-id
CommonsLang_OCaml.DkML 4.14.3 Darwin_arm64 omazl3zdevzg…
CommonsLang_OCaml.DkML 4.14.3 Darwin_x86_64 oaftselzqfnq…
CommonsLang_OCaml.DkML 4.14.3 Linux_x86 ohpjasgizzqw…
CommonsLang_OCaml.DkML 4.14.3 Linux_x86_64 o5mirv4qjdao…
CommonsLang_OCaml.DkML 4.14.3 Linux_x86_64_musl ounhvq6pmc7f…
CommonsLang_OCaml.DkML 4.14.3 Windows_x86 o56wqacou2uo…
CommonsLang_OCaml.DkML 4.14.3 Windows_x86_64 owlmowkfztyo…
CommonsLang_OCaml.Base 5.5.0 apparatus
CommonsLang_OCaml.Dune 3.23.1 apparatus
CommonsLang_OCaml.Opam 2.5.1 apparatus
CommonsLang_OCaml.Dk.OpamLock.Export 1.0.0 Darwin_arm64 ow6itgcoxmhh…
CommonsLang_OCaml.Dk.OpamLock.Export 1.0.0 Darwin_arm64 ow6itgcoxmhh…
CommonsLang_OCaml.Dk.OpamLock.Export 1.0.0 Linux_x86_64 o7mmvaocrhvy…
CommonsLang_OCaml.Dk.OpamLock.Export 1.0.0 Linux_x86_64 o7mmvaocrhvy…
CommonsLang_OCaml.Dk.OpamLock.Export 1.0.0 Linux_x86_64 o7mmvaocrhvy…
CommonsLang_OCaml.Dk.OpamLock.Export 1.0.0 Linux_x86_64_musl odx35phn7zbc…
CommonsLang_OCaml.Dk.OpamLock.Export 1.0.0 Windows_x86_64 o4z5z3zdrecg…
CommonsLang_OCaml.Dk.OpamLock.Export 1.0.0 Windows_x86_64 o4z5z3zdrecg…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Darwin_arm64 ot36qu3466et…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Darwin_arm64 ot36qu3466et…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Darwin_x86_64 ow53l5vi6n5q…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Linux_arm64 ow53l5vi6n5q…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Linux_x86 ow53l5vi6n5q…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Linux_x86_64 ox2yguwbuo7e…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Linux_x86_64 ox2yguwbuo7e…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Linux_x86_64 ox2yguwbuo7e…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Linux_x86_64_musl ofwoywfonzbc…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Windows_x86 ow53l5vi6n5q…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Windows_x86_64 orlivsdhgqn6…
CommonsLang_OCaml.Dk.OpamBuild.Export 1.0.0 Windows_x86_64 orlivsdhgqn6…
CommonsLang_OCaml.MSYS2 2026.6.11 Windows_x86_64 ozjqpoyewgl2…

Workspace assets

Files and directories in the package repo, bundled into the build.

AssetProject pathType
Patches assets/p directory
Scripts assets/s directory
Tables assets/table directory
WineHostShim assets/wine-hostshim directory
DkMLRoot assets/dkml/dkmlroot.2.4.2-29.txt file
DkMLPatchRelocatableVersion assets/dkml/patch-r-c-ocaml-1-setup-relocatable-version.sh file
DkMLRunBuildHost assets/dkml/run-build-host.sh file
DkMLDetectVsEnvBat assets/dkml/detect-vsenv.bat file
DkMLCleanupSlot assets/dkml/cleanup-dkml-slot.sh file
DkMLPatchStandardCompilerEnvWv18 assets/dkml/patch-standard-compiler-env-wv18.sh file
DkMLMuslEnv assets/dkml/musl-compiler-env-to-ocaml-configure-env.sh file
DkMLMuslWrap assets/dkml/musl-tool-wrapper.sh file
DkMLMuslBuildHost assets/dkml/run-musl-build-host.sh file
DuneBootstrapMsvc assets/dune/bootstrap-msvc.bat file
OpamBuildWin assets/opam/opam-build-win.sh file
OpamBuildWinVcvars assets/opam/opam-build-win-vcvars.bat file
OpamMsvsDetectStub assets/opam/msvs-detect-stub.sh file
OpamMccsGlpkStub assets/opam/mccs-glpk-wrmip-stub.c file
OpamBuildWrapper assets/opam/build-locked-package.sh file
OpamBuildCygpath assets/opam/cygpath file
OpamBuildSeqMeta assets/opam/seq-META file

Downloaded assets

Third-party sources fetched and checksum-verified during the build.

AssetSizesha256Source
4.14.3.tar.gz 5.3 MB e510689183b2d62b… https://github.com/ocaml/ocaml/archive/refs/tags/4.14.3.tar.gz
5.5.0.tar.gz 4.8 MB c018052c8264a379… https://github.com/ocaml/ocaml/archive/5.5.0.tar.gz
ocaml-5.4.1.tar.gz 6.2 MB d4528517aaa1a44b… https://github.com/ocaml/ocaml/releases/download/5.4.1/ocaml-5.4.1.tar.gz
2.5.1.tar.gz 1.2 MB 459a57cb84c3ea16… https://github.com/ocaml/opam/archive/refs/tags/2.5.1.tar.gz
menhir-20250903-no-symlinks.tar 4.2 MB 087792aff8fb1238… https://github.com/dkpkg/CommonsLang_OCaml/releases/download/opam-menhir-20250903-no-symlinks/menhir-20250903-no-symlinks.tar
2.4.2-50.zip 1.5 MB 3239282aaa91fff1… https://github.com/diskuv/dkml-compiler/archive/refs/tags/2.4.2-50.zip
src.zip 61 KB 6dde51c5f6605a83… https://github.com/diskuv/dkml-runtime-common/releases/download/2.4.2-26/src.zip
msys2-base-x86_64-20260611.tar.xz 51.1 MB a2d047e8ee213c3c… https://github.com/dkpkg/CommonsLang_OCaml/releases/download/msys2-20260611-assets/msys2-base-x86_64-20260611.tar.xzhttps://github.com/msys2/msys2-installer/releases/download/2026-06-11/msys2-base-x86_64-20260611.tar.xz
3.23.1.tar.gz 3.5 MB 63fbef75d09dd4a0… https://github.com/ocaml/dune/archive/refs/tags/3.23.1.tar.gz
x86_64-linux-musl-cross.tgz 107.2 MB c6226824d6b7214c… https://github.com/dkpkg/CommonsLang_OCaml/releases/download/muslcc-x86_64-11.2.1/x86_64-linux-musl-cross.tgzhttps://more.musl.cc/11.2.1/x86_64-linux-musl/x86_64-linux-musl-cross.tgz

Dependencies

PackageVersionsha256
CommonsBase_FileMagic 0.1.20260723064047 db96de9d371ce051…
CommonsBase_LLVM 0.1.20260723061853 bc04736f7a5897fa…
CommonsBase_Win32 0.1.20260720170430 82665762f663fab6…
NotMitEdu_Kerberos 0.1.20260722181247 f43c2a4762aaee8c…
NotMatveevKondratyev_Libinotify 0.1.20260719215723 fb8fdd1de5dd4f6b…
CommonsBase_GNU 0.1.20260723070124 53ac93e0238e2708…
CommonsBase_Std 2.6.20260723055125 972d2bf05f2a3697…
CommonsBase_Build 0.1.20260718232516 f48d91a5fad0af89…

Producer signing key

Releases of this package are signed with this OpenBSD signify key. After you import the package, dk1 trust list prints the same public key and fingerprint; compare them here to confirm you are trusting the intended publisher over a channel independent of the download.

Fingerprint 2b19619c380dd657
Public key RWQrGWGcOA3WV93QbuXdm8aAWjDkYvCM5jgFAanfDRiW9n3PzSvLESmR