Be notified of new releases
Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 28 million developers.Sign up
- The solo5 targets
virtio(see https://mirage.io/blog/introducing-solo5), which allow unikernels to run on KVM hypervisors and on FreeBSD via bhyve, are now available in the mainline
miragepackage. These targets use a newly refactored freestanding OCaml runtime (see https://github.com/mirage/ocaml-freestanding).
V1_LWTmodules, which contained module type definitions agreed upon by implementations used in
mirage, have been renamed to
Mirage_types_lwt. The module type definitions themselves are no longer contained in this repository, but have been moved to their own independently-versioned repositories and are merely referenced from
Mirage_types_lwt. Users are encouraged to refer to the module types directly (e.g.,
Mirage_types_lwt.BLOCK), and depend on the corresponding packages.
- Across the universe of module type definitions, errors in computation are now signalled by a
resulttype and a set of polymorphic variants representing common errors that might occur. Individual implementations may extend this set, and users can always count on the provided module to provide a pretty-printer for these errors.
CLOCKmodule type has been replaced with
MCLOCK, which represent a POSIX-style wall clock and a monotonically-increasing clock respectively. The
default_monotonic_clockfor getting an
implof each clock. Existing functions which took a
clock implargument now take an
mclock implwherever this is reasonable (in practice, everywhere except for
mirage-types-lwtis now its own opam package, rather than an optionally installed sub-library bundled with
mirage configureno longer automatically attempts to install packages. Rather, it generates a
.opamfile representing the dependencies that have been discovered based on the
config.mland the arguments passed to
mirage configure. Running
make dependagainst the Makefile generated by
mirage configurewill attempt to install these dependencies via opam.
- Documentation for the project is now automatically built and provided via
- The build system for
mirageand many other libraries has been changed from OASIS to
Less Major API changes to
Mirage.foreignno longer take a
packagesargument is now of type
Functoria.package list, and the
libraryinformation is included in
connectfunctions provided by individual implementations are no longer expected to return a
Ok tby the
miragefront-end tool's code generation. Rather, they are expected to raise an exception on failure and return the value directly on success.
randomimpls are now available -
stdlib_random, which wraps the OCaml
nocrypto_random, which is a passthrough to the Fortuna PRNG implemented in the nocrypto library.
default_randomis available for accessing
stdlib_randomby default, but can be told to use
nocrypto_randomat compile or runtime via the
syslogimplementation is usable from
mirage. Construct a record of type
Mirage.syslog_tlsto obtain a
- Functions for interfacing with the
mirage-qubeslibrary are now included:
Mirage.ipv4_qubes, as well as
Mirage.default_qubesdb. Unikernels which are built with these functions will fail unless
mirage configureis invoked with
Mirage.tap0has been renamed to
Mirage.default_networkand now works as expected on Xen targets.
Mirage.farpis available as an alternative to
Mirage.arp, and will use https://github.com/hannesm/arp instead of the ARP implementation in mirage-tcpip.
Mirage.ipv6_configtypes have been changed to reflect reasonable configuration assumptions rather than attempt to mirror one another's structure.
arpv4 implarguments, rather than creating an
ipv4 impldirectly from a
network impland hiding the intermediate
arpv4from the caller.
Mirage.create_ipv6now takes an
ethernet implargument rather than a
Mirage.default_ipv4has been removed.
Mirage.direct_udpnow takes an optional
- Functions which yield a
stackv4 implnow take an
ipv4 implargument instead of a
direct_stackv4_with_static_ipv4no longer exist. Instead, consider using
- Network-related functions which took a
console implargument no longer do so.
Mirage.add_to_ocamlfind_librarieshave been removed (as warned in the 2.9.1 release).
Less Major API changes to
Mirage_key.is_xenhas been removed and
Mirage_key.is_unixadded, as that is the more exceptional case.
Mirage_key.ipv4is now an
(Ipaddr.V4.Prefix.t * Ipaddr.V4.t)converter. For an
Ipaddr.V4.t converter, use the new
- A type
Mirage_key.modeis available for referring to the set of polymorphic variants including Unix, Xen, MacOSX, Ukvm, Virtio, and Qubes.
Mirage_key.no_ocaml_checkhas been removed.
Mirage_key.kv_romay now produce a
directkey in addition to
Mirage_key.prngis available for choosing between the standard library and nocrypto random implementations.
Mirage_key.networkhas been renamed to
networkhas been repurposed in the
Mirage_key.V4.netmaskhave been replaced with
Mirage_key.V4.network, which treats the IP and netmask as a single item.
Mirage_key.V4.gatewayshas been replaced with
Mirage_key.V4.gateway, which is a
t optioninstead of the previous
Mirage_key.V6.netmaskhave been replaced with
Mirage_key.V6.netmasksrespectively, which accept lists instead of single items.
Less Major API changes outside of
Format_unknownerror have been removed from the FS module type in
read_untilhave been removed from the CHANNEL module type in
loghas been removed from the CONSOLE module type in
log_shas been renamed to
logto replace it.
idhas been removed from the DEVICE module type in
- The RANDOM module type provided by
mirage-randomnow includes a function
generatethat provides random bytes as a buffer (currently a
Cstruct.t), replacing the previous
memfunction is now required by the KV_RO module type in
sizefunctions required by the KV_RO module type in
int64s rather than
sleep(which took a float argument representing the number of seconds) has been replaced by
sleep_ns(which takes an int64 representing the numer of nanoseconds) in the module type TIME provided by
- IP source and destination argument names have been standardized to
dst, and source and destination ports to
dst_port, in the module types provided by
pseudoheaderfunction is now required for IP module types in
Less Major Usage Changes
- An additional target
qubesexists for automatically packaging the additional libraries and initialization logic necessary for running MirageOS on QubesOS. The
qubestarget is at its heart
xen plus some other stuff.
mirage configure -fwill no longer traverse into subdirectories.
mirage configureneeds to be called with a working directory the same as the configuration file.
mirage configure --unixand
mirage configure --xenare no longer understood, as warned in the 2.9.1 release. Instead, use
mirage configure -t unixand
mirage configure -t xenrespectively.
- The artifact generated by
makeis no longer prefixed with
mir-, and the name given to
registerwill be stripped of OCaml-unfriendly characters before files are written.
Bugfixes and Other Improvements
- Functions used by
mirage-generated programs at runtime have been split off into the
mirage-runtimepackage, which will be linked instead of the full
miragepackage. (This is largely the collection of parsers for runtime keys.)
- The mirage command-line utility is now at
mirage_cli.mlfor easier discovery.
- It's now possible to get an
- Tar file generators for use with
tar-formatimplementations are less broken.
Strmodule is no longer included in the OCaml runtime.
- Emit an ocamlfind predicate that matches the target.
- Improvements to nocrypto handling.
- Xen unikernels will no longer refuse to start when they receive unexpected boot parameters.
- Disable warning #42 in generated code.
mirage-fsprovides transforming FS into KV_RO, rather than requiring
- UDP now provides source port randomization even with the direct stack.
- DHCP is now provided by
- Link libgcc.a only when building on ARM.
- Stop generating so many unnecessary artifacts.
cleantarget removes more artifacts.
- Comply with
mirage-clock-xen's rename to