{"id":21659547,"url":"https://github.com/AsahiLinux/muvm","last_synced_at":"2025-07-17T22:32:20.222Z","repository":{"id":256416096,"uuid":"797254495","full_name":"AsahiLinux/muvm","owner":"AsahiLinux","description":"muvm - run programs from your system in a microVM","archived":false,"fork":false,"pushed_at":"2025-06-12T10:39:37.000Z","size":253,"stargazers_count":629,"open_issues_count":47,"forks_count":42,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-07-12T23:44:13.738Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AsahiLinux.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-05-07T13:42:14.000Z","updated_at":"2025-07-10T22:56:51.000Z","dependencies_parsed_at":"2024-09-10T16:18:48.154Z","dependency_job_id":"75ff70e2-ae09-46fa-8e23-a899c2300bb2","html_url":"https://github.com/AsahiLinux/muvm","commit_stats":{"total_commits":88,"total_committers":9,"mean_commits":9.777777777777779,"dds":0.5227272727272727,"last_synced_commit":"59b49344beb81b24e1f04ec99592d815560343d2"},"previous_names":["asahilinux/krun","asahilinux/muvm"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/AsahiLinux/muvm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsahiLinux%2Fmuvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsahiLinux%2Fmuvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsahiLinux%2Fmuvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsahiLinux%2Fmuvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AsahiLinux","download_url":"https://codeload.github.com/AsahiLinux/muvm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsahiLinux%2Fmuvm/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265457889,"owners_count":23769031,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-25T09:31:12.897Z","updated_at":"2025-07-17T22:32:20.217Z","avatar_url":"https://github.com/AsahiLinux.png","language":"Rust","funding_links":[],"categories":["Rust","others"],"sub_categories":[],"readme":"# muvm - run programs from your system in a microVM\n\n`muvm` allows you to run arbitrary programs from your system in a microVM. It's comprised of 2 small programs:\n\n- `muvm`: links against [libkrun](https://github.com/containers/libkrun) to create the microVM.\n\n- `muvm-guest`: acts as an entrypoint inside the microVM to set up the environment for running your program. It spawns a server listening for requests to run additional programs. This allows you to run multiple graphical applications inside the same microVM.\n\n## Using\n\n``` sh\nUsage: muvm [-c=CPU_LIST]... [-e=ENV]... [--mem=MEM] [--vram=VRAM] [--passt-socket=PATH] [-f=\nFEX_IMAGE]... [-m] [-i] [-t] [--privileged] [-p=\u003c[[IP:][HOST_PORT]:]GUEST_PORT[/PROTOCOL]\u003e]... [\n--emu=EMU] [-x=COMMAND]... COMMAND [COMMAND_ARGS]...\n\nAvailable positional items:\n    COMMAND                  the command you want to execute in the vm\n    COMMAND_ARGS             arguments of COMMAND\n\nAvailable options:\n    -c, --cpu-list=CPU_LIST  The numerical list of processors that this microVM will be bound to.\n                                     Numbers are separated by commas and may include ranges. For\n                                     example: 0,5,8-11.\n                             [default: all logical CPUs on the host, limited to performance cores\n                                 (if applicable)]\n    -e, --env=ENV            Set environment variable to be passed to the microVM\n                                     ENV should be in KEY=VALUE format, or KEY on its own to inherit\n                                     the current value from the local environment\n        --mem=MEM            The amount of RAM, in MiB, that will be available to this microVM.\n                                     The memory configured for the microVM will not be reserved\n                                     immediately. Instead, it will be provided as the guest demands\n                                     it, and both the guest and libkrun (acting as the Virtual\n                                     Machine Monitor) will attempt to return as many pages as\n                                     possible to the host.\n                             [default: 80% of total RAM]\n        --vram=VRAM          The amount of Video RAM, in MiB, that will reported by userspace in\n                             this microVM.\n                                     The userspace drivers will report this amount as heap size\n                                     to the clients running in the microVM.\n                             [default: 50% of total RAM]\n        --passt-socket=PATH  Instead of starting passt, connect to passt socket at PATH\n    -f, --fex-image=FEX_IMAGE  Adds an erofs file to be mounted as a FEX rootfs.\n                                     May be specified multiple times.\n                                     First the base image, then overlays in order.\n    -m, --merged-rootfs      Use merged rootfs for FEX (experimental)\n    -i, --interactive        Attach to the command's stdin/out after starting it\n    -t, --tty                Allocate a tty for the command\n        --privileged         Run the command as root inside the vm.\n                                 This notably does not allow root access to the host fs.\n    -p, --publish=\u003c[[IP:][HOST_PORT]:]GUEST_PORT[/PROTOCOL]\u003e\n                             Publish a guest’s port, or range of ports, to the host.\n                                 The syntax is similar to podman/docker.\n        --emu=EMU            Which emulator to use for running x86_64 binaries.\n                                      Valid options are \"box\" and \"fex\". If this argument is not\n                                      present, muvm will try to use FEX, falling back to Box if it\n                                      can't be found.\n    -x, --execute-pre=COMMAND  Command to run inside the VM before guest server starts.\n                                     Can be used for e.g. setting up additional mounts.\n                                     Can be specified multiple times.\n    -h, --help               Prints help information\n```\n\n## Running graphical applications\n\nIf [sommelier](https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier) is installed in your system, `muvm` will use it to connect to the Wayland session on the hosts, allowing you to run graphical applications in the microVM.\n\nGPU acceleration is also enabled on systems supporting [DRM native context](https://indico.freedesktop.org/event/2/contributions/53/attachments/76/121/XDC2022_%20virtgpu%20drm%20native%20context.pdf) (freedreno, amdgpu, asahi).\n\n## Running x86/x86_64 on aarch64\n\nIf [FEX-Emu](https://fex-emu.com/) is installed in your system, `muvm` will configure `binfmt_misc` inside the microVM so x86/x86_64 programs can be run transparently on it.\n\n## Motivation\n\nThis tool is mainly intended to enable users to easily run programs designed for 4K-page systems on systems with a different page size, with [Asahi Linux](https://asahilinux.org/) being the prime example of this use case.\n\nOther potential use cases could be software isolation, accessing privileged kernel features (provided by the guest) or local testing.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAsahiLinux%2Fmuvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAsahiLinux%2Fmuvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAsahiLinux%2Fmuvm/lists"}