Mirage Mirage Versions Save

MirageOS is a library operating system that constructs unikernels

v3.10.7

2 years ago

CHANGES:

  • Allow mirage-clock 4.0.0 (@hannesm #1256)
  • Use "opam var prefix" instead of "opam config var prefix" (@hannesm)

v3.10.6

2 years ago

CHANGES:

  • Adapt to conduit 5.0.0 API (and dns 6.0.0) @hannesm #1246
  • Avoid deprecated Fmt functions @hannesm #1246

v3.10.5

2 years ago

CHANGES:

  • Allow tls-mirage 0.14 and 0.15 series (@hannesm)

v3.10.4

3 years ago

CHANGES:

  • Allow mirage-crypto-rng-mirage 0.10 (@hannesm)

v3.10.3

3 years ago

CHANGES:

  • Adapt to conduit 4.0.0 and cohttp 4.0.0 (@dinosaure #1221)

v3.10.2

3 years ago

CHANGES:

  • Adapt to conduit 2.3 and cohttp 4.0 (@samoht @dinosaure #1209)
  • Allow mirage-crypto-rng-mirage 0.9 (@hannesm #1218)
  • Adapt to tcpip 6.1.0 release (the unix sublibrary is no longer needed)

v3.10.1

3 years ago

CHANGES:

  • Fix serialising of Mirage_key.Arg.ip_address: remove superfluous '.' character (#1205 @hannesm)

v3.10.0

3 years ago

CHANGES:

IPv6 and dual (IPv4 and IPv6) stack support #1187

Since a long time, IPv6 code was around in our TCP/IP stack (thanks to @nojb who developed it in 2014). Some months ago, @hannesm and @MagnusS got excited to use it. After we managed to fix some bugs and add some test cases, and writing more code to setup IPv6-only and dual stacks, we are eager to share this support for MirageOS in a released version. We expect there to be bugs lingering around, but duplicate address detection (neighbour solicitation and advertisements) has been implemented, and (unless "--accept-router-advertisement=false") router advertisements are decoded and used to configure the IPv6 part of the stack. Configuring a static IPv6 address is also possible (with "--ipv6=2001::42/64").

While at it, we unified the boot arguments between the different targets: namely, on Unix (when using the socket stack), you can now pass "--ipv4=127.0.0.1/24" to the same effect as the direct stack: only listen on 127.0.0.1 (the subnet mask is ignored for the Unix socket stack).

A dual stack unikernel has "--ipv4-only=BOOL" and "--ipv6-only=BOOL" parameters, so a unikernel binary could support both Internet Protocol versions, while the operator can decide which protocol version to use.

Please also note that the default IPv4 network configuration no longer uses 10.0.0.1 as default gateway (since there was no way to unset the default gateway #1147).

For unikernel developers, there are some API changes in the Mirage module

  • New "v4v6" types for IP protocols and stacks
  • The ipv6_config record was adjusted in the same fashion as the ipv4_config type: it is now a record of a network (V6.Prefix.t) and gateway (V6.t option)

Some parts of the Mirage_key module were unified as well:

  • Arp.ip_address is available (for a dual Ipaddr.t)
  • Arg.ipv6_address replaces Arg.ipv6 (for an Ipaddr.V6.t)
  • Arg.ipv6 replaces Arg.ipv6_prefix (for a Ipaddr.V6.Prefix.t)
  • V6.network and V6.gateway are available, mirroring the V4 submodule

If you're ready to experiment with the dual stack, here's a diff for our basic network example (from mirage-skeleton/device-usage/network) replacing IPv4 with a dual stack:

diff --git a/device-usage/network/config.ml b/device-usage/network/config.ml

v3.9.0

3 years ago

CHANGES:

The Xen backend is a minimal legacy-free re-write: Solo5 (since 0.6.6) provides the low-level glue code, and ocaml-freestanding provides the OCaml runtime. The PV-only Mini-OS implementation has been retired.

The only supported virtualization mode is now Xen PVH (version 2 or above), supported since Xen version 4.10 or later (and Qubes OS 4.0).

The support for the ARM32 architecture on Xen has been removed.

Security posture improvements:

With the move to a Solo5 and ocaml-freestanding base MirageOS gains several notable improvements to security posture for unikernels on Xen:

  • Stack smashing protection is enabled unconditionally for all C code.
  • W^X is enforced throughout, i.e. .text is read-execute, .rodata is read-only, non-executable and .data, heap and stack are read-write and non-executable.
  • The memory allocator used by the OCaml runtime is now dlmalloc (provided by ocaml-freestanding), which is a big improvement over the Mini-OS malloc, and incorporates features such as heap canaries.

Interface changes:

  • With the rewrite of the Xen core platform stack, several Xen-specific APIs have changed in incompatible ways; unikernels may need to be updated. Please refer to the mirage-xen v6.0.0 change log for a list of interfaces that have changed along with their replacements.

Other changes:

  • OCaml 4.08 is the minimum supported version.
  • A dummy dev-repo field is emitted for the generated opam file.
  • .xe files are no longer generated.
  • Previous versions of MirageOS would strip boot parameters on Xen, since Qubes OS 3.x added arguments that could not be interpreted by our command line parser. Since Qubes OS 4.0 this is no longer an issue, and MirageOS no longer strips any boot parameters. You may need to execute qvm-prefs qube-name kernelopts ''.

Acknowledgements:

  • Thanks to Roger Pau Monné, Andrew Cooper and other core Xen developers for help with understanding the specifics of how PVHv2 works, and how to write an implementation from scratch.
  • Thanks to Marek Marczykowski-Górecki for help with the Qubes OS specifics, and for forward-porting some missing parts of PVHv2 to Qubes OS version of Xen.
  • Thanks to @palainp on Github for help with testing on Qubes OS.

v3.8.1

3 years ago

CHANGES:

  • OCaml runtime parameters (OCAMLPARAM) are exposed as boot and configure arguments. This allows e.g. to switch to the best-fit garbage collection strategy (#1180 @hannesm)