“We truly believe T2 MacBooks can make the best Linux laptops.”

None

“KAIT2EN is meant to disappear. Every module and fix that gets upstreamed leaves the repo.”

None

“There is a distinct difference in making broken things work and fixing things.”

None
Touch Bar and keyboard of a MacBook Pro running KAIT2EN Fedora

You Run It, We Fix It.

We bring Linux to your T2 Mac with instant driver fixes, straight from the developers.

Vanilla Fedora. DKMS modules. Aimed upstream.

Features & status

What works today, and what is on its way into mainline Linux.

Status
Upstream
FeatureStatusUpstreamUpdated
Automatic brightness (ALS)Part of T2 TrueTone. Follows the ambient light sensor with the macOS curve, a 20 % dead band, slow fades and learning from manual changes. Replaces GNOME automatic brightness.KAIT2EN Fedora · t2-truetone / ambient light sensor · @deqrocksAvailableDownstream only
BCM4377 Bluetooth probe with another controller presentWith another controller on hci0, a USB dongle for example, probe returned the new index and the PCI core took it as success without the unregister action. The controller then stayed registered after unbind. hci_bcm4377 now treats only negative returns as errors. Reviewed by Sven Peter.Linux kernel · Bluetooth / hci_bcm4377 · v1 · @deqrocksAvailable
Display brightness after screen lock and resume in iGPU modeOn dual GPU T2 MacBook Pros gmux resets the brightness when i915 powers the panel off, so the display came back at 80% after screen lock, login and resume. i915 now writes the set level back once the panel is on. KAIT2EN ships it in a patched i915 module until it is merged.Linux kernel · DRM / i915 · v1 · @deqrocksAvailable
True Tone and evening modeT2 TrueTone adapts the display white to the color of the ambient light through the panel's gamma LUT, with a strength slider, and warms it on a daily schedule. Replaces GNOME Night Light. Off until turned on in the app.KAIT2EN Fedora · t2-truetone / ambient light sensor · @deqrocksAvailableDownstream only
BCM4377 Bluetooth cold resume after S3The controller loses its firmware in S3. hci_bcm4377 now probes it again after such a resume and skips the ring teardown messages that each waited a second.Linux kernel · Bluetooth / hci_bcm4377 · v1 · @deqrocksAvailable
BCM4377 flowring deleteThe firmware reports queued packets only after the host deletes a flowring. brcmfmac waited up to 100 ms per flowring first, on every disconnect and suspend, and miscounted them. It now deletes right away.Linux kernel · Wi-Fi / brcmfmac · v1 · @deqrocksAvailable
Wi-Fi cold resume after S3The chip loses its firmware in S3 but its registers can read as running, so brcmfmac took the hot resume path and commands timed out. It now reloads the firmware when platform firmware handled the resume and Wake-on-WLAN is off. The suspend service keeps the drivers loaded, so sleep starts 10 to 15 s sooner on BCM4377. The BCM4377 D3 acknowledgement uses patch 5 of Michael Reeves' BCM4388 series, carried until merged: https://lore.kernel.org/all/20260925-brcm4388-submit-v1-5-b5cbc2cde2fb@gmail.com/Linux kernel · Wi-Fi / brcmfmac · v1 · @deqrocksAvailable
AWDL on BCM4364 and BCM4377brcmfmac creates the AWDL interface, passes its firmware events to user space and carries data over awdl0. The t2-drop service drives it as macOS does. Patch 1 is dropped for the same fix in Michael Reeves' BCM4388 series, v2 follows on top of it.Linux kernel · Wi-Fi / brcmfmac · v1 · @deqrocksAvailable
Bluetooth ACL priority on Broadcom controllersWith 2.4 GHz Wi-Fi traffic the controller held Bluetooth packets for up to 200 ms and A2DP dropped out. hci_bcm and hci_bcm4377 set high priority for every link on connect, as the Android Broadcom vendor library does.Linux kernel · Bluetooth / btbcm · v2 · @deqrocksAvailable
Bluetooth LE scanning on Broadcom controllersThe controllers set extra bits in the LE advertising report type and the kernel dropped those reports. Controller duplicate filtering hid changed advertisements for up to 11 s. Both drivers turn the filter off, and btbcm clears the extra bits until Fedora ships commit 88397423671f from bluetooth-next. A Mac opening AirDrop shows up within a second.Linux kernel · Bluetooth / btbcm · v2 · @deqrocksAvailable
5K display on iMac20,1 and iMac20,2Drives the internal 5K panel at full resolution by genlocking its two display streams, including resolution changes. Closes drm/amd#4455 and #4895.Linux kernel · DRM / amdgpu · v1 · @byteAvailable
BCM4364 ND offload offWith ND offload on, IPv6 downloads dropped to about 55 Mbit/s. brcmfmac keeps ARP and ND offload off on this chip while awake. Closes t2linux/kernel#34 and T2-Debian-and-Ubuntu-Kernel#227.Linux kernel · Wi-Fi / brcmfmac · v1 · @deqrocksAvailable
BCM4364 TX beamforming offWith TX beamforming the BCM4364 firmware sends one stream. Uplink rises from about 350 to 620 Mbit/s with beamforming off.Linux kernel · Wi-Fi / brcmfmac · v1 · @deqrocksAvailable
BCM4364 hotspot authenticationThe BCM4364 firmware handshake for its access point stalls and clients drop after about 8 s. brcmfmac leaves the handshake to wpa_supplicant or hostapd.Linux kernel · Wi-Fi / brcmfmac · v1 · @deqrocksAvailable
Wi-Fi power save timeoutbrcmfmac used a 2 s power save timeout when NetworkManager set none. It now uses 200 ms, the macOS value on BCM4377. Idle power on MacBookPro15,1 with Wi-Fi connected dropped from 11.3 W to 9.2 W.Linux kernel · Wi-Fi / brcmfmac · v1 · @deqrocksAvailable
T2 AirShare (AirDrop and Quick Share)AirDrop with Apple devices in both directions while the Mac stays on its Wi-Fi network, and Quick Share with Android phones over Bluetooth and a Mac hotspot. One send window, one accept notification and one trusted device list.KAIT2EN Fedora · t2-airshare · @deqrocksAvailableDownstream only
Butterfly keyboard debounceOptional filter for double-registered keystrokes, enabled with t2hid.debounce_ms=40.KAIT2EN Fedora · t2hid · @deqrocksAvailableDownstream only
Navi14 memory clock levels on MacBookPro16,1Apple's pptable lists memory clock levels the VBIOS did not train. Switching to one hung the SMU and caused a CATERR at boot or under load. amdgpu now uses the trained levels from the VBIOS.Linux kernel · DRM / amdgpu · v1 · @deqrocksAvailable
Low-latency video encoding (T2 Sidecar encoder)The T2 Sidecar encoder as a V4L2 H.264/HEVC encoder, usable through ffmpeg and the t2-sidecar Sunshine build https://github.com/deqrocks/Sunshine.KAIT2EN Fedora · t2bce_sidecar · @deqrocksAvailableDownstream only
Panel Self Refresh on T2 eDP panelsEnables PSR with the sink-specific DPCD setup. Lowers idle display power and allows package C-states up to PC10. KAIT2EN ships it in a patched i915 module until it is merged.Linux kernel · DRM / i915 · v4 · @4f1sh3rAvailable
SMC power limit stepsThe SMC requests lower CPU and GPU limits in steps. Linux ignored them until PROCHOT dropped the CPU to 800 MHz. t2smc exposes the steps and T2 Zone Power applies them as macOS does. An amdgpu patch lets the Navi GPUs go down to 40 % of TDP.KAIT2EN Fedora · t2smc / t2-zone-power · @deqrocksAvailableDownstream only
Touch Bar daemonOptional daemon with media and F-key rows, gestures for volume and brightness, the Touch ID prompt and media track display. Stays dark until touched.KAIT2EN Fedora · t2bdrm / t2touchbar · @deqrocksAvailableDownstream only
Hybrid graphics on MacBookPro16,1 and 16,4Runtime GPU switching, dGPU power management and suspend and resume.KAIT2EN Fedora · t2gmux / amdgpu · @byte, @deqrocksAvailableDownstream only
Force Click trackpad controlsAdjustable click and Force Click pressure, Taptic Engine feedback and configurable Force Click actions.KAIT2EN Fedora · Input / Force Touch · @deqrocksAvailableDownstream only
Audio DSPSpeaker and microphone DSP graphs per model, derived from the macOS processing.KAIT2EN Fedora · t2bce_audio · @deqrocksAvailableDownstream only
Hardware video encoding (T2 AVE)HEVC encoding on the T2 Apple Video Encoder, usable through ffmpeg and the t2-ave HandBrake build https://github.com/deqrocks/HandBrake.KAIT2EN Fedora · t2bce_ave · @deqrocksAvailableDownstream only
Touch ID loginFingers enrolled under macOS unlock login and sudo through stock fprintd. Enrollment on Linux is open. Target is an upstream libfprint driver.KAIT2EN Fedora · t2-touchid / BiometricKit · @deqrocksAvailableDownstream only
hid-apple ignores the T2 trackpadTrackpad and keyboard share one VID/PID. Uses the existing APPLE_IGNORE_MOUSE quirk.Linux kernel · HID / Input · v1 · @AdityaGarg8AvailableMerged
Thunderbolt device linksMoves Apple device-link discovery into the Thunderbolt PCI code and adds Titan Ridge and Ice Lake support. Expected in kernel 7.4.Linux kernel · Thunderbolt · v9 · @byte, @deqrocksAvailableMerged
CPU restore after suspendMoves secondary CPU hotplug outside the CPU PM notifier window. Removes multi-second delays per CPU during resume.Linux kernel · ACPI / CPU hotplug · v1 · @deqrocksAvailable
Hybrid graphics on MacBookPro15,1Runtime GPU switching and dGPU power management. The apple-gmux, amdgpu and ALSA HDA changes are submitted upstream.KAIT2EN Fedora · t2gmux / amdgpu · v1 · @byte, @deqrocksAvailable
Touch Bar runtime PM in suspend and resumeRemoves nested runtime PM references in the HID callbacks that stalled Touch Bar suspend and resume.Linux kernel · HID / Touch Bar · v1 · @deqrocksAvailableMerged
Package C-statesDeep package C-states at idle for lower power draw.KAIT2EN Fedora · Power management · @deqrocksAvailableDownstream only
Display brightness across rebootsGives the backlight a stable path ID so the brightness setting persists.systemd · udev · @deqrocksAvailableMerged
Keyboard backlight after re-enumerationRestores the keyboard backlight after the keyboard re-enumerates.upower · @deqrocksAvailableMerged
Volume slider on DSP sinksFixes crackling while dragging the Quick Settings volume slider on PipeWire DSP sinks.GNOME Shell · Quick Settings · @deqrocksAvailableMerged
Fn double press switches the Touch Bar layerLinux kernel · HID / Touch Bar · v5 · @AdityaGarg8, @deqrocksAvailableMerged
dGPU after resume on MacBookPro15,1Fixes the SMU being unresponsive after resume.Linux kernel · PCI / amdgpu · v1 · @FrederickGeek8, @deqrocksAvailableMerged
Keyboard backlight after resumeRestores the butterfly keyboard backlight level after resume and uses the Magic Keyboard LED naming.Linux kernel · HID / Input · v1 · @deqrocksAvailableMerged
Keyboard backlight brightness levelsParses the backlight reports with the correct endianness.Linux kernel · HID / Input · v1 · @deqrocksAvailableMerged

Concept

This is not easy to explain#

This one is a bit of a read, but without the context the rest is hard to follow. Skip it if you want.

The Linux mainline kernel still lacks drivers for certain T2 hardware components. Writing them is hard because Apple hardware is "thought different". There are not many developers who still deal with T1/T2 hardware on Linux. Many moved on to Apple Silicon for understandable reasons.

Usually someone writes a driver, a community tests it and it gets submitted to upstream maintainers. After that the driver would live in the Linux kernel. And that means you can just install vanilla Fedora, Ubuntu, Arch or whatever and the kernel will support your hardware natively.

Some T2 drivers indeed went that way. Some are still missing. And these are the most complex drivers. Their authors knew the code and its architecture still had issues, and unconventional hardware needs a lot of explaining upstream. So they tried and failed, or never tried.

Going upstream = moving against the flow#

Traditional distros like CachyOS or T2Linux work around this by shipping patched kernels. The patches are not created by the distro people. T2Linux collects the code we talked earlier about and maintains it in a GitHub repo. Also KAIT2EN provides some patches to that repo. Like t2bce and audio drivers. Then these patches are compiled against the current kernel. This means they integrate the drivers into the latest release. Distros like CachyOS or Omarchy make use of the same T2Linux patches and also integrate them in their kernels.

Should be all good, right? You just choose your favorite distro and done. The problem is that most devs stopped upstreaming their patches to the mainline Linux kernel. Instead they submit their patches to the T2Linux patches repo.

This has some downsides.

  • T2Linux would need to maintain the patches forever.
  • You will lose the safety of the standard distribution kernel.
  • Kernel updates are delayed.
  • You are not talking to the actual developer when you file an issue.
  • When T2Linux stops maintaining, T2 Macs will stop working on Linux.

As the provider of some of these drivers, we know that getting updates into external distros takes time. Third-party maintainers lack T2-specific context, which makes regressions more likely, and breaking changes are hard to communicate down the chain.

With KAIT2EN we jump over the middlemen. It is a unified platform. We take care that it works on your Mac. So we know your hardware, your command line, your drivers, your systemd units, your udev rules, etc. Users can test, talk to devs directly and we can submit to upstream. Third-party maintainers can choose to package our code or just profit from upstreamed patches. Devs can directly PR to us.

Stream me up, Linus!#

So KAIT2EN is specialized exclusively for T2 Macs. We deliver T2 drivers and dedicated T2 utilities. For you this is like cherry-picking: standard upstream kernels directly from Fedora, combined with immediate hardware fixes straight from us. Yummy!

Out-of-tree modules let us test and iterate without kernel recompilations, so fixes roll out in minutes. Literally. The goal is still to upstream every driver and drop it here. When we are done, T2 people install Linux from official sources like everyone else, and no specialized distro is needed.

Yes, we know there is Apple Silicon#

But someone needs to close the gap! We truly believe T2 MacBooks can make perfect Linux laptops. Once everything is properly fixed, models like the MacBook Pro 15,1 or MacBook Air 9,1 run cool, offer great battery life, and cost very little. All while keeping Apple’s exceptional build quality, Retina displays, and Touch Bar. These two models run perfectly on KAIT2EN. The MacBookPro16,1 and MacBookPro16,4 join them with complete hybrid graphics and suspend support, and the 15,2 also runs well. The 15,3 and the 15,1 Vega models lack hybrid graphics for now, for want of testers.

So this is x86 architecture and we won't get anywhere near to what Asahi with Apple Silicon can do. But the message is not to buy into T2 Macs. It's about making them usable and using them sustainably. If you already own a T2 Mac, you will appreciate it. Because you know and we know that this era of devices was always kinda "meh!". Even at the time. But on Linux they are great. Even the "portable egg fryer" MacBook Air 9,1 is.

And actually, before Apple began with their security chip shenanigans, Apple computers have always been great for Linux. Let's put butterfly keyboards, flexgate, staingate and whatnotgate aside now. They are still sexy. Aren't they? And if you can get hold of one for cheap for study or travel, you will appreciate when you just can run Linux on it natively. Without the need of reading half the Internet about how to make it work. Somehow.

Is the grass greener on the KAIT2EN side?#

Our grass is KAIT2EN red. There is a lot of discussion and arguing involved when you want to get things moving. It's the sound of grinding gears while trying to find solutions for everyone. We move fast, and our frequent update cycle might feel relentless and annoying. Staying informed means following announcements in our Discord community or checking GitHub for updates. We wouldn't recommend KAIT2EN to total Linux noobs. But we are surprised to see how fast people grow with new tasks.

Updating is entirely up to you, but KAIT2EN is built for active testing, not passive convenience. If you want to call us opinionated, then this is your chance. We share this project because we need real-world testers to validate our fixes on a base we know. Not updating will lead to a non-working Mac when outdated DKMS modules stop compiling against an updated kernel that contains new symbols.

This is something you should keep in mind before jumping in.

Install KAIT2EN

The installation starts in macOS and continues in Fedora.

macOS Terminal
curl -fsSL https://github.com/kaiT2en/KaiT2en-Fedora/releases/latest/download/install-kait2en-fedora.sh | bash

Run this in macOS with an empty USB drive attached. The script downloads and verifies the official Fedora image, collects the Apple firmware from your Mac and writes a bootable installer.