Skip to main content

Mobile OS Security Comparison (Extended)

·13 mins

Mobile OS security comparison (extended) #

Date accessed: 2026-08-30 (America/Belize, UTC−6).
OSes: GrapheneOS, stock Android (Pixel as the high-end reference), CalyxOS, LineageOS, postmarketOS (with Ubuntu Touch as a Linux footnote).
Method: Official docs, forums, and depth-1 clones of focused security repos. Full AOSP / Chromium / kernels were not cloned. Claims below are sourced; community takes are labeled.


1. What each OS is optimizing for #

OSThreat model in one line2026 snapshot
GrapheneOSResist unknown 0-days and persistent compromise on current Pixel hardware; privacy as a side effect of sandboxing and attack-surface cuts.Android 17 since 2026061800; regular tag 2026081300; Pixels 6–10a; Motorola hardware promised 2027.
Stock Android (Pixel)Certified, hardware-backed platform with privileged Google services, Play Protect, and same-day bulletins.Android 17; Pixel 8+ promised 7 years of OS+security; Titan M2 StrongBox; MTE hardware on 8–10a, not default-on for apps.
CalyxOSDe-Googled daily driver with relockable AVB on Pixels, optional microG, firewall, Seedvault. Not a GrapheneOS-class exploit-mitigation fork.Shipping 7.2.4.x / Android 16 (7.2.4.50, 2026-08-28). Official again after an ~11-month update freeze (2025-08 → 2026-07). Android 17 port in tree, not shipping.
LineageOSBroad-device custom ROM: extra privacy UX, SELinux enforcing, no GMS. Charter requires userdebug and disabled system verity.23.2 / Android 16; 24 (Android 17) in progress, no ETA.
postmarketOSAlpine Linux on phones; e-waste reuse and mainline kernels. Different threat model from “daily driver vs Cellebrite.”v25.06 + systemd; Duranium immutable variant is WIP. Secure Boot not implemented.

Stock Android on a generic OEM (Samsung, Xiaomi, …) is usually weaker than Pixel stock: slower vendor/GPU patches, extra privileged preloads, and often no user-settable AVB key. Samsung One UI 8 bootloader-unlock removal was widely reported in Jul 2025 (Samsung did not confirm to The Verge at publication). Xiaomi unlock is account/quota gated; many CN SKUs cannot unlock.


2. Feature table (detailed) #

Legend: Yes = product default or official requirement. Partial = exists but limited, opt-in, device-class specific, or unfinished. No = not present or deliberately disabled. AOSP = inherited Android baseline, not an extra.

Boot integrity #

GrapheneOSPixel stockCalyxOSLineageOSpostmarketOS
Relocked bootloader in normal useYes (required)YesYes on Pixel; Fairphone/Motorola/SHIFT: do not relock without extra checksNo (FAQ: do not relock)No (unlocked BL typical)
Android Verified Boot with OS keyYes (custom key in SE; yellow state; full SHA-256 on Pixel 6+)Yes (OEM key; Pixel also has avb_custom_key)Yes (WITH_AVB := true, SHA 9fbd5656…)No (charter: disable system verity on userdebug)Opposite: avbtool --flags 2 disables verification (pmbootstrap flash_vbmeta)
Rollback protectionYes (SE index from SPL)YesYes (AVB; HSM-signed after 7.2.2.0)Zip signatures only (update_verifier 9ffcf56a…); not AVB rollbackDuranium A/B slot fallback; not hardware anti-rollback
Hardware attestation of OS identityYes (Auditor, protocol v7; StrongBox; TOFU; https://attestation.app)Yes via KeyMint/Play Integrity (certified)Not an advertised productNot an advertised productNone
Build typeuseruseruser (official)Must be userdebugN/A (Alpine)

Sources: GrapheneOS features, install/web, AOSP device-state, CalyxOS bootloader-lock, LineageOS charter SHA 33d1853d…, LineageOS FAQ, pmbootstrap flash_vbmeta.

Memory safety / exploit mitigations #

GrapheneOSPixel stockCalyxOSLineageOSpostmarketOS
Heap allocatorhardened_malloc default on LP64 (h_malloc.c canaries, zero-on-free, quarantine, guard slabs, slab MTE). Scudo only as fallback (32-bit, SurfaceFlinger, camera provider, per-app compat).Scudo since Android 11 (not jemalloc except low-RAM). AOSP default ZeroContents=false. Independent write-ups say production quarantine is often off.No evidence of hardened_malloc in cloned trees or docs. AOSP Scudo.AOSP Scudomusl malloc (Alpine); not hardened_malloc-everywhere
Userspace MTE defaultYes on Pixel 8+ for base OS + compatible apps; per-app opt-outHardware on 8–10a. AOSP (2026-06-17): kernel MTE recommended off in production; small privileged userspace list in async; apps opt in / Developer OptionsStock Pixel pattern (persist.arm64.memtag.system_server=off on user builds in device snippets). Not GrapheneOS-style default-on.Follows device trees; no product claimNot a product default
CFI / PAC / BTI / SCSAOSP CFI/SCS plus userspace BTI+PAC; kernel BTI+CFI and SCS+PAC together (project claim; kernel tree not cloned here)System CFI on by default (arm64). PAC/BTI recommended in NDK; not independently binary-audited for every OS binaryAOSP/Lineage baselineAOSP/Lineage baselineCommunity kconfig: CFI, SCS (aarch64), Yama, lockdown available; SDM845 opts into force-integrity lockdown
Zygote / ASLR secretsExec spawning (fresh exec, per-app since 2026071100)Shared ZygoteShared ZygoteShared ZygoteN/A
JIT / dynamic code (base OS)ART JIT off (AOT); dynamic loading blocked for nearly entire base OS; per-app WebView JIT / DCL togglesART JIT on; Play dynamite modules load dynamically by designNot claimedNot claimedN/A
ptraceBlocked for bundled apps; optional block for user appsAllowed (normal Android debugging)Not claimed extrauserdebug increases debug surfaceUnix ptrace; Yama optional

Code check (GrapheneOS hardened_malloc 714abf5a…): canary mask forces a leading zero; fatal_error("canary corrupted"|"double free"|"detected write after free"); zero-on-free; MTE reserved tag 0; canaries skipped when MTE is on. Android.bp uses the aggressive preset (N_ARENA=1), not light.mk. platform_bionic b95b0888…: LP64 Malloch_*; compile error without USE_H_MALLOC; unprivileged apps can flip /proc/self/attr/grapheneos_flags bit 1<<10 to Scudo.

Stock Chrome on Pixel has memtagMode=async per AOSP MTE docs (partial catch-up). Vanadium still disables JS JIT by default and sets is_cfi = true (args.gn 150a27e2…).

Sandbox, Google, network #

GrapheneOSPixel stockCalyxOSLineageOSpostmarketOS
Per-app UID + SELinux + seccompAOSP + tighter policy (project claim; full sepolicy diff not dumped)AOSP (seccomp since 8; per-app SELinux since 9 for target 28+)Lineage-derived sepolicy (b59f1764… merging lineage-24.0)SELinux enforcing required; Lineage Trust extrasNo. apk apps run as the Unix user. SELinux kconfig is opt-in, not in community alias. Duranium: Flatpak + bubblewrap
Google servicesOptional sandboxed official Play (unprivileged app; not OS backend)Privileged GMS priv-app + Play Protect + Play IntegrityOptional privileged microG with restricted signature spoofing (GmsCore + Store only); default: on, no Google account, FCM onNone official. MindTheGapps unsupported. microG is a separate fork (LineageOS for microG; Dec 2025 key leak disclosed)None. Waydroid = privileged LXC (AppArmor often complain mode)
Play IntegrityBASIC only; no spoofing; DEVICE/STRONG failSTRONG possible on locked certified Pixel with recent SPLNot Google-certifiedCharter: MUST NOT alter Play Integrity responsesN/A
Network controlRuntime Network permission (incl. localhost)No user Network toggleDatura firewall (per-app / transport / VPN-only)Framework per-app firewall + Trustnftables default (incoming deny on wwan)
Extra sensors toggleYes (zeroed IMU etc.)Camera/Mic/Body/Activity onlyNot GrapheneOS-style Sensors permissionNot claimedPortals if Flatpak
Storage/Contact ScopesYesScoped storage / photo picker (related, not the same)Not claimedNot claimedN/A

GrapheneOS will never ship Play or microG as a privileged implementation (homepage). CalyxOS FAQ says restricted spoofing is “not a security risk”; GrapheneOS, Privacy Guides (dropped CalyxOS 2022), and discuss.grapheneos.org disagree. Overlap that is not partisan: CalyxOS does ship privileged microG, does spoof a hardcoded signature, does talk to mtalk.google.com when push is on.

Encryption, lockscreen, local ports #

GrapheneOSPixel stockCalyxOSLineageOSpostmarketOS
Disk encryptionFBE AES-256-XTS + metadata; filename pad 32 B; Weaver 20 attemptsFBE mandatory on 10+ launch; metadata encryption mandatory on 11+ launch; Titan/Weaver on PixelAOSP FBE (Pixel hardware when on Pixel)AOSP FBE; vendor TEE quality variesOptional LUKS (default off). Duranium: mandatory LUKS2, but first boot uses an empty key until the user sets a passphrase
Auto-reboot to BFUYes (default 18 h, in init)No equivalent product defaultYes (privacy UX)Not a Lineage product defaultReboot is the only way to drop LUKS keys
Duress credentialYes (wipe device + eSIMs)NoNot claimedNot claimedNo
PIN scrambleOptionalNoYesNot claimedunl0kr on-screen keyboard (not scramble)
USB when locked5 modes; default charging-only when locked; HW + kernel denyUSB HAL toggle (weaker per GrapheneOS)Restrict USB / Trust USB (ro.boot.system_supports_restrict_usb=1)Trust USB restrictInitramfs USB gadget + optional telnet debug (unudhcpd); Duranium emergency telnetd
Hardware-backed PIN throttleWeaver / Titan MWeaver / Titan M2 on PixelPixel: same hardware. Fairphone/moto: OEM TEEWhatever OEM blobs provideNone (software LUKS + cryptsetup iter-time)

Ubuntu Touch (footnote): fscrypt of /home-class trees, rootfs unencrypted; experimental in 24.04-1.0. AppArmor click confinement. Privileged Halium Android LXC. Not GrapheneOS-class AVB.

Browser, updates, hardware #

GrapheneOSPixel stockCalyxOSLineageOSpostmarketOS
Browser / WebViewVanadium (Chromium fork): JIT off by default, CFI, DrumBrake, patch 0234 re-enables WebView MTEChrome / Trichrome; Chrome Play build uses MTE async; JIT onCalyx Trichrome Chromium 151.x (historically Bromite-derived). Hardening depth vs Vanadium not re-auditedJelly + system WebView (Chromium). 23.0 launch shipped WebView 140 (Oct 2025); later branches update separatelyDistro browsers / Flatpak
OS update modelSeamless A/B ~every 6 h; BFU-capable; optional security preview (…01) with future ASB patchesPixel bulletin same-day OTA start; Mainline APEXAutomatic OTA from 7.2.2.0; express → beta → stableWeekly nightlies when the roster runs; 2026 Updater rewrite; user-initiated historicallyapk (mutable) or systemd-sysupdate A/B (Duranium)
Patch completenessMatches Pixel SPL in 2026 changelogs; extra GKI LTS; several UAFs/OOB they say MTE caught. Firmware still waits on Google. “Patches months earlier than Pixel” example on features page is 2023-11-06 — not re-measured for 2026.Fastest certified Android. GPU/modem still in Pixel bulletins. AOSP source now Q2/Q4 only (2026).OSS patches when public; QPR proprietary firmware lag documented by CalyxOS. ~11-month freeze 2025–26.Platform ASB when public; vendor/bootloader/modem Lineage cannot update unless in the zip. Older branches: 16/17 patched through Nov 2025 SPL only.Mainline kernel CVEs can be newer than vendor Android (SDM845 at Linux 7.1-rc1). No monthly OEM firmware cadence on PinePhone / OP6 / Pixel 3a.
Official devicesPixel 6–10a (phones, Fold, Tablet). Skip Pixel 11 (no MTE). Motorola 2027.Any Pixel; 8+ have 7-year support. Pixel 11 listed on Google Help.Pixel 6–9a family + Tablet/Fold; FP4/5 + FP6 from 7.2.4.50; several Motorola; SHIFTphone 8. Pixel 10a (stallion) in scripts, not yet a shipping-note device.Very broad (20+ OEMs). Quality is per-maintainer.Community mainline: PinePhone, OP6, Pixel 3a, Fairphone 4, Librem 5, many more.

3. Code-review notes (what was actually cloned) #

Unmodified --depth 1 clones. No full platform trees.

GrapheneOS #

RepoHEADWhat was verified
hardened_malloc714abf5a47258090016984e43c7bfbccdeb99fc7 (2026-08-08)Design matches features page. Production threat model in README (not a bug-finding tool).
platform_bionic (malloc sparse)b95b08888b9eb6465c21d5840cce59dc463bfdef (2026-07-28)hardened_malloc is default LP64; Scudo fallback paths match the usage-guide compatibility mode. malloc_info still says jemalloc-1 for tooling — not evidence jemalloc is in use.
Auditorf1bb2ac9d72c0448a054ff829c65d5cb5b3d2ec6 (2026-08-27)Protocol v7; locked + VERIFIED/SELF_SIGNED; StrongBox for new pairings; VB fingerprints Pixel 6–10a; USB mode 0–4 and auto-reboot in OS extras.
AttestationServer2ef88a32865836afc163b3b02c8792e6cff3f211 (2026-08-28)/auditor/challenge + /auditor/verify; SMTPS alerts.
Vanadium (patches/README/args.gn only)150a27e23302cc265baf8a7fb7c0f0112bddf2fd (2026-08-25)Does not replace malloc. is_cfi = true; DrumBrake on; patch 0234 re-enables WebView MTE.

Not verified: kernel MTE/CFI/lockdown, full Chromium, device sepolicy trees.

CalyxOS / LineageOS #

TreeHEADWhat was verified
CalyxOS vendor_calyx9fbd5656da6f2c8e5b47aa27615ec65aa1c1ead7WITH_AVB := true; packages GmsCore/Datura/Seedvault/Trichrome; ro.control_privapp_permissions=enforce; HSM signing scripts. No hardened_malloc/MTE product flags in config/*.mk.
CalyxOS device_calyx_sepolicyb59f1764c6ad2a0f3ab89d391f2aa890a0cd02d0Lineage sepolicy fork; merging lineage-24.0 / Android 17.
CalyxOS website6c3b4517df514fb33a2203d043dc00e31b43ec0aMatches calyxos.org; 7.2.4.50 post 2026-08-28.
LineageOS charter33d1853d9460695036e9ef384f76f7543e2f1d28userdebug MUST; system verity MUST be disabled.
LineageOS update_verifier9ffcf56a0fe152467da2971f0e6b2b79a42f7890Official zip signature check.

Trail of Bits (Jan 2026) on CalyxOS HSM ceremony: 1 medium (rogue admin keys), 2 informational. ToB library.

postmarketOS #

RepoHEAD
pmaports99ef80cba00e02345ee91c22f37127326360eb4c (2026-08-30)
pmbootstrapdefc77469193c62916d945752b620c1fb0a34c89 (2026-08-30)
buffybox (unl0kr)4015e49742de10fd0efeb92897efafa160c79e73 (2026-08-30)

flash_vbmeta comment: Generate vbmeta image with “disable verification” flag. Duranium blog (2026-03-17): “Secure Boot and verified boot are not yet implemented, but are planned.” Wiki.postmarketos.org was Anubis-blocked during this pass; facts taken from git + official blog.

Stock Android source #

AOSP gitiles ?format=TEXT returned HTTP 400 for Scudo README. AVB README was read from a LineageOS GitHub mirror of android_external_avb (not a live AOSP HEAD SHA). Bionic MTE notes from aosp-mirror docs/mte.md. Android Security Papers 2024/2026 PDFs are listed on Google’s reports page; guessed download URLs 404. Year in Review archive on that page still ends at 2018.


4. Limitations and criticisms (labeled) #

GrapheneOS (project-acknowledged): Pixel-only until Motorola 2027; firmware/drivers still Google’s; Pixel 11 skipped for missing MTE; Play Integrity DEVICE/STRONG will not pass (no spoofing); VPN leak blocking “not complete”; Seedvault to be replaced; no FRP; exec-spawn ~200 ms extra cold start; carrier SKUs often cannot unlock. Duress-PIN legal incident reported by Ars Technica, Aug 2026 — not GrapheneOS docs. Hardware attestation still chains to Google roots (Titan/SoC not GrapheneOS-controlled).

Pixel stock: Privileged GMS is a large TCB and patch channel at once. GPU/vendor drivers remain the main 2023–2026 local-privesc path even on patched Pixels (Project Zero Mali/KGSL work; independent Mali dirty-pagetable on stock Pixel 7 Pro, CVE-2025-8045). GrapheneOS on the same Pixel shares that GPU IOCTL surface; hardening raises the cost of userspace memory corruption, it does not delete /dev/mali0.

CalyxOS: Confirmed ~11-month security freeze after Merrill/Desai left (letter 2025-08-01). Shipping again 2026-07-01. Privacy Guides dropped CalyxOS in 2022 (privileged microG fails their “no system modification for Play” rule) and still lists only GrapheneOS. Kuketz 2023 traffic capture is dated; do not treat SUPL-IMSI as current. Relock is not uniform across device classes.

LineageOS: Charter + FAQ confirm unlocked BL, userdebug, system verity off — below stock on physical tamper / persistent malware. Kuketz 2023 titled it “neither secure nor privacy-friendly”; 2026 Updater/ASB tooling improved, VB policy did not. Vendor SPL = whatever blobs the maintainer extracted.

postmarketOS / Ubuntu Touch: Honest gap vs Android: no hardware RoT for the whole OS, no Weaver, no mandatory app sandbox, no monthly firmware ASB. Duranium is the project’s own attempt to close dm-verity//usr; they say Secure Boot is unfinished. Waydroid/Halium add a privileged Android userspace. Good for e-waste and mainline kernels; not a GrapheneOS substitute for AFU forensic resistance. Project disclaimer (v25.06): not Android/iOS polish.

iodéOS /e/OS (not table columns): LineageOS + microG + extra firewall/cloud. Same VB/userdebug caveats as LOS, plus privileged microG. LineageOS for microG is a separate fork (Dec 2025 key leak; APEX test-keys still documented as open).


5. Practical reading #

  1. Highest exploit resistance on a phone you can buy today: GrapheneOS on Pixel 8–10a (MTE + 7-year OEM window). Relocked AVB, Auditor, hardened_malloc, default MTE, sandboxed Play. Cost: Pixel lock-in, Play Integrity, banking apps, Google firmware TCB.
  2. Highest “normal Android” security with app compatibility: Pixel stock. Same hardware RoT and bulletins, privileged GMS, MTE not default-on, no Network/Sensors toggles.
  3. De-Google with relocked VB on more than just Pixels: CalyxOS, with the 2025–26 freeze and microG privilege as the two load-bearing caveats. Treat as privacy-UX on AOSP, not a hardening OS.
  4. Old or odd hardware, know the bootloader stays open: LineageOS. Do not call it more secure than stock on the same device.
  5. Linux on a phone: postmarketOS (or UT). Different OS class. Do not expect Android verified boot, TEE throttling, or a malicious-app sandbox.

6. Source list #

All accessed 2026-08-30 unless a page carries its own date. Fuller per-OS bibliographies are in the four findings.md files.

Official docs #

  1. https://grapheneos.org/features
  2. https://grapheneos.org/faq
  3. https://grapheneos.org/usage
  4. https://grapheneos.org/releases
  5. https://grapheneos.org/install/web
  6. https://grapheneos.org/articles/attestation-compatibility-guide
  7. https://attestation.app/about
  8. https://source.android.com/docs/security/features/verifiedboot
  9. https://source.android.com/docs/security/features/verifiedboot/avb
  10. https://source.android.com/docs/security/features/verifiedboot/device-state
  11. https://source.android.com/docs/security/test/scudo
  12. https://source.android.com/docs/security/test/memory-safety/mte-configuration (updated 2026-06-17)
  13. https://source.android.com/docs/security/test/cfi
  14. https://source.android.com/docs/security/bulletin/pixel
  15. https://developer.android.com/google/play/integrity/overview
  16. https://calyxos.org/features/list/
  17. https://calyxos.org/docs/guide/security/bootloader-lock/
  18. https://calyxos.org/docs/tech/microg-details/
  19. https://calyxos.org/news/2026/07/01/calyxos-official-release-is-back/
  20. https://calyxos.org/news/2026/08/28/august-feature-update/
  21. https://calyxos.org/news/2025/08/01/a-letter-to-our-community/
  22. https://wiki.lineageos.org/faq
  23. https://github.com/LineageOS/charter
  24. https://lineageos.org/Changelog-30/
  25. https://lineageos.org/Infrastructure-Apps-Updates/
  26. https://postmarketos.org/blog/2025/06/22/v25.06-release/
  27. https://postmarketos.org/blog/2026/03/17/introducing-duranium/
  28. https://docs.ubports.com/en/latest/appdev/platform/apparmor.html
  29. https://docs.ubports.com/en/latest/porting/configure_test_fix/Fscrypt.html

Code (cloned) #

  1. hardened_malloc 714abf5a…https://github.com/GrapheneOS/hardened_malloc
  2. platform_bionic b95b0888…https://github.com/GrapheneOS/platform_bionic
  3. Auditor f1bb2ac9…https://github.com/GrapheneOS/Auditor
  4. Vanadium 150a27e2…https://github.com/GrapheneOS/Vanadium
  5. vendor_calyx 9fbd5656… — CalyxOS GitLab
  6. LineageOS charter 33d1853d…
  7. pmaports 99ef80cb…https://gitlab.postmarketos.org/postmarketOS/pmaports.git
  8. pmbootstrap defc7746…

Forums / research / press (used where labeled) #

  1. https://discuss.grapheneos.org/d/23977-workaround-for-play-integrity-on-grapheneos-possible
  2. https://discuss.grapheneos.org/d/32656-motorola-partnership-announcement
  3. https://grapheneos.social/@GrapheneOS/117179621198542373 (Pixel 11 / MTE, 2026-08-29)
  4. https://www.privacyguides.org/en/android/distributions/
  5. https://www.privacyguides.org/articles/2022/04/21/grapheneos-or-calyxos/ (dated 2022)
  6. https://www.kuketz-blog.de/calyxos-de-googled-geht-anders-custom-roms-teil2/
  7. https://www.kuketz-blog.de/lineageos-weder-sicher-noch-datenschutzfreundlich-custom-roms-teil4/
  8. https://projectzero.google/2023/11/first-handset-with-mte-on-the-market.html
  9. https://projectzero.google/2022/11/mind-the-gap.html
  10. https://kuzey.rs/posts/MaliDF/ (CVE-2025-8045 on stock Pixel 7 Pro)
  11. https://9to5google.com/2026/03/01/motorola-confirms-grapheneos-partnership-for-a-future-smartphone-porting-features/
  12. https://arstechnica.com/gadgets/2026/08/motorolas-grapheneos-phones-will-launch-in-2027-priced-higher-than-pixels/
  13. https://www.theverge.com/news/714902/samsung-one-ui-8-bootloader-unlocking-android-roms
  14. https://trailofbits.com/library/calyx-institute-hsm-provisioning-ceremony-scripts/

Method caveats #

  • Discord (GrapheneOS) was not scraped; contact page says it is the active chat and is not bridged to Matrix.
  • postmarketOS wiki HTML was Anubis-blocked.
  • “GrapheneOS patches faster than Pixel” is not treated as a 2026 measured fact (features-page example is 2023-11-06).
  • Kernel and full Chromium trees were not reviewed.