Skip to content

Instantly share code, notes, and snippets.

@thejhh
Last active September 21, 2026 18:52
Show Gist options
  • Select an option

  • Save thejhh/0a0389ea465b72f53c7aa208de7b65de to your computer and use it in GitHub Desktop.

Select an option

Save thejhh/0a0389ea465b72f53c7aa208de7b65de to your computer and use it in GitHub Desktop.
Linux MacOS virtualization on Apple M2 laptop with NixOS

macOS-virtuaalitietokoneet Apple Silicon -Linuxissa

Tilanne 21.9.2026. Päivitetty versio 18.9.2026 yhteenvedosta.

macOS Tahoe 26.6.2 käynnistyy nyt M2:n Linux/KVM-ympäristössä työpöydälle. Synteettiselle käyttäjätilille kirjautuminen, Finder, Pääte, SSH-avainkirjautuminen ja Safarin paikallinen lomaketesti on varmennettu. Grafiikka on silti puutteellinen, eikä ympäristöä ole hyväksytty varsinaiseen työkäyttöön tai ChatGPT:n Computer Useen.

Kohde on MacBook Pro 13″ M2 (2022, Mac14,7), 16 GiB RAM. Ajossa oleva Linux 7.1.5, NixOS-versio, tutkimuslähteiden revisiot ja nykyinen QEMU-binääri tarkistettiin laitteelta 21.9. Alla mainitut ajotulokset ovat saman päivän kokeista; alkuperäisen yhteenvedon Ventura-tulokset ovat historiallisia vertailuhavaintoja.

Arkkitehtuuri ja kaksi eri ympäristöä

  • Linux-koekone: M2 → NixOS/Asahi → ARM64 KVM → QEMU vmapple → macOS Tahoe.
  • Grafiikka: Applen paravirtualisoitu grafiikkaprotokolla → Reims → Metal2vulkan (Metal AIR → SPIR-V) → Vulkan/Mesa/Asahi → M2-GPU.
  • Alkuvalmistelu: macOS:n macosvm ja Applen Virtualization.framework luovat asennuksen levy-, aux- ja identiteettitiedostot. Linux-ajossa hypervisor on KVM.

Linuxin grafiikkakokeet tehdään tyhjällä testikoneella, erillään alkuperäisistä käyttäjälevyistä. CPU-renderöintiä ei pidetä tavoiteltuna käyttöpolkuna sen suorituskyvyn vuoksi.

Nykyiset lähteet ja versiot

Revisiot tarkoittavat tutkimuspohjaa. Niiden päällä on paikallisia, erikseen lukittuja korjauspatcheja; pelkkä upstream-checkout ei vastaa testattua binääriä.

Komponentti Nykyinen tutkimusversio Näyttö / rooli
NixOS / Nixpkgs 26.11.20260911.eaad089, eaad089433ca Järjestelmäversio tarkistettu laitteelta
Linux 7.1.5, VMApple/PAC-mukautukset Ajossa oleva kernel tarkistettu; vanhan yhteenvedon erillisiä koeytimiä ei väitetä aktivoiduiksi
Asahi/macOS-kokeiluprojekti 657bb2423ec8 Alustan lukittu patch-lähde
QEMU 11.0.50, bd88218da09b VMApple/KVM ja Reims-silta
Reims vGPU 6f33cec8e836 Grafiikkaprotokolla, resurssit ja Vulkan-suoritus; QEMU/FFI ABI 20
Metal2vulkan 0a44257f1f69 AIR → SPIR-V
Mesa 26.2.2, Asahi Vulkan ICD Samana päivänä käytetty GPU-testeissä; validointilokin laite Apple M2
macosvm c21fd7414bab Natiivin asennuksen alkuvalmistelu; ei Linuxin hypervisor
Linux-koekoneen macOS 26.6.2 / 25G83 Varmennettu SSH:n sw_vers-tuloksesta
Natiivin Metal-vertailun isäntä Apple M1, 26.7 / 25G229 Synteettisen RGB10A8-mittauksen ympäristö

Vanhan yhteenvedon Reims 2844274…, QEMU e17ddb9…, Metal2vulkan 8b78eac… ja profiilien binäärihashit eivät kuvaa nykyistä Tahoe-tutkimusajoa. Ventura 13.6:n aiempi onnistuminen ei yksin osoita Tahoe-yhteensopivuutta.

Mitä on korjattu ja mitattu

Käynnistys, shaderit ja muistinhallinta

Tutkimuspinossa on alustan käynnistys-/MMIO-korjauksia, shaderien rakenne- ja sampler-välityksen korjauksia, tekstuuriformaattien käsittelyä sekä resurssien omistajuuden, writebackin ja elinkaaren muutoksia. Historiallinen half-IO-korjaus oli yksi aiempi askel; se ei yksin ole nykyinen Tahoe-korjaus.

Käyttöönotto eteni Hello-näkymästä testitilin työpöydälle. Aiempi 8 GiB:n prosessirajan ylittänyt ajo säilyy epäonnistumisena; myöhemmissä rajatuissa ajoissa muistihuippu oli noin 5,75–5,89 GiB. Tämä ei vielä todista pitkän työkuorman vakautta.

RGB10A8: natiivi vertailu ja GPU-toteutus

Applen M1-toteutuksella mitattiin yksityinen formaatti 550 / 0x226, IOSurface b3a8: pakattu 32-bittinen RGB-taso ja erillinen täysikokoinen 8-bittinen alpha-taso. Mitattu muunnos on:

R = (bits[20..29] - 384) / 510
G = (bits[10..19] - 384) / 510
B = (bits[ 0.. 9] - 384) / 510
A = alpha8 / 255

RGB-arvoja ei rajata välille 0–1. Natiivin read/nearest-sample-kokeen suurin ero kaavaan oli noin 7,65e-8. Tämä ei kata kaikkia suodatus-, mipmap- tai kirjoituspolkuja.

Vastaava Vulkan-muunnos ja sen käyttö piirrossa testattiin M2:lla neljällä synteettisellä tapauksella, yhteensä 214 pikseliä. Type11-IOSurface-käsittelyn 11 protokollatestiä ja kolme GPU/identiteetti/rajaustestiä läpäisivät; Vulkan-validointivirheitä ei havaittu tässä testissä. Type12-polun käyttö näkyi myös todellisessa macOS-ajossa. Type11-korjaus ei kuitenkaan poistanut puuttuvia työpöytäkuvakkeita.

Fragmentittomat renderöintiputket

Lokissa on putkia, joissa vertex-ohjelma on olemassa mutta fragmenttiohjelma puuttuu. Reimsin nykyinen suorituspolku hylkää ne. Applen Metal sallii fragmenttiohjelman puuttumisen esimerkiksi syvyys-/stencil-työssä; sen puuttuminen ei siis yksin tarkoita virheellistä komentoa. Applen rajapintakuvaus.

Tarkempi putkidiagnostiikka on toteutettu, käännetty ja ajettu. Varsinainen fragmentittoman piirron tuki on kesken. Yhteyttä puuttuviin kuvakkeisiin ei ole vielä osoitettu. Tarkistuksen poistaminen ei riitä: shader-vaiheiden, värikirjoitusten ja depth/stencil-toiminnan on vastattava pyydettyä työtä.

Varmennettu käytettävyys ja puutteet

Tarkistus Tulos 21.9.2026
Käyttöönotto ja testitilille kirjautuminen PASS
Finder ja Pääte, komentojen suoritus PASS
SSH-avainkirjautuminen PASS; julkinen isäntäavain verrattu virtuaalin konsolista ennen hyväksymistä
Safari, paikallinen HTML-lomake PASS; teksti luettava, kenttään kirjoitus ja painikkeen klikkaus toimivat, JavaScript-tulos näkyi uudessa kuvakaappauksessa
Työpöytäkuvakkeet, osa pinnoista ja ikkunakehyksistä FAIL; tyhjiä paikkamerkkejä ja muita piirtohäiriöitä
macOS:n oma screencapture FAIL nykyisessä kokeessa; säilyneestä ScreenCaptureKit-lokista varmistui yhden yrityksen TCC-näytöntallennusoikeuden esto. Oikeuden antaminen ja uusintatesti kesken; ei peruste väittää tätä suoraan vGPU-viaksi
ChatGPT Computer Use SKIP; todellista sovelluksen kaappaus-/ohjausreittiä ei vielä hyväksytysti testattu
Chrome, ChatGPT ja Codex Linux-koekoneessa SKIP; asennukset ja sovelluskohtaiset kokeet kesken
Pitkäkestoinen vakaus, kuormitus ja käyttäjän hyväksyntä Linuxissa SKIP; rajatut kokeet eivät kata näitä

Safarin onnistuminen koskee yksityisen Linux-näytön kuvakaappausta ja QMP-ohjausta. Se ei todista macOS:n oman kuvankaappauksen eikä ChatGPT:n Computer Usen toimivuutta. Myös kuvakaappauksessa näkyvä puuttuva kuvake voi olla AI:lle toiminnallinen este. Tavoite on luotettava tehtävien suorittaminen; täydellistä visuaalista vastaavuutta ei vaadita.

Testien rajaus ja toistettavuus

  • Koekone: 4 GiB guest-RAM, 2 vCPU, KVM/M2-GPU. Koko koepalvelun kova muistiraja 8 GiB, automaattinen lopetus nykyisissä käyttötesteissä 595 sekunnin kohdalla.
  • Grafiikkaikkuna avataan yksityiseen 1920×1080 KWin-virtuaalinäyttöön, omalla istuntoväylällä. Se ei vaihda käyttäjän fyysistä työpöytää tai ota sen näppäimistöfokusta.
  • SSH-testin porttiohjaus on vain isännän loopbackissa. Yksityiset QMP/GDB-socketit ja tekniset lokit säilytetään erillään julkisesta aineistosta.
  • Lähdemanifestissa on 57 Reims-, 4 Metal2vulkan- ja 7 QEMU-patchia sekä erikseen määritellyt kopioitavat testit/shaderit ja alustan patch. Tämä on patch-tiedostojen määrä, ei itsenäisten korjausten lukumäärä.
  • Puhdas lähdekoonti ja vertailu käännettyihin checkoutteihin läpäisi: Reims 87, Metal2vulkan 7, QEMU 8 kirjattua polkua. Manifesti nixos/macos/tahoe-source-stack.json, tarkistin nixos/scripts/prepare-tahoe-source-stack.py macOS-engine-repossa.
  • Cargo-välimuisteja käytetään uudelleen. Viimeisimmät kohdennetut release-käännökset kestivät noin 55–60 sekuntia, minkä jälkeen QEMU linkitettiin erikseen. Tämä ei ole lupaus kaikkien muutosten käännösajasta.
  • Omat patchit, testit, rakennusreseptit ja dokumentaatio ovat paikallisessa Gitissä. Koko QEMU/Reims-pinon täysin sandboxattu Nix-derivaatio on edelleen kesken; Nix-devshell ja lähdelukitus eivät ole sama asia.
  • Apple-media, firmware, virtuaalilevyt, käyttäjädata ja raakakuvat eivät kuulu Gitiin. Lähteen säilyminen paikallisesti ei yksin todista kattavaa erillistä varmistusta.

Nykyisen diagnostiikka-QEMU:n SHA256, tarkistettu 21.9.2026:

41bb3138beacf0d02b416de06376c7943103ed48e0550c1f84c2e751788f2d95

Tämä on kokeissa vaihdettava binääri, ei vakaan julkaisun tunniste. Edellinen binääri on säilytetty palautusta varten.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment