QEMU tools cannot run in the app process on iOS: a process may load QEMU
only once and qemu-img calls exit(). So disk snapshots of a stopped VM,
reclaiming space, compression, resizing and conversion on import were
macOS-only.
iOS 26 brings ExtensionKit, so qemu-img now runs in an ExtensionKit
extension (iOSHelper, and iOSHelper-SE for UTM SE since an extension's
bundle identifier must be prefixed by its host's). The helper speaks the
same QEMUHelperProtocol as the macOS XPC helper but loads the tool into
its own process, one tool per process. UTMProcess accepts an injected
connection so the remote path is shared with macOS, including file
access through bookmarks, whose implicit security scope grants the
resolving process access. UTMHelperProcess launches the helper and,
because the system hands a process that is still exiting to a launch
that comes too soon, tears it down with a handshake on the interruption
callback and runs helpers one at a time.
UTMQemuImage now reads the tool's output until it ends instead of
racing the exit message, resumes its continuations off the XPC reply
queue (a call made from that queue blocks in NSXPC), and stops the
process explicitly since the connection's exported object kept it from
ever being deallocated on macOS. The last stderr line becomes the error
text when the tool gives none.
Assisted-by: Claude:claude-fable-5-1
- virglrenderer uses shmem for texture import/export so we need App Group for both iOS and macOS
- Add QEMURenderServer for new process model rendering (both Venus and Neptune)
- macOS: add DXMT and D3DMetal-Native backends
- We require 8G hostmem for Neptune but iOS currently fails > 256M
* Update README translations for Korean
* Add QEMUHelper translations for Korean
* Rewrite Platform translations for Korean
Based off Japanese translation file
I decided to rewrite the translation file instead of update existing one,
because the existing one is pretty bit old and it looks like nobody is
maintaining Korean translations for now.
Japanese translations are well organized and looks almost every strings
are added so I used that as base.
* Add platform-specific translations for Korean
* qemu: more verbose error when ISV=0
* github: update to Xcode 16.2
* Revert "qemu: more verbose error when ISV=0"
This reverts commit 45385bd51e.
---------
Co-authored-by: osy <[email protected]>
QEMU can refuse to react to SIGTERM due to a deadlock bug or for any other
reason. If it does not gracefully quit in 1 second, then we send SIGKILL.
Fixes#5769
When under memory pressure, XNU can decide to terminate the XPC helper
unless there is a pending response. We force it to have a pending response
by providing a NOP callback which will only be triggered after QEMU
terminates.
Fixes#5489
When we use AF_UNIX, the path has a maximum length of 104 characters. In the
past, we dependend on buggy behaviour that truncates the path length and both
QEMU and SPICE used the truncated path as the destination. This can result in
collisions between different VMs as well as other issues.
Now, we change the current working directory to where the AF_UNIX socket file
will reside and use relative addresses for both processes.
1. If a drive is external, assume it is also read-only.
2. Internal drives can now be marked read-only (QEMU)
3. Fix read-only bookmarks not being created in the helper.
Fixes#4838
This is my first localization pass, with little proofreading and only brief testing. Seems mostly fine, but additional work is needed to fix missing localized strings.