Android সাধারণ কার্নেল

AOSP কমন কার্নেল (Android কমন কার্নেল বা ACK নামেও পরিচিত) হল kernel.org কার্নেলের ডাউনস্ট্রিম এবং এতে Android কমিউনিটির জন্য প্রয়োজনীয় প্যাচ অন্তর্ভুক্ত থাকে যা মেইনলাইন বা দীর্ঘ মেয়াদী সহায়তা (LTS) কার্নেলে মার্জ করা হয়নি। এইসব প্যাচের মধ্যে এগুলি থাকতে পারে:

  • Android ফিচারের জন্য প্রয়োজনীয় আপস্ট্রিম কার্যকারিতার ব্যাকপোর্ট ও চেরি-পিক
  • Android ডিভাইসের জন্য রেডি ফিচার, তবে এখনও আপস্ট্রিম ডেভেলপমেন্ট চলছে
  • অন্যান্য ইকোসিস্টেম পার্টনারদের জন্য উপযোগী ভেন্ডর/OEM ফিচার

android-mainline হল Android ফিচারের প্রাথমিক ডেভেলপমেন্ট শাখা। লিনাস টরভাল্ডস কোনও রিলিজ বা রিলিজ ক্যান্ডিডেট পোস্ট করলে, android-mainline-এ মেইনলাইন মার্জ করা হয়। ২০১৯ সালের আগে, Android সাধারণ কার্নেলগুলি সম্প্রতি ঘোষণা করা LTS কার্নেল ক্লোন করে এবং Android-নির্দিষ্ট প্যাচ যোগ করে তৈরি করা হয়েছিল। ২০১৯ সালে এই প্রসেস পরিবর্তন করে নতুন Android সাধারণ কার্নেলকে android-mainline থেকে আলাদা করা হয়েছে। এই নতুন মডেলটি পোর্ট ফরওয়ার্ড করার জন্য উল্লেখযোগ্য প্রচেষ্টা এড়ায় এবং একই ফলাফল ইনক্রিমেন্টালভাবে সম্পন্ন করে Android প্যাচ পরীক্ষা করে। android-mainline-এর উপর উল্লেখযোগ্যভাবে একটানা পরীক্ষা চালানো হয়, এই মডেলটি প্রকাশ করার দিন থেকেই এতে খুব ভালো কোয়ালিটির কার্নেল অন্তর্ভুক্ত থাকে।

আপস্ট্রিম থেকে নতুন LTS ঘোষণা করা হলে, সংশ্লিষ্ট সাধারণ কার্নেলকে android-mainline থেকে ব্রাঞ্চ করা হয়। এর ফলে পার্টনাররা LTS ভার্সন ঘোষণা করার আগে android-mainline থেকে মার্জ করে প্রোজেক্ট শুরু করতে পারেন। নতুন কমন কার্নেল ব্রাঞ্চ তৈরি হওয়ার পরে, পার্টনাররা মার্জ সোর্সকে নতুন ব্রাঞ্চে পরিবর্তন করতে পারবেন।

অন্যান্য সাধারণ কার্নেল ব্রাঞ্চ তাদের সংশ্লিষ্ট LTS কার্নেল থেকে নিয়মিত মার্জ পায়। LTS রিলিজ পোস্ট করার সাথে সাথেই সাধারণত এই মার্জ করা হয়। যেমন, Linux 6.1.75 পোস্ট করা হলে, এটি 6.1 সাধারণ কার্নেলে (android14-6.1) মার্জ করা হয়েছিল। পার্টনারদের LTS এবং Android-নির্দিষ্ট বাগ ফিক্স সংক্রান্ত আপডেট পেতে তাদের কার্নেল আপডেট করার জন্য অত্যন্ত উৎসাহিত করা হয়।

ACK KMI কার্নেল ব্রাঞ্চ

GKI কার্নেলে স্থিতিশীল কার্নেল মডিউল ইন্টারফেস থাকে। KMI কার্নেল ভার্সন ও Android প্ল্যাটফর্ম রিলিজের মাধ্যমে অনন্যভাবে শনাক্ত করা হয়, তাই ব্রাঞ্চের নাম ANDROID_RELEASE-KERNEL_VERSION হিসেবে দেওয়া হয়। যেমন, Android 14-এর জন্য 6.1 GKI কার্নেলের নাম android14-6.1। Android 15-এর জন্য, GKI কার্নেল android15-6.6 চালু করা হয়েছে।

সাধারণ কার্নেল হায়ারার্কি

android-mainline থেকে ব্রাঞ্চ

সাধারণ কার্নেল হায়ারার্কির সবচেয়ে উপরের লেভেলটি ১ নম্বর ছবিতে দেখানো হয়েছে।

android-mainline কার্নেল থেকে সাধারণ কার্নেল তৈরি করা

ছবি ১. android-mainline কার্নেল থেকে সাধারণ কার্নেল তৈরি করা

লক্ষ্য করুন যে ২০২২ সালে android-mainline থেকে নতুন Android কমন কার্নেল android14-6.1 ব্রাঞ্চ করা হয়েছে। ২০২৩ সালে, পরবর্তী LTS ঘোষণা করা হলে, android15-6.6-কে android-mainline থেকে ব্রাঞ্চ করা হয়।

১ নম্বর ছবিতে দেখানো হয়েছে, প্রতিটি কার্নেল ভার্সন দুটি GKI কার্নেলের ভিত্তি হতে পারে। যেমন, দুটি v5.15 কার্নেল হল android13-5.15 এবং android14-5.15, দুটিই হল নিজ নিজ প্ল্যাটফর্ম রিলিজের ফিচার কার্নেল। 5.10-এর ক্ষেত্রেও একই ঘটনা ঘটেছিল; LTS ঘোষণা করার সময় android12-5.10 তৈরি করা হয়েছিল এবং ২০২১-এর বসন্তকালে কার্নেল ফিচার সম্পূর্ণ হওয়ার মাইলস্টোনে android12-5.10 থেকে android13-5.10-এর ব্রাঞ্চ তৈরি করা হয়েছিল যাতে Android 13-এর জন্য ফিচার ডেভেলপ করা যায়। Android 15 (২০২৪) থেকে শুরু করে, প্রতি কার্নেল ভার্সনে একটি করে নতুন GKI কার্নেল থাকবে (android15-6.1 কার্নেল থাকবে না)।

ACK KMI শাখার লাইফসাইকেল

ACK KMI ব্রাঞ্চের লাইফসাইকেল ছবি ২-এ দেখানো হয়েছে।

৬.৬ ACK KMI ব্রাঞ্চ লাইফসাইকেল

ছবি ২. 6.6 ACK KMI ব্রাঞ্চ লাইফসাইকেল

ডেভেলপমেন্ট প্রসেস ও ব্রাঞ্চ লাইফসাইকেল স্পষ্ট করতে, ৬.৬-এর জন্য ACK KMI ব্রাঞ্চের উপর ২ নম্বর ছবিতে ফোকাস করা হয়েছে।

প্রতিটি ACK KMI ব্রাঞ্চ তিনটি ফেজ দিয়ে সাইকেল করে, যা প্রতিটি ব্রাঞ্চের আলাদা আলাদা রঙ দিয়ে ২ নম্বর ছবিতে দেখানো হয়েছে। দেখানো হয়েছে যে, ফেজ নির্বিশেষে LTS নিয়মিত মার্জ করা হয়।

ডেভেলপমেন্ট ফেজ

এটি তৈরি করার সময়, ACK KMI ব্রাঞ্চ ডেভেলপমেন্ট ফেজে (ছবি ২-এ dev হিসেবে লেবেল করা) প্রবেশ করে এবং পরবর্তী Android প্ল্যাটফর্ম রিলিজের জন্য ফিচার কন্ট্রিবিউশনের জন্য খোলা থাকে। ছবি ২-এ, android15-6.6 তৈরি করা হয়েছে যখন ৬.৬-কে নতুন আপস্ট্রিম LTS কার্নেল হিসেবে ঘোষণা করা হয়েছে।

স্টেবিলাইজেশন ফেজ

ACK KMI ব্রাঞ্চে ফিচার সম্পূর্ণ হয়ে গেলে, এটি স্ট্যাবিলাইজেশন ফেজে (ছবি ২-এ স্থিতিশীল হিসেবে লেবেল করা হয়েছে) প্রবেশ করে। পার্টনার ফিচার এবং বাগ ফিক্স এখনও গ্রহণ করা হয়, তবে ইন্টারফেসকে প্রভাবিত করে এমন কোনও পরিবর্তন শনাক্ত করতে KMI ট্র্যাকিং চালু করা হয়েছে। এই পর্যায়ে, KMI-ব্রেকিং পরিবর্তন গ্রহণ করা হয় এবং আগে থেকে নির্ধারিত ক্যাডেন্স (সাধারণত প্রতি দুই সপ্তাহে) অনুযায়ী KMI সংজ্ঞা আপডেট করা হয়। KMI মনিটরিং সম্পর্কে বিস্তারিত জানতে GKI ওভারভিউ দেখুন।

KMI ফ্রোজেন ফেজ

AOSP-তে নতুন প্ল্যাটফর্ম রিলিজ পুশ করার আগে, ACK KMI ব্রাঞ্চ ফ্রিজ করা হয় এবং ব্রাঞ্চের লাইফটাইম পর্যন্ত ফ্রিজ করা থাকে। এর অর্থ হল, কোনও গুরুতর নিরাপত্তা সংক্রান্ত সমস্যা শনাক্ত না হলে KMI-ব্রেকিং পরিবর্তন গ্রহণ করা হয় না যা স্থিতিশীল KMI-কে প্রভাবিত না করে প্রশমিত করা যায় না। KMI ব্রেकेज এড়াতে, LTS থেকে মার্জ করা কিছু প্যাচ পরিবর্তন করা হতে পারে বা বাদ দেওয়া হতে পারে যদি Android ডিভাইসের জন্য ফিক্স করার প্রয়োজন না হয়।

ACK KMI ব্রাঞ্চ ফ্রিজ করা হলে, আগে থেকে থাকা KMI কমন কার্নেল ভেঙে না গেলে বাগ ফিক্স ও পার্টনার ফিচার গ্রহণ করা যেতে পারে। বর্তমান KMI-এর অন্তর্ভুক্ত ইন্টারফেস প্রভাবিত না হলে, নতুন এক্সপোর্ট করা চিহ্ন সহ KMI-এর মেয়াদ বাড়ানো যেতে পারে। KMI-তে নতুন ইন্টারফেস যোগ করা হলে, সেগুলি সঙ্গে সঙ্গে স্থিতিশীল হয়ে যায় এবং ভবিষ্যতে কোনও পরিবর্তন করা হলেও সেগুলি ভেঙে যায় না।

যেমন, KMI ইন্টারফেসের সাধারণ কার্নেল ব্যবহার করে এমন স্ট্রাকচারে ফিল্ড যোগ করার মতো পরিবর্তন অনুমোদিত নয়, কারণ এটি ইন্টারফেসের সংজ্ঞা পরিবর্তন করে:

struct foo {
  int original_field1;
  int original_field2;
  int new_field;  // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

তবে, নতুন ফাংশন যোগ করা যায়:

struct foo2 {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo2 &myarg)
{
  do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

GKI কার্নেলের লাইফটাইমের জন্য, ইউজারস্পেসের সাথে ব্যাকওয়ার্ড কম্প্যাটিবিলিটি বজায় রাখা হয় যাতে ডিভাইসটি যে Android প্ল্যাটফর্ম রিলিজের সাথে লঞ্চ করা হয়েছিল, সেটির জন্য কার্নেল নিরাপদে ব্যবহার করা যায়। আগের রিলিজের সাথে একটানা টেস্টিং মানানসইযোগ্যতা বজায় রাখে। তাই, ছবি ২-এ, android15-6.6 Android 15 ডিভাইস ও তার পরবর্তী যেকোনও ভার্সনের ডিভাইসের জন্য কার্নেল ব্যবহার করা যেতে পারে। এছাড়াও, Android প্ল্যাটফর্ম রিলিজ যেহেতু আগের ভার্সনের সাথে মানানসই, তাই android14-6.1 Android 15 ডিভাইসের জন্য লঞ্চ বা আপগ্রেড, যেকোনও ক্ষেত্রেই কার্নেল ব্যবহার করা যেতে পারে।

KMI জেনারেশন নম্বর

স্থিতিশীলতা পর্ব চলাকালীন LTS মার্জ করা হলে বা এর পরে কোনও নিরাপত্তা সংক্রান্ত সমস্যা বা অন্য কোনও ইভেন্ট ঘটলে, KMI-পরিবর্তনকারী প্যাচ গ্রহণ করতে হবে। সেক্ষেত্রে, build.config.common-এ রেকর্ড করা KMI জেনারেশন নম্বর এক করে বাড়ানো হয়। uname কমান্ড ব্যবহার করে বর্তমান KMI জেনারেশন খুঁজে পাওয়া যাবে:

$ uname -r
6.6.30-android15-6-g86d10b30f51f

প্ল্যাটফর্ম রিলিজের পরের সংখ্যাটি হল KMI জেনারেশন (এই ক্ষেত্রে 6)।

KMI জেনারেশন পরিবর্তন হলে, আগের KMI জেনারেশন মেনে চলা ভেন্ডর মডিউলের সাথে কার্নেল মানানসই হয় না। তাই, কার্নেলের সাথে সিঙ্ক্রোনাসভাবে মডিউলগুলিকে আবার তৈরি ও আপডেট করতে হবে। KMI ফ্রিজ করার পরে, KMI জেনারেশন পরিবর্তন খুব কমই হবে বলে আশা করা যায়।

কার্নেলের মধ্যে কম্প্যাটিবিলিটি

একই LTS ফ্যামিলির মধ্যে কার্নেলগুলির মধ্যে সামঞ্জস্য সংক্রান্ত প্রয়োজনীয়তা নতুন GKI কার্নেল থেকে পরিবর্তিত হচ্ছে।

GKI কার্নেল

GKI কার্নেল, কার্নেল ভার্সন কাজ করে এমন সব Android প্ল্যাটফর্ম রিলিজের সাথে ব্যাকওয়ার্ড কম্প্যাটিবিলিটি বজায় রাখে। এছাড়াও, Android প্ল্যাটফর্ম রিলিজগুলি আগের রিলিজের GKI কার্নেলের সাথে ব্যাকওয়ার্ড-কম্প্যাটিবল। তাই, আপনি Android 15 (2024) ভার্সনে চলে এমন ডিভাইসে Android 14 (2023)-এর জন্য ডেভেলপ করা android14-6.1 কার্নেল নিরাপদে ব্যবহার করতে পারবেন। মানানসই কিনা তা যাচাই করা হয় সব মানানসই রিলিজের সাথে GKI কার্নেলের একটানা VTS ও CTS টেস্টিংয়ের মাধ্যমে।

KMI স্থিতিশীল যাতে ভেন্ডর ইমেজে কার্নেল মডিউল আবার তৈরি না করেই কার্নেল আপডেট করা যায়।

বিভিন্ন GKI কার্নেলের মধ্যে KMI কম্প্যাটিবিলিটি বজায় রাখা হয় না। তাই, যেমন, সব মডিউল আবার না তৈরি করে, android15-6.6 কার্নেলের সাথে android14-6.1 কার্নেল পরিবর্তন করা যাবে না।

GKI কার্নেল শুধুমাত্র তার প্রাথমিক এবং পরবর্তী রিলিজের জন্য কাজ করে। পুরনো রিলিজের ক্ষেত্রে এগুলি কাজ করে না। তাই, Android 14 (2023) ভার্সনে চলমান ডিভাইসের জন্য android15-6.6 কার্নেল কাজ করে না।

কম্প্যাটিবিলিটি ম্যাট্রিক্স

এই সারণীতে প্রতিটি Android প্ল্যাটফর্ম রিলিজের সাথে মানানসই এবং পরীক্ষা করা কার্নেল ভার্সন দেখানো হয়েছে।

Android প্ল্যাটফর্ম রিলিজ মানানসই কার্নেল
Android 17 (২০২৬) android17-6.18
android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10 (Android 17 QPR1 বা এর পরবর্তী যেকোনও ভার্সনে কাজ করে না)
android12-5.10 (Android 17 QPR1 বা এর পরবর্তী যেকোনও ভার্সনে কাজ করে না)
Android 16 (২০২৫) android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 15 (২০২৪) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 14 (২০২৩) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 13 (২০২২) android13-5.15
android13-5.10
android12-5.10
Android 12 (২০২১) android12-5.10

সাপোর্টের মেয়াদ ও নিরাপত্তা প্যাচ

ACK-তে আপস্ট্রিম থেকে LTS মার্জ এবং Android-নির্দিষ্ট কোডের জন্য সমস্যার সমাধান করা হয়। এইসব সমস্যার সমাধান করার মধ্যে ACK-এর সাথে প্রাসঙ্গিক মাসিক Android সুরক্ষা বুলেটিনে উল্লেখ করা সমস্ত কার্নেল নিরাপত্তা প্যাচ অন্তর্ভুক্ত।

kernel.org-এ সংশ্লিষ্ট আপস্ট্রিম স্থিতিশীল কার্নেলের চেয়ে বেশি সময় ধরে ACK কাজ করতে পারে। এই ক্ষেত্রে, Google এই বিভাগে দেখানো এন্ড-অফ-লাইফ (EOL) তারিখ পর্যন্ত বর্ধিত সহায়তা প্রদান করে। কার্নেল EOL হয়ে গেলে, Google আর সেগুলি সাপোর্ট করে না এবং সেগুলি যে ডিভাইসে চলে, সেগুলি দুর্বল বলে বিবেচনা করা হয়।

৬.৬ কার্নেল থেকে শুরু করে, স্থিতিশীল কার্নেলের জন্য সহায়তা লাইফটাইম হল ৪ বছর।

এই টেবিলে কাজ করে এমন ACK-এর লাইফটাইম দেখানো হয়েছে:

ACK ব্রাঞ্চ লঞ্চ
তারিখ

লাইফটাইম
(বছর) ধরে সাপোর্ট করুন
EOL
android12-5.10 2020-12-13 6 2027-07-01
android13-5.10 2020-12-13 6 2027-07-01
android13-5.15 2021-10-31 6 2028-07-01
android14-5.15 2021-10-31 6 2028-07-01
android14-6.1 2022-12-11 6 2029-07-01
android15-6.6 2023-10-29 ৪ 2028-07-01
android16-6.12 2024-11-17 ৪ 2029-07-01
android17-6.18 2025-11-30 ৪ 2030-07-01

সাধারণ কার্নেল টেস্টিং

ভেন্ডরদের দ্বারা ডাউনস্ট্রিম টেস্টিং ছাড়াও, সাধারণ কার্নেলগুলি একাধিক CI সিস্টেমের সাথে পরীক্ষা করা হয়।

KernelCI টেস্টিং

KernelCI বিল্ড-অ্যান্ড-বুট পরীক্ষা তখনই শুরু করা হয় যখন কোনও সাধারণ কার্নেল ব্রাঞ্চে নতুন প্যাচ কমিট করা হয়। বিভিন্ন বোর্ডে কয়েকশো বিল্ড কনফিগারেশন পরীক্ষা ও বুট করা হয়। Android কার্নেলের সাম্প্রতিক ফলাফল KernelCL সাইটে পাওয়া যাবে।

Android presubmit এবং postsubmit টেস্টিং

Android কমন কার্নেলে যাতে কোনও সমস্যা না হয়, তার জন্য প্রিসাবমিট টেস্ট ব্যবহার করা হয়। Android কমন কার্নেল গেরিটে কোড পরিবর্তনের 'চেক' ট্যাবে টেস্টের ফলাফলের সারসংক্ষেপ পাওয়া যাবে।

Android postsubmit টেস্টিং করা হয় Android কমন কার্নেল ব্রাঞ্চে নতুন প্রকাশিত বিল্ডে, যখন নতুন প্যাচ ci.android.com-এ Android কমন কার্নেল ব্রাঞ্চে কমিট করা হয়। ci.android.com-এ aosp_kernel-কে আংশিক ব্রাঞ্চের নাম হিসেবে লিখে, আপনি উপলভ্য ফলাফল সহ কার্নেল ব্রাঞ্চের একটি তালিকা দেখতে পাবেন। যেমন, android-mainline-এর ফলাফল Android কন্টিনিউয়াস বিল্ড ইন্টিগ্রেশন (Android CI) ড্যাশবোর্ডে পাওয়া যাবে। Test Results ট্যাবে পরীক্ষার স্ট্যাটাস দেখতে, নির্দিষ্ট বিল্ডে ক্লিক করুন।

Android প্ল্যাটফর্ম সোর্স ট্রি-তে kernel-presubmit টেস্ট গ্রুপ সহ test-mapping দ্বারা সংজ্ঞায়িত পরীক্ষাগুলি Android কার্নেল ব্রাঞ্চের জন্য প্রি-সাবমিট হিসেবে চালানো হয়। যেমন, test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING-এ নিম্নলিখিত কনফিগারেশন Android কমন কার্নেল কোড চেক-ইনে প্রিসাবমিট টেস্ট হিসেবে vts_kernel_proc_file_api_test চালু করে।

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

জিরো-ডে টেস্টিং

নতুন প্যাচ কমিট করা হলে, ০-ডে টেস্টিং সব Android সাধারণ কার্নেল ব্রাঞ্চে প্যাচ-বাই-প্যাচ টেস্টিং পারফর্ম করে। বিভিন্ন বুট, ফাংশনাল ও পারফর্ম্যান্স টেস্ট চালানো হয়। পাবলিক গ্রুপে যোগ দিন cros-kernel-buildreports.

টেস্ট ম্যাট্রিক্স

Android কমন কার্নেল Android প্ল্যাটফর্ম রিলিজ টেস্ট স্যুট
প্রধান 17 16 15 14 13 KernelCI জমা দেওয়ার আগে পোস্ট জমা দেওয়া ০-দিন
android-mainline ✅ ❌ ❌ ❌ ❌ ❌ ✅ ✅ ✅ ✅
android17-6.18 ✅ ✅ ❌ ❌ ❌ ❌ ✅ ✅ ✅ ✅
android16-6.12 ✅ ✅ ✅ ❌ ❌ ❌ ✅ ✅ ✅ ✅
android15-6.6 ✅ ✅ ✅ ✅ ❌ ❌ ✅ ✅ ✅ ✅
android14-6.1
android14-5.15
✅ ✅ ✅ ✅ ✅ ❌ ✅ ✅ ✅ ✅
android13-5.15
android13-5.10
✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
android12-5.10 ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅

Android-এর সাধারণ কার্নেলে কন্ট্রিবিউট করা

সাধারণত, ফিচার ডেভেলপমেন্ট Android কমন কার্নেলে না করে মেইনলাইন Linux-এ করা উচিত। আপস্ট্রিম ডেভেলপমেন্টকে বিশেষভাবে উৎসাহিত করা হয় এবং সেখানে ডেভেলপমেন্ট গৃহীত হওয়ার পরে, প্রয়োজন অনুযায়ী নির্দিষ্ট ACK ব্রাঞ্চে ব্যাকপোর্ট করা যেতে পারে। Android কার্নেল টিম Android ইকোসিস্টেমের উন্নতির জন্য আপস্ট্রিম করার প্রচেষ্টায় সহায়তা করতে পেরে খুশি।

Gerrit-এ প্যাচ জমা দিন এবং এইসব কন্ট্রিবিউশন নির্দেশিকা মেনে চলুন।