Halaman ini menjelaskan project Generic Kernel Image (GKI) dan cara meningkatkan stabilitas Android serta meningkatkan keamanan.
Histori
Setiap perangkat yang didukung Android memerlukan kernel produksi. Sebelum GKI, kernel bersifat kustom dan didasarkan pada Android Common Kernel (ACK), dengan perubahan khusus perangkat yang dilakukan oleh vendor sistem di chip (SoC) dan OEM.
Penyesuaian ini dapat mengakibatkan hingga 50% kode kernel menjadi kode di luar struktur dan bukan dari kernel Linux upstream atau ACK. Oleh karena itu, sifat kernel pra-GKI yang kustom menyebabkan fragmentasi kernel yang signifikan.
Biaya fragmentasi
Fragmentasi kernel memiliki beberapa efek negatif pada komunitas Android.
Update keamanan memerlukan banyak tenaga
Patch keamanan yang dikutip dalam Buletin Keamanan Android (ASB) harus di-backport ke setiap kernel perangkat. Namun, karena fragmentasi kernel, biaya untuk menyebarkan perbaikan keamanan ke perangkat Android di lapangan sangat mahal.
Sulit menggabungkan update yang Didukung Jangka Panjang
Rilis Long-Term Supported (LTS) mencakup perbaikan keamanan dan perbaikan bug penting lainnya. Selalu mengupdate rilis LTS telah terbukti menjadi cara paling efektif untuk memberikan perbaikan keamanan. Pada perangkat Pixel, ditemukan bahwa 90% masalah keamanan kernel yang dilaporkan dalam ASB telah diperbaiki untuk perangkat yang selalu diupdate.
Namun, dengan semua modifikasi kustom di kernel perangkat, akan sulit untuk menggabungkan perbaikan LTS ke kernel perangkat.
Mencegah upgrade rilis platform Android
Fragmentasi menyulitkan penambahan fitur Android baru yang memerlukan perubahan kernel ke perangkat di lapangan. Kode Android Framework harus memperhitungkan berbagai variasi kernel dan tidak dapat mengandalkan penerapan fitur Android baru di kernel. Hal ini memperlambat inovasi serta menyebabkan peningkatan ukuran dan kompleksitas kode.
Sulit untuk menyumbangkan kembali perubahan kernel ke Linux upstream
Cara menarik patch yang terfragmentasi ke kernel produksi menyebabkan penundaan hingga 18 bulan dari saat rilis LTS tersedia di upstream, hingga saat rilis tersebut ada di perangkat. Penundaan yang lama antara rilis kernel upstream dan produk membuat komunitas Android sulit untuk memasukkan fitur dan driver yang diperlukan ke dalam kernel upstream. Pada saat pengguna mengirimkan saran untuk peningkatan, codebase telah berubah, sehingga sulit untuk menunjukkan relevansi patch.
Memperbaiki fragmentasi: Generic Kernel Image
Project Generic Kernel Image (GKI) mengatasi fragmentasi kernel dengan menyatukan kernel inti dan memindahkan dukungan SoC dan board dari kernel inti ke dalam modul vendor yang dapat dimuat. GKI juga menghadirkan Kernel Module Interface (KMI) yang stabil untuk modul vendor, sehingga modul dan kernel dapat diupdate secara independen. Beberapa karakteristik kernel GKI adalah:
- Kernel GKI dibangun dari sumber ACK.
- Kernel GKI adalah biner kernel tunggal ditambah modul yang dapat dimuat terkait per arsitektur, per rilis LTS.
- Kernel GKI diuji dengan semua rilis Platform Android yang didukung untuk ACK terkait. Tidak ada penghentian penggunaan fitur selama masa aktif versi kernel GKI.
- Kernel GKI mengekspos KMI yang stabil ke driver dalam LTS tertentu.
- Kernel GKI tidak berisi kode khusus SoC atau kode khusus board.
Untuk melihat gambar arsitektur GKI, lihat Ringkasan kernel.
Gambar Umum
Mulai Android 12, perangkat yang dikirim dengan kernel versi 5.10 atau yang lebih tinggi harus dikirim dengan kernel GKI. Build rilis Generic Kernel Image (GKI) diupdate secara berkala dan diperbarui secara rutin dengan perbaikan bug LTS dan penting. Karena stabilitas biner dipertahankan untuk KMI, Anda dapat menginstal image boot ini tanpa melakukan perubahan pada image vendor. Project GKI memiliki tujuan berikut:
- Jangan menyebabkan regresi performa atau daya yang signifikan saat mengganti kernel produk dengan kernel GKI.
- Memungkinkan partner memberikan perbaikan keamanan kernel dan perbaikan bug tanpa keterlibatan vendor.
- Mengurangi biaya peningkatan versi kernel utama untuk perangkat.
- Pertahankan satu biner kernel GKI per arsitektur dengan memperbarui versi kernel menggunakan proses upgrade yang jelas.