My LFX Mentorship Experience: Improve Windows Support for Lima
From a self-taught Go developer to contributing to Lima’s journey toward better Windows support
For the last three months, I have worked on Lima as part of the LFX Mentorship Program (Term2, 2026). It has been an invaluable experience! In this post, I would like to share what I worked on, what I achieved and what I learned from this program.
Project Overview
- Project Title: Improve Windows support (host and guest)
- Duration: June 8, 2026–August 31, 2026 (approx. 480 hours)
- Mentors:
- Akihiro Suda(@AkihiroSuda)
- Ansuman Sahoo(@unsuman)
What is Lima?
Lima (LInux MAchines) is a tool that helps to run virtual machines on any hosts for running containers and AI agents.
Note: Please refer to the official documentation for the technical details of Lima. This post focuses on my work as an LFX mentee.
My LFX Mentorship Project
Historically, Lima was a macOS-first tool. Over time it grew Linux, NetBSD, and Windows hosts, and Linux, macOS, and FreeBSD guests. However, two Windows related holes remained:
- Lima did not support Windows as a guest
- Lima could run on Windows hosts, but there was still room for improvement in terms of stability and user experience
Thus, the overarching goal of this mentorship project was to expand and improve Lima’s support for Windows (Issue: lima-vm/lima#4907).
This broad goal was broken down into the following specific goals.
- Support for Windows guests · Issue #4852 · lima-vm/lima — Enable Lima to create and run Windows virtual machines. [Primary]
- Windows: drop dependency on `cygpath.exe`, MSYS2, Git for Windows, etc. · Issue #4819 · lima-vm/lima — Improve the Windows host experience by removing Lima’s Windows-specific dependencies. (e.g.
cygpath.exe) [Primary] - Windows: autoappend `%PROGRAMFILES%\QEMU` etc. to `%PATH%` · Issue #4820 · lima-vm/lima — Reduce the manual setup required for users to run Lima on Windows hosts. [Primary]
- Support for Windows hosts, without depending on QEMU · Issue #4961 · lima-vm/lima — Develop a HCS driver to provide native virtualization on Windows hosts. [Secondary]
So, let’s take a closer look at each of these goals and what I did to address them.
What I did throughout
Note: If you are more interested in looking at the actual PRs and code rather than reading descriptions and my thoughs, Links section at the end of this post might be helpful.
Support for Windows guests
When users launch a Windows guest VM through Lima, the following three steps happen in Lima internally.
- The Windows OS installation media is fetched — Lima obtains a Windows installer ISO either by downloading from a given URL in yaml file or by using a local ISO file designated by the user.
- Boot the VM — Lima launches QEMU with a set of options tailored for Windows guests, and then boot the VM from ISO obtained in the previous step.
- Proceed the OS installation process automatically — Lima enables the Windows setup process, which usually requires user interaction, to proceed automatically with
autounattend.xmland custom PowerShell scripts.
Based on the three steps above, I implemented the necessary Lima functionality to launch Windows guest VMs for Windows Server 2025, Windows 11(x86–64 architecture), and Windows 11 (ARM64 architecture) respectively.
💡Learning points:
I learned how Lima works internally when launching a VM, and more importantly, how to turn an initial implementation idea (like PoC) into a feature that fits into a large open source project and its exisiting architecture.
As part of Windows guest support, I implemented Trusted Platform Module (TPM) emulation feature on Lima with QEMU driver. (TPM is a microchip which secures a computer.) While supporting TPM is a requirement for computers running Windows 11 OS, Linux also gains security benefits from it.
For the implementation, I learned a lot from Arnav Sharma (@Shardz4) ‘s work.
💡Learning points:
Through this PR, I gained a much better understanding of what TPM is and how QEMU efficiently emulates hardware, including TPM.
Removing Lima’s Windows-specific dependencies.
Previously, some path conversion depended on external tools such as cygpath.exe.
limactl createfailed if a user uses a native Windows OpenSSH, because Lima requires cygpath for a path conversion, but the tool is only contained in Cygwin-based SSH (Git for Windows or MSYS2).
To prevent the issue, Lima codebase has been modified in PR #5205 so that it detects where sshcomes from and call cygpath only if ssh is Cygwin-based.
💡Learning points:
Actually, this derives from another PR (#5196), where most of the work was done by Jan Dubois (@jandubois). So, working on this taught me a lot how to collaborate with other contributors — not just about getting my code reviewed but also about building and improving codes together.
Making Windows Host setup easier
Previously, Windows host users need to append paths of QEMU and msys64 to %PATH%.
So I made Lima append those common installation paths automatically to %PATH% , eliminating the need for users to configure it manually (PR #5348).
💡Learning points:
This PR is relatively simple, but it helped me to learn how to manipulate environmental variables in Go and how to write code building exclusively on a certain OS.
Implement HCS driver - a native Windows driver
The primary goal of this mentorship mainly focuses on Windows guest support, but enhancing Windows host support by introducing a driver which does not rely on a third-party tool such as QEMU is also important part. I used the final month of the mentorship to work on this.
Get Mie Tokunaga’s stories in your inbox
Join Medium for free to get updates from this writer.
Specifically, I worked on introducing Host Computer System(HCS) driver. HCS is a lower-level Windows APIs used by Hyper-V and HCSShim. It is suitable as a way of supporting Windows hosts without depending on QEMU, because it can be used with Windows Home edition (while Hyper-V requires Windows Pro edition) and provides more flexibility in VM configuration than WSL2.
After a lot of work, I was finally able to implement the HCS driver and raise a PR #5449 just two days before the final presentation! Now, when you run limactl start on a Windows host, the HCS driver converts a qcow2 image to VHDX format, configures the VM network using the Host Compute Network APIs, and creates the VM with the HCS APIs.
💡Learning points:
Through this PR, I learned not only technical points but also a few mindsets that would be important when contributing to OSS.
1. Balancing independent investigation with asking for help is a necessary skill in OSS contribution.
— Initially, I hesitated to ask questions as I concered that my question was too basic or I just lacked of investigation. However, I realized that the goal is neither to pretend myself as a prospective contributor nor to solve everything alone.Actually, when I asked for help after stucking hours, mentors could provide a sample code and made me move forward within an hour.
2. Do not need to stick to understand entire codebase before starting.
— I learned that trying to understand the entire codebase before starting implementation can be counterproductive. It is often more effective to focus on the areas relevant to the task and start implementing while learning along the way.
What’s next
Although the mentorship has ended, I would like to keep contributing to Lima beyond the mentorship!
In terms of expanding Lima’s Windows support, I am particularly interested in trying the following areas:
- Support filesystem mount for Windows guest by Virtio-fs and/or Reverse SSHFS
- Implement guest-agent for Windows guest
- Remove the dependency on
qemu-imgfor HCS driver - Research and implement filesystem mount by 9p for HCS driver
The mentorship gave me the opportunity to get deeply involved in Lima and understand its codebase. I would like to continue involiving Lima and other OSS community based on this experience.
Gratitude
I am truly grateful to:
- My mentors (Akihiro Suda and Ansuman Sahoo) — for their patience, encouragement, and guidance throughout this program
- Lima community especially;
- Jan Dubois, who is not my official mentor but greately helped me with his guidance, especially in Goal2
- Arnav Sharma — for sharing his work and insights, which I found particularly helpful when working on Goal1-TPM emulaction - CNCF and Linux Foundation — for the LFX Mentorship program
Links
Lima
My contributions during the mentorship period
- Mentorship Proposal — Initial design of launching Windows Server 2025 guest VM using QEMU
- PR #5138 — Support Windows server 2025 guest
- PR #5148 — Implement TPM emulation
- PR #5164 — Support Windows 11 guest (x86–64 architecture)
- PR #5185 — Support Windows 11 guest (ARM64 architecture)
- PR #5205 — Remove Lima’s Windows-specific dependencies
- PR #5244 — Improve Windows 11 guest performance
- PR #5263 — Support
provisionfeature for Windows guest - PR #5268 — Update documents about Windows guest support
- PR #5294 — Address an issue regarding Windows 11 VM
- PR #5348 — Reduce the manual setup required for Windows host users
- PR #5449 — Implement HCS driver
Written as part of my LFX Mentorship with CNCF Lima. All opinions are my own.






