Dear OCaml users,

We have the pleasure of announcing the dual releases of OCaml 4.14.3 and OCaml
5.4.1, dedicated to the memory of Nicolaas Govert de Bruijn on the anniversary
of his death.

Those releases are a collection of safe and valuable runtime bugfixes.
The OCaml 5.4.1 release also contains a fix for the `-pack` mode for macOs
and various TSAN fixes.

More importantly, those new versions harden the Marshal module against malicious
inputs as described in the security announcement (https://osv.dev/vulnerability/OSEC-2026-01).

We are encouraging you to switch to those new releases whenever possible.

Don't hesitate to report any bugs on the OCaml issue tracker at
https://github.com/ocaml/ocaml/issues.

See the list of changes below for more details.

Happy hacking,
-- Florian Angeletti for the OCaml team.


Installation Instructions
------------------------------

The base compilers will be soon installable as an opam switch with the following commands:

    opam update
    opam switch create 4.14.3
    opam switch create 5.4.1


The source code for the release candidate is also directly available on:

* GitHub: 
  - https://github.com/ocaml/ocaml/archive/4.14.3.tar.gz
  - https://github.com/ocaml/ocaml/archive/5.4.1.tar.gz

* Inria archive: 
   - https://caml.inria.fr/pub/distrib/ocaml-4.14/ocaml-4.14.3.tar.gz
   - https://caml.inria.fr/pub/distrib/ocaml-5.4/ocaml-5.4.1.tar.gz


OCaml 4.14.3 (17 February 2026)
-----------------------------------------------------


- [#12070](https://github.com/ocaml/ocaml/issues/12070), [#12075](https://github.com/ocaml/ocaml/issues/12075), [#13209](https://github.com/ocaml/ocaml/issues/13209): auto-detect whether `ar` support @FILE arguments at
  configure-time to avoid using this feature with toolchains that do not support
  it (eg FreeBSD/Darwin); backport from 5.3.
  (backport by Boris Dobroslavov, original fix by Nicolás Ojeda Bär, review by
  Xavier Leroy, David Allsopp, Javier Chávarri, Anil Madhavapeddy)

- [#12207](https://github.com/ocaml/ocaml/issues/12207), [#12222](https://github.com/ocaml/ocaml/issues/12222): Make closure computation linear in the number of recursive
  functions instead of quadratic
  (Vincent Laviron, report by François Pottier, review by Nathanaëlle Courant
  and Gabriel Scherer)

- [#13430](https://github.com/ocaml/ocaml/issues/13430), [#13434](https://github.com/ocaml/ocaml/issues/13434): protect memory-safety on Lazy.force races
  (Gabriel Scherer and Vincent Laviron, report by Edwin Török,
   review by Vincent Laviron)

- [#13448](https://github.com/ocaml/ocaml/issues/13448), [#13449](https://github.com/ocaml/ocaml/issues/13449): fix a code-generation bug on unsafe array accesses
  at type int32, int64, nativeint, which has been introduced in OCaml 4.04.
  (Gabriel Scherer, review by Nicolás Ojeda Bär and Vincent Laviron,
   report by Simon Cruanes)

- [#13516](https://github.com/ocaml/ocaml/issues/13516): Fix regression where error conditions during bytecode initialisation
  caused a segmentation fault rather than being properly reported (regression of
  [#5115](https://github.com/ocaml/ocaml/issues/5115) in [#11788](https://github.com/ocaml/ocaml/issues/11788))
  (David Allsopp, review by Nicolás Ojeda Bär)

- [#13847](https://github.com/ocaml/ocaml/issues/13847): On Windows, maintain a number of threads waiting on the master lock to
  avoid unnecessary context switches
  (Dmitry Bely, review by Antonin Décimo)

- [#14007](https://github.com/ocaml/ocaml/issues/14007), [#14015](https://github.com/ocaml/ocaml/issues/14015): Fix memory corruption when an exception is raised during
  demarshaling.
  (Benoît Vaugon, review by David Allsopp and Gabriel Scherer)

- [OSEC-2026-01](https://osv.dev/vulnerability/OSEC-2026-01): robustify intern.c
  (Xavier Leroy, review by Damien Doligez and Olivier Nicole)

OCaml 5.4.1 (17 February 2026)
-------------------------------------------

### Bug fixes:

- [#14010](https://github.com/ocaml/ocaml/issues/14010): Fix miscompilation / liveness errors for string operations
  (Mark Shinwell, Xavier Clerc, review by Xavier Leroy and Gabriel Scherer)

- [#14065](https://github.com/ocaml/ocaml/issues/14065): Fix function signature mismatch of `__tsan_func_exit` with GCC 15.
  Check in the configure step if the TSan provided internal builtins are the
  same as what we expect, introduce `caml_tsan_*` wrappers for the `__tsan_*`
  functions we use.
  (Hari Hara Naveen S, report by Hari Hara Naveen S,
  review by Gabriel Scherer, Antonin Décimo, Olivier Nicole)

- [#14417](https://github.com/ocaml/ocaml/issues/14417): Fix issue with nested packs on macOS.
  (Vincent Laviron, report by Kate Deplaix, review by Gabriel Scherer)

- [#14213](https://github.com/ocaml/ocaml/issues/14213): Fix shadow-stack-related crashes with TSan
  (Olivier Nicole, report by Nathan Taylor, review by Gabriel Scherer and
   Stefan Muenzel)

- [#14255](https://github.com/ocaml/ocaml/issues/14255): Fix TSan bug with C calls that take many arguments
  (Olivier Nicole and Miod Vallat, report by Nathan Taylor, review by Gabriel
   Scherer)

- [OSEC-2026-01](https://osv.dev/vulnerability/OSEC-2026-01): robustify intern.c
  (Xavier Leroy and Nicolás Ojeda Bär, review by Olivier Nicole, Mindy Preston,
  Edwin Török, and Gabriel Scherer)