Skip to content

Releases: mirage/mirage

4.5.1

17 May 15:26
Compare
Choose a tag to compare

CHANGES:

  • BREAKING: remove ~name parameter from Mirage.Runtime_args.create
    (#1541 @samoht, fixes #1532)
  • BREAKING: remove ~name parameter from Mirage.runtime_arg, and use a
    string (instead of a format string) as third parameter (#1541 @samoht)
  • constrain the start function to unit Lwt.t. Previously, there was no
    restrictions, and lots of time was spent in debugging when a unikernel
    resulted in unit Lwt.t Lwt.t (@Julow #1524)
  • revise man page sections and ordering: ARGUMENTS, OPTIONAL, NETWORK OPTIONS,
    DISK OPTIONS, LOG AND MONITORING OPTIONS, OCAML RUNTIME OPTIONS. Previously,
    the ARGUMENTS and OPTIONS were put later, and were hard to find. These are
    the sections where unikernel-specific arguments are put by default
    (#1531 @hannesm @reynir)
  • add --net=host and --net=ocaml to reduce confusion. --net=host uses the
    TCP/IP socket stack, --net=ocaml the OCaml network stack (#1525 @hannesm)
  • quote Runtime_arg.call (#1522 @Julow)
  • documentation fixes (inline examples @Julow #1523, @hannesm #1537 (fixes
    #1512 reported by @reynir), Runtime_args.create #1541 @samoht)
  • fix the build instructions of the generated opam file: since 4.5.0
    mirage build is no longer available, use make "build" (#1527 @hannesm)
  • add RELEASE.md, a guide on how to cut a mirage release (#1519 @samoht)
  • allow git 3.16 (#1536 @hannesm)
  • use mirage-bootvar (using dune variant) instead of parse-argv and
    mirage-bootvar-xen, mirage-bootvar-solo5, mirage-bootvar-unix
    (#1533 @hannesm)
  • BUGFIX: reset the lexer location before applying functors in generated code
    (#1539 @samoht, fixes #1520 @hannesm)
  • BUGFIX: fix off-by-one locations for mirage/main.ml (#1540 @samoht, fixes
    #1528 @hannesm)

4.5.0

10 Apr 13:21
88faf8f
Compare
Choose a tag to compare

CHANGES:

  • This release introduces a significant change in the Mirage tool by
    splitting the definition of command-line arguments used at
    configure-time and runtime. Command-line arguments used in the
    configure script (also called 'configuration keys' and defined in
    the Key module) are essential during the setup of module
    dependencies for the unikernel, allowing for a specialized
    production of a unikernel for a given target runtime environment. On
    the other hand, command-line arguments that the unikernel can use at
    runtime (defined in the Runtime_arg module) are useful for
    customizing deployments without altering the dependencies of the
    unikernels. (#1449, #1450, #1451, #1455 @samoht, review by @hannesm)

    • API changes:

      • There is no more ~stage parameter for Key.Arg.info.
      • Key now define command-line arguments for the configuration tool.
      • There is a new module Runtime_arg to define command-line arguments
        for the unikernel.
      • As there are no more keys type 'Both, users are now expected to create
        two separated keys in that case (one for configure-time, one for runtime)
        or decide if the key is useful at runtime of configure-time.
    • Intended use of configuration keys (values of type 'a key):

      • Used to set up module dependencies of the unikernel, such as the
        target (hvt, xen, etc.) and whether to use DHCP or a fixed IP address.
      • Enable the production of specialized unikernels suitable for
        specific target runtime environments and dedicated network and
        storage stacks.
      • Similar keys will produce reproducible binaries to be uploaded to artifact
        repositories like Docker Hub or https://builds.robur.coop/.
    • Intended use of command-line runtime arguments (values of type
      a runtime_arg):

      • Allow users to customize deployments by changing device
        configuration, like IP addresses, secrets, block device names,
        etc., post downloading of binaries.
      • These keys don’t alter the dependencies of the unikernels.
      • A runtime keys is just a reference to a normal Cmdliner term.
    • key_gen.ml is not generated anymore, so users cannot refer to
      Key_gen.<key_name> directy.

      • Any runtime argument has to be declared (using runtime_arg and
        registered on the device (using ~runtime_args). The value of that
        argument will then be passed as an extra parameter of the connect
        function of that device.
      • Configuration keys are not available at runtime anymore. For
        instance, Key_gen.target has been removed.
  • Code migration:

    (* in config.ml *)
    let key =
      let doc = Key.Arg.info ~doc:"A Key." ~stage:`Run [ "key" ] in
      Key.(create "key" Arg.(opt_all ~stage:`Run string doc))

    becomes:

    (* in unikernel.ml *)
    open Cmdliner
    
    let key =
      let doc = Arg.info ~doc:"A Key." [ "key" ] in
      Arg.(value & opt_all string [] doc)
    (* in unikernel.ml *)
    let start _ =
      let key = Key_gen.hello () in
      ...

    becomes:

    (* in config.ml *)
    let hello = runtime_arg ~pos:__POS__ "Unikernel.hello"
    let main = main ~runtime_args:[hello] ...
    (* in unikernel.ml *)
    let hello =
      let open Cmdliner in
      let doc = Arg.info ~doc:"How to say hello." [ "hello" ] in
      Arg.(value & opt string "Hello World!" doc)
    
    let start _ hello =
      ...
    
  • bump minimal ocaml-solo5 version bound to 0.8.2 to avoid fast memory usage
    error (#1507, @palainp)
  • BREAKING: the packages functoria and functoria-runtime are removed. The
    respectives libraries became mirage.functoria and mirage-runtime.functoria
    (#1509, @samoht)
  • BREAKING: Mirage.keys is renamed to Mirage.runtime_args (#1506, @samoht)
  • BREAKING: remove Mirage.foreign. Use Mirage.main` instead (#1505, @samoht)
  • BREAKING: Mirage.main does not take a ?extra_deps parameter anymore
    (#1505, @samoht)
  • BREAKING: the Mirage.connect functions passed to create devices
    (with Mirage.impl) now take values of type 'a Mirage.code instead
    of string. Value of type code are created using a new Mirage.code
    function, that takes ~pos:__POS__ as parameter. This is used to generate
    better locations in the generated code, leading to better error messages
    (#1504, @samoht)
  • BUGFIX: fix mirage describe output (#1446 @samoht), add test (#1458 @samoht)
  • Remove ipaddr from runtime (#1437 @samoht, #1465 @hannesm)
  • BREAKING: Mirage.register no longer have ?packages and ?keys arguments
    (#1433, #1434 @hannesm)
  • BREAKING: Remove deprecated bindings and types (#1461 @hannesm)
  • BREAKING: Remove mirage build subcommand, use dune build in Makefile
    (#1404 @hannesm), put --profile release in Makefile instead of
    dune-workspace (#1470 @hannesm)
  • Increase dune version to 2.9 in generated dune-project (#1443 @samoht)

4.4.2

13 Feb 11:00
Compare
Choose a tag to compare

CHANGES:

4.4.1

20 Nov 21:47
Compare
Choose a tag to compare

CHANGES:

4.4.0

20 Jun 08:33
Compare
Choose a tag to compare

CHANGES:

4.3.6

28 Mar 13:48
Compare
Choose a tag to compare

CHANGES:

4.3.5

20 Mar 11:46
Compare
Choose a tag to compare

CHANGES:

Changed

4.3.4

23 Feb 10:19
Compare
Choose a tag to compare

CHANGES:

Fixed

Added

Changed

4.3.3

30 Jan 12:13
Compare
Choose a tag to compare

CHANGES:

Fixed

  • add (merlin) to the dune-workspace file -- this allows merlin to properly work
    with unikernels (#1385, fixes #1384 @TheLortex @hannesm)
  • add "build" stanzas to packages that are supposed to be vendored (#1383,
    @Leonidas-from-XIV) for "opam-monorepo 0.3.5" compatibility

Changed

4.3.2

12 Dec 14:30
Compare
Choose a tag to compare

CHANGES:

Fixed

  • use "printf" instead of "echo -e" in Makefiles for macOS support (#1370,
    @gridbugs)

Changed

Added