Có một repo trên GitHub đang khiến dân làm kernel phải dừng lại xem: nó boot kernel XNU mã nguồn mở của Apple (bản xnu-8796.121.2, tức kernel của iOS 16.5) trên phần cứng điện thoại Android, rồi chạy nguyên user space iOS 16.5 chưa chỉnh sửa trên đó. Nghĩa là từ launchd, backboardd, SpringBoard cho tới app đều là của iOS thật.
Nó làm gì, cụ thể
Repo oosexgang/hackios-xnu-kernel là một nửa của dự án HackiOS (nửa còn lại là hackios-xnu-userland). Phần này chứa patch cho XNU, EFI loader tự viết, bản port UEFI, driver Wi-Fi, script QEMU, công cụ xl, kernel/loader/UEFI build sẵn, và thư mục common/.
Bài toán nó giải quyết khá rõ ràng: Apple mở source XNU nhưng đóng gần hết phần còn lại (driver, firmware, Secure Enclave, Metal). Muốn chạy iOS trên phần cứng không phải iPhone thì phải tự viết loader, tự thay driver đóng bằng thứ khác, port UEFI, và mang driver Wi-Fi của Linux lên một lớp tương thích. Đó chính xác là những gì repo này ghi trong README.
Nó chạy ở hai nơi. Thứ nhất là POCO X5 Pro 5G (codename redwood, Snapdragon 778G): không flash gì cả, UEFI được khởi động bằng fastboot boot, toàn bộ hệ thống nằm trong RAM, reboot là về lại Android. Thứ hai là QEMU (virt, aarch64): cùng một thứ chạy trên máy Linux bất kỳ, không cần điện thoại.
Danh sách “works” trong README dài hơn tôi tưởng: lock screen, vuốt mở khóa, home screen hai trang icon, wallpaper iOS 16 gốc, gesture hệ thống (vuốt lên về home, app switcher, vuốt cạnh để back, Control Center). App chạy được gồm Settings, Clock, Calendar, Photos, Notes, Safari. Touchscreen Goodix GT9916 nhận multitouch, wake on touch, nút nguồn và nút volume thật. Lên tới 8 core CPU, big core 2.4 GHz, khoảng 20 giây tới lock screen. GPU Adreno 642L qua Mesa/freedreno, Wi-Fi WCN6750 (ath11k) join từ Settings và lướt Safari được 55 đến 90 Mbit/s. Có cả Sileo + Procursus (dpkg, apt), tweak, SSH.
Phần “does not work” cũng thành thật: không có cellular, không Bluetooth, không sạc dưới kernel của họ (máy chỉ xả pin), Metal cho app còn dở (293/456 system shader đã chạy trên Adreno), không ghi được video và Live Photo, App Store và đăng nhập Apple ID không hoạt động vì thiếu Secure Enclave. README tự gọi nó là “research bench, not a ROM”: một phiên chạy kéo dài số giây định trước rồi kernel trả về loader và giao log.
Vì sao repo này đang được chú ý

620 sao, tạo ngày 2026-10-22 và cập nhật cùng ngày. Con số này với một repo kernel thuần C, không topic, không mô tả gốc, license không rõ, là khá bất thường. Lý do nằm ở độ khó: chạy user space iOS nguyên bản đòi hỏi loader tự viết, driver thay thế cho hàng loạt linh kiện đóng của Apple, và một lớp tương thích đủ tốt để driver Wi-Fi Linux nói chuyện được với XNU. Cộng thêm việc demo trên máy Android thật, không phải giả lập, khiến nó khác hẳn các dự án “hackintosh kiểu iOS” trước đây.
Cách tiếp cận không flash cũng là điểm cộng về mặt tâm lý: bạn không có nguy cơ brick máy, chỉ cần bootloader đã unlock. Session sống trong RAM, hết giờ thì thôi.
Chạy thử nhanh bằng QEMU, không cần build kernel
Thư mục prebuilt/ có sẵn kernel, loader và các chương trình build từ chính hai repo này. Việc bạn cần là system image, được tạo ngay trên máy bạn từ IPSW của Apple.
Yêu cầu: Linux x86-64, khoảng 12 GB đĩa trống, 4 GB RAM trống. Trên Arch:
sudo pacman -S --needed git python 7zip lz4 gcc qemu-system-aarch64 qemu-ui-gtk edk2-aarch64
Debian/Ubuntu thì dùng git python3 7zip liblz4-dev gcc qemu-system-arm qemu-efi-aarch64, lưu ý 7-Zip phải từ bản 23 trở lên vì nó mới đọc được APFS.
git clone https://github.com/oosexgang/hackios-xnu-kernel.git hackios
cd hackios
common/setup.sh # brings hackios-xnu-userland into the same tree, checks the host
ios165/fetch.sh # downloads 7.4 GB from Apple's CDN and extracts what is needed (5-15 min)
common/build.sh qemu-virt # builds the APFS images (and the kernel, if the toolchain is there)
common/run.sh qemu-virt # a 20-minute session in a QEMU window
Lock screen hiện sau 2 đến 3 phút. Điều khiển trong QEMU: giữ chuột trái là ngón tay, vuốt từ mép dưới cùng để unlock hoặc thoát app, vuốt từ mép trái để back. Phím tắt: H home, L lock/power, mũi tên lên xuống chỉnh volume, giữ F11 là năm ngón.
Điều khiển từ script thì có sẵn:

qemu/touch.py swipe 0.5 0.985 0.5 0.3 250
qemu/touch.py tap 0.615 0.71
qemu/touch.py key home
qemu/screendump.sh shot.png
Một chi tiết nhỏ nhưng hữu ích: ngay sau khi SpringBoard hiện, hệ thống vẫn đang đăng ký app, nên chờ thêm 30 đến 40 giây. Trên Debian/Ubuntu thì trỏ firmware UEFI bằng biến môi trường QEMU_EFI và QEMU_VARS vào /usr/share/AAVMF/AAVMF_CODE.fd và AAVMF_VARS.fd.
Trên điện thoại thật (POCO X5 Pro 5G, bootloader đã unlock, có adb và fastboot), bạn phải tự lấy firmware của chính máy mình. Repo không và không thể chứa firmware vendor:
adb pull /vendor/firmware/a660_{gmu.bin,sqe.fw,zap.mdt,zap.b00,zap.b01,zap.b02} fw-gpu/ # GPU (gpu=1)
adb pull /vendor/firmware_mnt/image/wpss.{mdt,b02,b03,b04,b05,b06,b07} fw-wifi/ # Wi-Fi (wifi=1)
adb pull /vendor/firmware_mnt/image/adsp.{mdt,b02,...,b36} fw-audio/ # sound (adsp=1)
adb pull /vendor/firmware/aw8697_haptic.bin fw-haptic/ # haptics
Sau đó build và chạy một phiên 15 phút:
common/build.sh redwood GL=1 # images + out/redwood-boot.img
common/run.sh redwood 900 # loader into RAM, system image into RAM, a 15-minute session
Hoặc làm từng bước bằng xl:
./xl enter # Android -> fastboot -> our loader in RAM (fastboot boot); it brings up its own USB link
./xl ramdisk # upload the system image into the phone's RAM (2.5 GB, ~80 s), once per loader session
XL_SECS=900 XL_CMDLINE="touchscreen=1 cpufreq=1 bootcpu=7 cpus=8 gpu=1 wifi=1 adsp=1" ./xl run
./xl screenshot shot.png
Ai nên dùng, và dùng để làm gì
Đây không phải thứ bạn cài để dùng hàng ngày. Nó dành cho người làm kernel, reverse engineer, hoặc nghiên cứu cách iOS vận hành bên dưới. Cụ thể hơn, một vài tình huống hợp lý:
- Muốn quan sát launchd, backboardd, SpringBoard chạy thật mà không cần mổ iPhone.
- Nghiên cứu cách XNU tương tác với driver thay thế, nhất là lớp tương thích cho driver Wi-Fi Linux.
- Test shader Metal trên Adreno: 293/456 system shader đã chạy được, đây là bàn thử cho phần đó.
- Làm việc với userland iOS mà không đụng tới thiết bị thật, nhờ nhánh QEMU.

Sinh viên muốn hiểu kernel làm gì thì QEMU là lựa chọn dễ tiếp cận: chỉ cần một máy Linux, 12 GB đĩa và 4 GB RAM. Còn nếu bạn chỉ muốn “dùng iOS trên Android” cho vui thì dự án này không phù hợp, pin tụt, không sạc được, không có mạng di động.
Những điểm cần cân nhắc
License không rõ. README không nêu, metadata cũng không. Với một dự án động tới kernel Apple và firmware vendor, đây là điểm cần kiểm tra trước khi dùng cho bất kỳ mục đích nào ngoài nghiên cứu cá nhân. Tác giả ghi rõ dự án độc lập, không liên kết với Apple.
Không có file Apple trong repo. Script ios165/fetch.sh tải IPSW từ CDN của Apple về máy bạn và extract tại chỗ. Cách làm này hợp lý về mặt pháp lý, nhưng đồng nghĩa mỗi người dùng phải tự tải 7.4 GB và tự chịu trách nhiệm với những gì mình extract.
Độ trưởng thành. Tạo và cập nhật cùng ngày 2026-10-22, README rất chi tiết nhưng không có topic, không mô tả, không license. Với 620 sao trong thời gian ngắn, cộng đồng đang tò mò nhiều hơn là đã dùng thật. Đừng kỳ vọng support.
Tài liệu. README khá tốt, có bảng works/does not work rõ ràng, có lệnh cụ thể cho từng distro, có đường dẫn docs/air.md bên repo userland cho phần Metal. Đây là mức tài liệu mà nhiều dự án kernel không có.
Phần cứng bị giới hạn. Ngoài POCO X5 Pro 5G (redwood) thì không có danh sách thiết bị khác, đừng hy vọng máy bạn chạy được. QEMU là con đường an toàn nhất để thử.
Cá nhân tôi thấy thú vị nhất là con số 293/456 shader. Nó cho thấy phần Metal không phải “sẽ làm sau” mà đang được đếm từng cái một, kiểu làm việc của người thật sự muốn chạy được app chứ không phải chỉ boot tới SpringBoard rồi dừng. Ai tò mò thì clone repo oosexgang/hackios-xnu-kernel, chạy nhánh QEMU trước cho lành, mất tầm 20 phút tải IPSW và 2 đến 3 phút chờ lock screen.
