Releases: mirage/mirage
Releases · mirage/mirage
3.1.0
3.1.0 (2018-06-20)
- solo5 v0.3.0 support (#906, by @mato @Kensan @hannesm):
The major new user-visible features for the Solo5 backends are:
ukvm: Now runs natively on FreeBSD vmm and OpenBSD vmm.
ukvm: ARM64 support.
muen: New target, for the Muen Separation Kernel.
ukvm: Improved and documented support for debugging Solo5-based unikernels. - generate libvirt.xml for virtio target (#903, by @bramford)
- don't make xen config documents for target qubes (#895, by @yomimono)
- use a path pin when making depends (#891, by @yomimono)
- move block registration to
configure
section (#892, by @yomimono) - allow to directly specifying xenstore ids (#879, by @yomimono)
Bugfix for Xen block device naming
Correct the minimum version number of `cohttp-mirage`
More package name updates
Update to latest package names
- Allow runtime configuration of syslog via config keys
--syslog
,--syslog-port
and--syslog-hostname
(#853 via @hannesm). - Switch build of tool and libraries to Jbuilder (by @samoht)
- Fix a warning when connecting to a ramdisk device (#837 by @g2p)
- Fix reference to tar library when using
--kv-ro archive
(#848 by @mor1) - Adapt to latest functoria API (#849 by @samoht)
- Add a
--gdb
argument for ukvm targets so that debuggers can be attached easily. This allowsmirage configure --gdb -t ukvm
to work (@ricarkol in #847). - Adapt to latest functoria (#849 by @samoht)
- Adapt to latest charrua, tcpip (#854 by @yomimono)
- Switch to jbuilder (#850 by @samoht)
Packaging updates for latest opam repository:
Support new top-level mirage-qubes* and io-page* packages
- add a --block configure flag for picking ramdisk or file-backed disk
- add lower bounds on packages
- fallback to system $PKG_CONFIG_PATH
- update for mirage-qubes-ipv4
restore colors sometimes
usability improvements on 3.0.0
- remove "-color always" from ocamlbuild invocation (bugfix for some scripts interpreting build output) (#811, by @hannesm)
- provide a "random" module argument when invoking IPv6.Make (compat with tcpip 3.1.0) (#801, by @hannesm)
- add a "depends" target to the generated Makefile (controversial and may be removed) (#805, by @yomimono)
- allow qubesdb to be requested in config.ml when the target is xen (#807, by @talex5)
Less Code, Less Magic, More Results
Major Changes
- The solo5 targets
ukvm
andvirtio
(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 mainlinemirage
package. These targets use a newly refactored freestanding OCaml runtime (see https://github.com/mirage/ocaml-freestanding). - The
V1
andV1_LWT
modules, which contained module type definitions agreed upon by implementations used inmirage
, have been renamed toMirage_types
andMirage_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 fromMirage_types
andMirage_types_lwt
. Users are encouraged to refer to the module types directly (e.g.,Mirage_block_lwt.S
instead ofMirage_types_lwt.BLOCK
), and depend on the corresponding packages. - Across the universe of module type definitions, errors in computation are now signalled by a
result
type 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. - The
CLOCK
module type has been replaced withPCLOCK
andMCLOCK
, which represent a POSIX-style wall clock and a monotonically-increasing clock respectively. TheMirage
module providesdefault_posix_clock
anddefault_monotonic_clock
for getting animpl
of each clock. Existing functions which took aclock impl
argument now take anmclock impl
wherever this is reasonable (in practice, everywhere except forlogs
). mirage-types-lwt
is now its own opam package, rather than an optionally installed sub-library bundled withmirage-types
.mirage configure
no longer automatically attempts to install packages. Rather, it generates a.opam
file representing the dependencies that have been discovered based on theconfig.ml
and the arguments passed tomirage configure
. Runningmake depend
against the Makefile generated bymirage configure
will attempt to install these dependencies via opam.- Documentation for the project is now automatically built and provided via
odig
. - The build system for
mirage
and many other libraries has been changed from OASIS totopkg
.
Less Major API changes to Mirage
module
Mirage.register
andMirage.foreign
no longer take alibraries
argument. Theirpackages
argument is now of typeFunctoria.package list
, and thelibrary
information is included inpackage
.connect
functions provided by individual implementations are no longer expected to return at result
orOk t
by themirage
front-end tool's code generation. Rather, they are expected to raise an exception on failure and return the value directly on success.- Two
random
impls are now available -stdlib_random
, which wraps the OCamlRandom
module, andnocrypto_random
, which is a passthrough to the Fortuna PRNG implemented in the nocrypto library.default_random
is available for accessingstdlib_random
by default, but can be told to usenocrypto_random
at compile or runtime via theprng
key. - A
syslog
implementation is usable frommirage
. Construct a record of typeMirage.syslog_config
and callMirage.syslog_udp
,Mirage.syslog_tcp
, orMirage.syslog_tls
to obtain asyslog impl
. - Functions for interfacing with the
mirage-qubes
library are now included:Mirage.qubes_ipv4_stack
andMirage.ipv4_qubes
, as well asMirage.default_qubesdb
. Unikernels which are built with these functions will fail unlessmirage configure
is invoked with-t qubes
. Mirage.tap0
has been renamed toMirage.default_network
and now works as expected on Xen targets.Mirage.farp
is available as an alternative toMirage.arp
, and will use https://github.com/hannesm/arp instead of the ARP implementation in mirage-tcpip.- The
Mirage.ipv4_config
andMirage.ipv6_config
types have been changed to reflect reasonable configuration assumptions rather than attempt to mirror one another's structure. Mirage.create_ipv4
now takesethernet impl
andarpv4 impl
arguments, rather than creating anipv4 impl
directly from anetwork impl
and hiding the intermediateethernet
andarpv4
from the caller.Mirage.create_ipv6
now takes anethernet impl
argument rather than anetwork impl
argument.Mirage.default_ipv4
has been removed.Mirage.direct_udp
now takes an optionalrandom impl
argument.- Functions which yield a
stackv4 impl
now take anipv4 impl
argument instead of anetwork impl
. Mirage.direct_stackv4_with_default_ipv4
anddirect_stackv4_with_static_ipv4
no longer exist. Instead, consider usingdirect_stackv4
,static_ipv4_stack
, ordhcp_ipv4_stack
.- Network-related functions which took a
console impl
argument no longer do so. Mirage.get_mode
,Mirage.add_to_opam_packages
, andMirage.add_to_ocamlfind_libraries
have been removed (as warned in the 2.9.1 release).
Less Major API changes to Mirage_key
module
Mirage_key.is_xen
has been removed andMirage_key.is_unix
added, as that is the more exceptional case.Mirage_key.ipv4
is now an(Ipaddr.V4.Prefix.t * Ipaddr.V4.t)
converter. For anIpaddr.V4.t converter
, use the newMirage_key.ipv4_address
.- A type
Mirage_key.mode
is available for referring to the set of polymorphic variants including Unix, Xen, MacOSX, Ukvm, Virtio, and Qubes. Mirage_key.no_ocaml_check
has been removed.Mirage_key.kv_ro
may now produce adirect
key in addition toArchive
,Crunch
, andFat
keys.Mirage_key.prng
is available for choosing between the standard library and nocrypto random implementations.Mirage_key.network
has been renamed toMirage_key.interface
, asnetwork
has been repurposed in theMirage_key.V4
andMirage_key.V6
modules.Mirage_key.V4.ip
andMirage_key.V4.netmask
have been replaced withMirage_key.V4.network
, which treats the IP and netmask as a single item.Mirage_key.V4.gateways
has been replaced withMirage_key.V4.gateway
, which is at option
instead of the previoust list
.Mirage_key.V6.ip
andMirage_key.V6.netmask
have been replaced withMirage_key.V6.ips
andMirage_key.V6.netmasks
respectively, which accept lists instead of single items.
Less Major API changes outside of mirage
format
function andFormat_unknown
error have been removed from the FS module type inmirage-fs
.read_stream
,io_stream
, andread_until
have been removed from the CHANNEL module type inmirage-channel
.log
has been removed from the CONSOLE module type inmirage-console
.log_s
has been renamed tolog
to replace it.id
has been removed from the DEVICE module type inmirage-device
.- The RANDOM module type provided by
mirage-random
now includes a functiongenerate
that provides random bytes as a buffer (currently aCstruct.t
), replacing the previousint
-based interface. - A
mem
function is now required by the KV_RO module type inmirage-kv
. - The
read
andsize
functions required by the KV_RO module type inmirage-kv
now takeint64
s rather thanint
s. sleep
(which took a float argument representing the number of seconds) has been replaced bysleep_ns
(which takes an int64 representing the numer of nanoseconds) in the module type TIME provided bymirage-time
.- IP source and destination argument names have been standardized to
src
anddst
, and source and destination ports tosrc_port
anddst_port
, in the module types provided bymirage-protocols
. - The
pseudoheader
function is now required for IP module types inmirage-protocols
.
Less Major Usage Changes
- An additional target
qubes
exists for automatically packaging the additional libraries and initialization logic necessary for running MirageOS on QubesOS. Thequbes
target is at its heartxen plus some other stuff
. mirage configure -f
will no longer traverse into subdirectories.mirage configure
needs to be called with a working directory the same as the configuration file.mirage configure --unix
andmirage configure --xen
are no longer understood, as warned in the 2.9.1 release. Instead, usemirage configure -t unix
andmirage configure -t xen
respectively.- The artifact generated by
make
is no longer prefixed withmir-
, and the name given toregister
will 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 themirage-runtime
package, which will be linked instead of the fullmirage
package. (This is largely the collection of parsers for runtime keys.) - The mirage command-line utility is now at
mirage_cli.ml
for easier discovery. - It's now possible to get an
ipv6 impl
. - Tar file generators for use with
tar-format
implementations are less broken. - The
Str
module is no longer included in the OCaml runtime. - Emit an ocamlfind predicate that matches the target.
- Improvements to nocrypto handling.
- Using
crunch
always requiresio-page
. - Xen unikernels will no longer refuse to start when they receive unexpected boot parameters.
- Disable warning #42 in generated code.
mirage-fs
provides transforming FS into KV_RO, rather than requiringfat-filesystem
.- UDP now provides source port randomization even with the direct stack.
- DHCP is now provided by
charrua-client
andcharrua-core
rather thantcpip
. - Link libgcc.a only when building on ARM.
- Stop generating so many unnecessary artifacts.
clean
target removes more artifacts.- Comply with
mirage-clock-xen
's rename tomirage-clock-freestanding
.
warn users of deprecated functions
- Warn users of command-line arguments
--unix
and--xen
that support for
these will soon be dropped. Instead, use-t unix
and-t xen
respectively.
(see mirage/mirage-www#475 (comment))
(#561, by @yomimono) - Warn users of functions
add_to_opam_packages p
and
add_to_ocamlfind_libraries l
that support for these will soon be dropped.
Instead, useregister ~libraries:l
andregister:~packages:p
respectively. (#561, by @yomimono).