mirage

MirageOS is a library operating system that constructs unikernels

Subscribe to updates I use mirage


Statistics on mirage

Number of watchers on Github 1037
Number of open issues 78
Average time to close an issue 14 days
Main language OCaml
Average time to merge a PR 2 days
Open pull requests 37+
Closed pull requests 26+
Last commit 6 months ago
Repo Created almost 9 years ago
Repo Last Updated 6 months ago
Size 25.8 MB
Homepage https://mirage.io
Organization / Authormirage
Latest Releasev3.0.8
Contributors21
Page Updated
Do you use mirage? Leave a review!
View open issues (78)
View mirage activity
View TODOs for mirage (4)
View on github
Latest Open Source Launches
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating mirage for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

MirageOS

MirageOS is a library operating system that constructs unikernels for secure, high-performance network applications across a variety of cloud computing and mobile platforms. Code can be developed on a traditional OS such as Linux or MacOS X, and then compiled into a fully-standalone, specialised unikernel that runs under the Xen or KVM hypervisors as well as lightweight hypervisors like BSD's bhyve. Xen and KVM power many public clouds; MirageOS unikernels are currently running on Amazon's Elastic Compute Cloud and Google Compute Engine, and maybe others!

The most up-to-date documentation can be found at the homepage. The site is self-hosted, and is itself a useful example. Simpler skeleton applications are also available online.

Build Status docs

This repository

This repository includes:

  • a command-line tool to create and deploy applications with MirageOS; and
  • in types/, a library of type signatures that compliant applications use.

There are several diverse backends in MirageOS that require rather specialised build steps (from Xen to KVM unikernels), and this complexity is wrapped up in the tool.

To work with mirage, you'll need to either install prerequisites locally or use the Docker image.

Local install

You will need the following:

  • a working OCaml compiler (4.03.0 or higher).
  • the OPAM source package manager (1.2.2 or higher).
  • an x86_64 or armel Linux host to compile Xen kernels, or FreeBSD, OpenBSD or MacOS X for the userlevel version.

Docker image

There is a maintained Docker image at unikernel/mirage. You can also use the Dockerfile in this repository:

docker build -t mirage .
docker run -v <your-source>:/src opam config exec -- mirage

Using mirage

There are two stages to using mirage:

  • a configure phase where necessary code is generated and dependencies are determined.
  • an optional depends phase where OPAM package dependencies are satisfied.
  • a build phase where the compiler and any support scripts are run.

You can find documentation, walkthroughs and tutorials over on the MirageOS website. The install instructions are a good place to begin!

mirage open issues Ask a question     (View All Issues)
  • almost 2 years remove Str module
  • almost 2 years platforms (xen/solo5)
  • almost 2 years TCP/UDP v4/v6 woes
  • almost 2 years infrastructure tasks for mirage3
  • almost 2 years IP configuration --v4 ip/mask instead of --ip X --netmask Y
  • almost 2 years should the type for interfaces be a numerical index, not a string?
  • almost 2 years default network interface should be named something more generic
  • almost 2 years determine compatibility with Google libfuzzer and oss-fuzz
  • almost 2 years A way to know the cpu running time of the microkernel
  • almost 2 years mirage vs Makefile
  • almost 2 years update README - it shouldn't be so Xen-specific
  • almost 2 years Stack.TCPV4.write do not return not even fail asynchronously.
  • almost 2 years V1_LWT.CHANNEL
  • almost 2 years mirage configure should be re-run when config.ml changes
  • almost 2 years 32bit CI builds
  • almost 2 years [tracking] docs.mirage.io
  • almost 2 years uncaught exceptions in the networking stack
  • about 2 years mirage configure should not install depext by default
  • about 2 years doc: CLOCK -> PCLOCK
  • about 2 years Tracking issue towards MirageOS 3.0
  • about 2 years mirage.github.io completely broken
  • about 2 years Improved CI and end-to-end testing
  • about 2 years Simultaneous multi-backend support
  • about 2 years pending items for consideration for Mirage 3.0
  • about 2 years Centralise library/repository list and changelogs
  • about 2 years mirage.io updates/improvements
  • about 2 years mirage configure --no-opam reports ocamlfind packages, not opam packages
  • about 2 years arp and ip module types should assume one ip address and default gateway
  • over 2 years Non-TLS http_server / tcp_conduit_connector depend on nocrypto
  • over 2 years mirage configure --help and mirage help configure are not synonym
mirage open pull requests (View All Pulls)
  • Prepare 2.7 release
  • Add LOGS signature
  • Add `pp_error` to FLOW and use a result type
  • RFC: Support checksum offload
  • Update Readme
  • Add the possibility to ignore the command line.
  • Followon #523: Icmp module type and multidistro CI
  • [POC] Support early configuration of logging
  • Require "pseudoheaders" function for IP module types.
  • cleanups for generated Makefile: EXTRA_LD_FLAGS, link libgcc.a only on ARM
  • [RFC] simplify random
  • [RFC] Add `disconnect` to `FLOW`
  • PCLOCK / MCLOCK - implementations of POSIX and monotonic clocks
  • TIME: use an int64 for sleep
  • [do not merge yet] renames of entropy
  • Travis: build on a few more distros using the Docker containers
  • Warn on use of deprecated functions.
  • [Tracking] Better errors
  • Topkg
  • [RFC] add Qubes target
  • Update changelog
  • Emit an ocamlfind predicate that matches the target
  • also remove Makefile.ukvm when running `mirage clean`
  • Network error
  • [please don't merge] prng key
  • no need to manually add targets to makefile
  • Arp result types
  • fix incorrect connect string for create_ipv6
  • rename ipv4 to ipv4_address, ipv4_network to ipv4
  • result-y FS, KV_RO, and BLOCK module types
  • include types change in CHANGELOG, update year for 3.0.0
  • expand ocamlfind paths using ocamlfind, instead of assuming opam layout
  • fallback to system $PKG_CONFIG_PATH
  • Add a --output CLI option to overwrite the unikernel name
  • Update Mirage with the effect/value distinction in 'connect'
  • allow directly specifying xenstore ids for block devices
  • Add upper bounds to all packages specified in mirage config keys
mirage questions on Stackoverflow (View All Questions)
  • Ember Mirage persist data
  • Ember-Cli-Mirage 404
  • Ember-CLI-Mirage enforcing JSON:API?
  • Ember-cli-mirage not showing any data with get
  • ember-cli-mirage testing request params
  • JSON not parsing in Ember with QUnit and Mirage
  • Unable to disable Google Analytics via Spring to address DS-2718 (failed GA connections prevent file downloads) when building DSpace 5.3 with Mirage 2
  • Ember.js - Model todo not found when using ember-cli-mirage for a fake model
  • How to install SIS(671) mirage 3 graphic driver on arch linux?
  • using the server variable in ember-cli-mirage tests
  • Ember destroyRecord (or deleteRecord then save) using ember-cli-mirage failing
  • testing error responses with ember-cli-mirage
  • "Unknown lifecycle phase '.on=true'" when building DSpace 5.3 with Mirage 2 enabled on Windows Server 2012
  • Make advanced filters "Apply" button in DSpace Mirage 2 more prominent
  • Relationships with Ember CLI Mirage
  • ember data 1.13.8 and ember cli mirage confusion
  • Ember-CLI with Mirage gives me this error : Uncaught TypeError: Cannot read property 'destroyRecord' of undefined
  • Debugging Ember-cli-mirage when routes are not being called
  • Handle 404 not found response with Ember and Ember-CLI-Mirage
  • Debugging Ember CLI Mirage in an acceptance test
  • How do I create a relationship in ember-cli-mirage?
  • How to make Ember Cli Mirage to work with Ember Simple auth
  • How is Docker related to exokernal approach like Mirage OS?
  • How to build a Xen unikernel of Mirage OS
  • How do I write a custom route in Ember CLI Mirage?
  • Retaining Search String in text box using javascript cookies in DSpace 4.2 Mirage Theme
  • Modifying dspace discover page in xmlui mirage theme
  • End of file reached when starting mirage mock server
  • Styling of Mirage 2 using themes from bootswatch.com
  • interfacing vhand 2.0 data glove with mirage arcane head mounted display
mirage list of languages used
mirage latest release notes
v3.0.8 Bugfix for Xen block device naming
  • when passing block devices to xen, pass the raw filename rather than trying to infer the xenstore ID (#874, by @yomimono)
  • make homepage in opam files consistent (#872, by @djs55)
3.0.7 Correct the minimum version number of `cohttp-mirage`
  • the released version of cohttp-mirage is 1.0.0 (not 3.0.0) (#870 by @hannesm)
3.0.6 More package name updates
  • remove macOS < yosemite support (#860 by @hannesm)
  • rename mirage-http to cohttp-mirage (#863 by @djs55) see [mirage/ocaml-cohttp#572]
  • opam: require OCaml 4.04.2+ (#867 by @hannesm)
Other projects in OCaml