Asahi Linux relicenses all repositories from MIT to GPLv2-or-later after in-development code was lifted from personal forks or rewritten with LLMs to hide its origin
Progress Report: Linux 7.3
Well here we are again. Linux 7.3 is out and it’s been an eventful few months, so let’s get stuck in to another Asahi Linux progress report!
Upstreaming continues
As always, upstreaming work continues to progress. Aside from the usual patches for low-level SoC blocks, two major drivers made it on to the list this cycle: macaudio and avd. Getting macaudio ready for submission has been a challenge. The audio subsystem on Apple Silicon devices is rather special, and required quite a number of core ALSA changes to properly support it. Apple also uses special variants of speaker and headset amplifiers that were already supported upstream, and these drivers also needed some pretty significant modifications. We have previously discussed a lot of this work at length, and we are finally in a position where we can submit the main driver for review. The driver and Devicetree changes represent a hefty chunk of our total patchset, about 3100 lines.
AVD is a whole different beast. The AVD driver has spent barely 3 months in our downstream tree and is already on the list. This is our shortest turnaround time yet for a major SoC component and bodes well for a transition to upstream-first development some time in the future. This is fantastic news, as the AVD driver and related Devicetree changes are around 13000 lines of code.
Also making an appearance on the list this cycle are initial Devicetrees not only for M4 Pro and Max devices but also M5 thanks to Yureka’s tireless efforts. As usual these initial Devicetrees are barebones and only sufficient to boot the SoC to a TTY, however work is progressing on further enablement. Watch this space!
We have also begun shifting to an upstream-first approach where practical. Changes to the TI USB-PD and SPMI drivers required for new devices, as well as initial support for Thunderbolt, were all developed upstream-first. We are so thrilled to see our focus on upstreaming starting to pay off!
M3 goes GA
Last time, we announced initial support for M3 series machines via the EXPERT flag on the Asahi installer. We are pleased to announce that we received almost no issues from early adopters, so M3 support is now generally available without the EXPERT flag!
We have also made a number of improvements to M3 support, most notably enabling DCP. On top of performance and battery life improvements, this also allows us to enable sleep on M3 series devices and make the area around the notch useable on the MacBooks! Keep an eye out for m1n1 and kernel updates in the coming days.
Crowded House
Last time, we teased support for virtualising SPTM-enabled versions of macOS in m1n1, which enables reverse engineering on M4 series machines. M5 presents a new challenge, as the versions of macOS which support it all require the use of Exclaves.
Exclaves are small applications running in an isolated environment controlled by the Secure Kernel. On M5 series SoCs and above, macOS uses them for sensitive tasks such as drawing the “camera in use” indicator to the screen. XNU communicates with the Secure Kernel and its Exclaves via SPTM, using yet another IPC protocol called Tightbeam. Much as with SPTM, XNU will panic if it cannot find the running Exclaves. This is all starting to look very similar in concept to Arm’s own TrustZone feature.
While some Exclaves can be bypassed by changing some settings on the command line, we predict that this will not always be the case. As such, Sven started looking at how we could fit all of this in to m1n1. First line of investigation, try putting the Secure Kernel and Exclave userspace in another VM next to SPTM and macOS.
Oh, that worked, and we’re now up to spawning three VMs in EL1 under m1n1! Maybe we can start selling m1n1 to companies fleeing VMWare… With that, we can now virtualise and reverse engineer macOS on both M4 and M5 series machines.
Hello Triangle(s)!
While M3 support is now mostly at feature parity with M1 and M2, the very obvious exception to this is the GPU. Apple’s GPU team seems to follow a tick-tock model, and the M3’s GPU was a very significant departure from the models found on M1 and M2 SoCs. We mentioned quite some time ago that the M3 GPU was being reverse engineered by a new group of contributors, however not much has been said since.
At XDC this year, Alyssa Millburn, Anna Maniscalco and TellowKrinkle gave a talk on their progress reverse engineering the M3 GPU. Work has progressed far enough for m1n1 to successfully initialise the GPU and for the team to draw a triangle! Fans of the “Think Different” sections of these progress reports will find the talk edifying; Apple have once again made a number of… interesting choices which will require significant engineering effort to integrate into upstream Mesa. It is well worth a watch if you’re interested in more detail.
A huge thanks goes out to everyone who has made this work possible. More progress is on the way, so stay tuned.
Kept you waiting, huh?
All the way back in January of 2024, we made the mistake of promising Thunderbolt support within the year. It’s a mistake we won’t quickly repeat. We’ve said almost nothing about Thunderbolt in the two years since, which begs the question: where is it?
It’s on the mailing list!
Thunderbolt was originally developed by Apple and Intel, with Intel handling the design and fabrication of the hardware required. Since Intel made these controllers available to anyone who wanted them at a (mostly) reasonable price, no one else bothered to design their own. It is only very recently — largely coinciding with the transfer of the standard to the USB-IF — that companies like AMD have decided to roll their own controllers. Apple is of course no exception.
As part of their push for insourcing most silicon IP, Apple made the choice to design their own Thunderbolt controller before most others. Surprising no one, the controller is of course a Cortex-M3 running RTKit coupled with a bespoke Thunderbolt/USB4 router. There is one of these for each Thunderbolt-enabled USB-C port on all Apple Silicon Macs.
Since Intel supplies every other extant Thunderbolt controller on the market, the Linux kernel’s Thunderbolt subsystem is effectively designed around them. It makes a number of assumptions about the hardware topology of the running machine, including hardware capabilities and access patterns for certain registers and regions of shared memory. Apple’s controller breaks a lot of these assumptions. Great.
The Thunderbolt controller is also oddly coupled to PMGR. The reset line for each controller is asserted or deasserted by setting and clearing a set of bits in the middle of PMGR’s MMIO range. No other hardware block works quite like this, and it took some time to realise that these seemingly random writes to PMGR were not just noise.
Luckily for us, Sven was up to the task of dealing with all this nonsense. It just took slightly longer than expected! While the patchset to enable Thunderbolt was sent upstream first (another massive win for us!), we have also pulled it into our downstream kernel and are now shipping it to users!
But there is a catch. Currently, only USB3, XDomain and Thunderbolt Networking are supported. You can plug in USB devices or connect two Thunderbolt computers together and make them ping each other, but that’s about it. PCIe and DisplayPort tunnelling — required for most Thunderbolt docks — are not supported. Yet. Watch this space.
An enormous amount of gratitude is owed to Sven, who has stuck with this thankless chore for nearly 5 years in between all of his other incredible work.
“The Holy Grail, Doctor Jones”
Playing retail PC games on Asahi Linux is a bit of a pain point, to say the least. The software stack required to enable this is incredibly complex. We need to translate x86/amd64 binaries to arm64, and do so fast enough for low-latency gaming. In most cases, we also need to deal with the Windows API. On top of that, almost all games bake in an assumed 4 KiB memory page size to enable certain performance optimisation. Over the past few years, most of these problems have been solved:
- FEX has improved leaps and bounds. The performance and reliability of binary translation is hardly a consideration in most cases now;
- WINE is also fantastic now. Support for ARM64EC is mature and reliable, meaning that FEX now only has to translate the game binaries rather than WINE’s entire Windows API implementation; and
- muvm allows us to spin up a thin VM with DRM Native Context to present a 4 KiB memory page size to x86/amd64 applications.
When muvm was first developed, it was with the assumption that DRM Native Context would enable near-native GPU performance from inside the VM. Unfortunately, this assumption did not hold. The muvm performance penalty is quite significant for a number of reasons, about 20% depending on the workload. Engineering around the limitations inherent to using a VM also introduces issues; muvm cannot use Wayland, has slow I/O performance, and struggles with certain types of input devices.
This is one area where macOS has us completely licked. While the performance gap between FEX and Rosetta has narrowed, XNU allows userspace processes to map themselves at any page granularity, so all Rosetta needs to do is tell XNU to map 4 KiB pages for its child processes. Linux does not have this flexibility. All pages must be mapped at the same granularity as the kernel. While we did tease Windows games working outside of muvm last year, this relied on ugly hacks inside FEX which have since been removed in the interests of maintainability and translation correctness. Bummer. Even so, compatibility was hit-and-miss, with a lot of (mostly older) software still refusing to work. Double bummer.
Android is currently going through a transition from 4 KiB pages to 16 KiB pages for a variety of reasons. Google Play now requires apps to be built for 16 KiB systems, and any application updates which do not test successfully on such systems will not be approved for publication on the Play Store. What about applications which are no longer updated though? What about sideloaded enterprise slop apps?
Google engineers Kalesh Singh and Frederick Mayle gave a very interesting talk at Linux Plumbers Conference this year about exactly this. Their solution is simple: just fix Linux so that userspace can map 4 KiB pages!
Their addition to the Android kernel is called P3S, or Per Process Page Size. On ARM64 systems, pagetable granularity is controlled by bits set in the Translation Control Registers (TCR). P3S works by tracking the granularity of each process’s pagetables, and writing the appropriate bits to the TCR whenever a process with a different pagetable size is switched to. Because this is a single register write, and because this is a no-op for “native” page size processes, the performance penalty is effectively zero!
While this effort is primarily targeted at Android, the patchset mostly rebases cleanly on top of mainline Linux. What happens if we rebase it on top of our Asahi tree (and fix some bugs)? As it turns out:
Star Wars Battlefront (2004) running outside of muvm, with WineD3D
Okay okay, Battlefront is a very simple Direct3D 9.0 game from 22 years ago. Not exactly an impressive demo, right? Well what about:
Wolfenstein: The New Order (2014) running outside of muvm
Wolfenstein: The New Order is an extremely well-optimised OpenGL title, and being 64-bit uses WINE’s ARM64EC pathways to massively reduce the amount of work FEX has to do. Again, not exactly an impressive demo if we’re judging based on technical difficulty.
Let’s find something else. Something… worse. Something 32-bit so that FEX and WINE have to work harder. Something that will exercise DXVK too. Something that is so comically buggy and poorly optimised that it doesn’t even work properly on real Windows machines, and relies on community patches and command line switches to start at all on modern computers:
Grand Theft Auto IV (2008) running outside of muvm, with DXVK
That’s more like it! But we can do even worse. We can even run… Bethesda games!
Fallout: New Vegas (2010) running outside of muvm, with DXVK
Performance is of course still patchy. Both Battlefront and Wolfenstein run essentially flawlessly, with the latter hitting 144+ FPS on an M2 Max Mac Studio. GTA IV on the other hand is… not fantastic. Performance is still massively improved over using muvm, and eliminating the use of the VM in general should also eliminate a few classes of bugs. Debugging the GPU driver should also be much easier with this approach.
As always there is a catch, and unfortunately it’s a big one. The current solution is hard-coded for 16 KiB hosts and 4 KiB processes on those hosts. This obviously satisfies Google’s commercial requirements, but adding pagesize-specific kludges to the kernel’s core memory management code is not appropriate upstream. We are unsure if Google intends to generalise this approach and upstream it, or if this is going to stay an Android-only patchset. As such, we do not want to ship this in our downstream tree and have folks become reliant on it when there is this level of uncertainty.
It also requires userspace integration. P3S works by checking the binary metadata for its sections’ page alignments. This works for Google’s use case, as P3S is intended as a fallback mechanism for applications aligned to 4 KiB pages. Modern arm64 binaries are aligned to 64 KiB however, as this guarantees compatibility with systems of all native pagesizes. Thus, a shim is required to force P3S on. The shim triggers P3S, and any child processes will inherit its 4 KiB pagesize. It is not worth spending the effort on implementing this until we have some certainty around what Google intends to do with this patchset.
We have reached out to Google with some questions, and we hope to have more to say soon.
Mics, but faster
Our custom beamformer for the microphone array found in the MacBooks is written in Rust. Rust’s scientific computing ecosystem is not as mature as C++’s, which is a bit of a problem as beamforming requires realtime FFT and very heavy matrix operations to be done on buffers filled with audio samples. Mature scientific computing libraries have hand-optimised code, often using intrinsics tied to the target ISA. We were not doing this however, and relied on the compiler autovectorising code where it could to achieve our performance targets.
This fell apart when we eliminated the FFT-based analytic transform, replacing it with an implementation based on infinite impulse response (IIR) filters. This should be faster, however the compiler was failing to autovectorise the new implementation. Linkmauve kindly stepped in and added SIMD-optimised code for both arm64 and amd64. This, coupled with other performance optimisations courtesy of Frédéric Bour has resulted in Triforce becoming almost twice as fast, all while using less CPU time!
Keeping up
Fedora Linux 45 was released on 3 November, and we shipped Fedora Asahi Remix on the same day. This is the first time we have been able to get a new version of Fedora Asahi Remix out on the same day as upstream!
Learning from history
We take great pride in our work, and have always done all of our development in the open. We communicate with our users, our followers and our financial sponsors as transparently as is humanly possible. Our finances are in the open, our development branches are in the open, and we report our progress regularly and candidly in the open. Our IRC channels and Matrix rooms are safe spaces, open to anyone with even a passing interest in Asahi Linux or hacking on Apple Silicon.
We do all of this because we firmly believe in Free and Open Source Software, not just as a means to an end but as the end in and of itself. The modern digital world is only possible because of the Free Software movement, and it is more important now than it ever has been that we do all we can to protect the Free Software ecosystem and uphold the ideals upon which it is built.
It may surprise some to learn that WINE was originally made available under the MIT licence. The 90s and 2000s were a very different time in the Free Software ecosystem, and permissively licenced projects were viewed by tech companies as free real estate to pilfer and exploit. WINE was not immune to this, and many monetised proprietary forks of WINE were marketed and sold by various bad actors. The WINE development team grew increasingly concerned that these proprietary forks, while well within their rights to exist, would eventually cause so much fragmentation in the ecosystem that WINE itself would become unviable. In 2002, WINE was relicenced under the LGPL to prevent further proprietary forks from being created, and to encourage direct upstream contribution.
When Asahi Linux was first started, it was with the intent that we develop a Free Software ecosystem for the Apple Silicon platform. To facilitate and encourage the participation of our friends at the BSDs and other Free Software operating systems, we endeavoured to licence as much of our code as possible under the permissive MIT licence.
Unfortunately, this is no longer viable. The malicious practices of the 90s and 2000s have reared their ugly heads once again, this time driven in large part by both the insatiable appetite of frontier AI labs for high-quality training data, and militant animosity toward the Free Software community.
Some time ago, we were made aware of multiple attempts to exploit our permissive licensing to hijack our work, with a direct view to replacing the project and aggressively monetising Linux on Apple Silicon. In some extreme cases, in-development feature code was being lifted straight out of our personal forks and published without attribution or lazily rewritten with LLM assistance to obfuscate its origin. The MIT licence explicitly allows this, and has no carveouts to protect against bad faith actors.
As such, we made the difficult decision to begin the process of transitioning all of our repositories to the GNU General Public License version 2 or later. Going forward all Asahi Linux code will be licenced under strong copyleft licences only. Those who do not learn from history are doomed to repeat it.
Until next time!
As always, we would like to sincerely thank our supporters on OpenCollective and GitHub Sponsors. It is only through your generous backing that we are able to dedicate the time and resources to continuing our work reverse engineering the platform and bringing to it a world-class, polished, and battle-tested Linux desktop experience. You mean the world to us.
James Calligeros · 2026-11-07
https://asahilinux.org/2026/11/progress-report-7-3/Reposted. Will be removed on request. All rights belong to the original author.
More from this batch
Alex Bores: Congress should ban AI recursive self-improvement this year, citing METR’s Anthropic assessment
Bores argues that OpenAI (March 2028) and Anthropic staff (2027) both expect to automate AI research, that METR’s report suggests they are r…
OpenAI’s Tibo: no ChatGPT Pro plan has a 5-hour limit; Pro 100/200/500 get 10x/20x/50x Plus usage
Codex lead Thibault Sottiaux clarified the current multipliers (Pro 500 also gets ultrafast) and then asked whether a Pro 50 tier would make…
Robocurve: tampering with a robot’s camera feed misleads every frontier model tested into harmful actions
Robocurve defines perceptual attacks as blurring or AI-doctoring a robot’s video input, then asking for a task the model would normally refu…
字节 Seed 开放 Cola2 权重:先在连续潜空间里按语义片段「想」,再解码成文字的语言模型
改进什么:常规大模型逐 token 生成。Cola2 把文本动态切成语义片段,每段压成一个连续潜变量,由约 4B 参数的块因果 Diffusion Transformer 用 Flow Matching 生成潜变量块,再由带潜变量反馈的 token 解码器写出文字;推理时把已提交…
Apple 官方 Xcode 插件进入 Claude Code 插件目录:构建、测试、渲染 SwiftUI 预览、操控模拟器和真机
Anthropic 官方插件仓库的 PR #6338 于 11 月 6 日合并,作者栏是 Apple Inc.。按插件说明和社区整理,Claude Code 装上后可以构建、运行和测试 scheme,渲染 SwiftUI 预览,操控模拟器和真机,读构建日志和诊断,并搜索 Appl…
JPMorgan Chase CISO Pat Opet: security teams should evaluate abstracting company services from the internet
Opet asks why an unauthenticated, anonymous attacker’s agent should be allowed to interact with your systems at all, and urges teams to cons…
Zed:Atom 和 Tree-sitter 原班人马做的高性能多人协作编辑器,内置 AI 代理面板并支持 ACP 外接代理
Rust 写成,今日约 +1114,约 ★94376,是本期 GitHub 日榜上增量最大的开发工具。它本身不是新项目,但下面的 cc-remote 等工具都把 Zed 当作 ACP(Agent Client Protocol)客户端来用。许可证在抓取数据里未标明。
cc-remote:Claude Code 的模型跑在远端服务器,读写文件和执行命令留在你本机
基于 claude-agent-acp 的一处改动:只要服务器上装好并登录 claude,通过普通 ssh 连接,所有文件读写、编辑和 shell 命令都在本地会话目录里执行,本机不需要装 claude;Zed 等 ACP 客户端都能用。约 ★315,日均约 +45,TypeSc…
PhoneUse Local:给 AI 代理一台 USB 连接的真 iPhone,带网页控制台、实时画面、REST API 和 MCP
MIT 开源,Python,约 ★110。在 Mac 上用自然语言指挥 iPhone 完成地图搜索、外卖下单等操作,并能通过 MCP 接入代理。对需要做移动端 E2E 测试或 RPA 的团队是一个可本地部署的起点,但真机操作涉及账号和支付,接入前要设好权限边界。
Mnemos:让代理用自己的话记住你、记住做过的决定和犯过的错的 MCP 记忆服务,数据存在本机
Apache-2.0,Python,约 ★139。每次会话开始先读回记忆;记忆不用就会淡化,记忆之间有链接。作者展示的是帮他开发这个项目的 Claude 代理自己积累的 2226 条记忆。适合想给内部代理加「跨会话连续性」又不想把记忆交给云端的人。
NInfer:面向 RTX 5090 和 DGX Spark 的原生 C++/CUDA 推理引擎,带 OpenAI / Anthropic 兼容接口
支持 Qwen3.6-27B、Qwen3.6-35B-A3B、Qwen3.8-Flash-Next 和 GLM-5.3-Flash 等指定模型,提供 CUDA Graph 解码、MTP/DFlash 投机解码、共享前缀缓存,以及两台 DGX Spark 的张量并行。约 ★3290…
QwenPU:把一个 32 位 RISC-V CPU 加向量单元「编译」进 Qwen3.5-4B 的权重里,再让它跑 Karpathy 的 stories260K
新增的权重全部由编译器算出、没有一个是训练出来的,于是一个小神经网络就作为程序在大模型自己的前向计算里运行。作者说结果是精确的,但检查点有 26.7GB,整体加载要 40GB 以上显卡。约 ★128,许可证标记为其他许可。纯研究玩具,但对理解「Transformer 能当通用计算…