در معماریهای سنتی، بهروزرسانی نرمافزار اغلب به دلیل محدودیتهای سختافزاری مانند سیمبندی ثابت یا حافظههای فقط-خواندنی غیرممکن بود یا صرفاً از طریق ابزارهای تخصصی در اختیار کارخانه و تعمیرکاران مجاز انجام میگرفت که عملا بهروزرسانی محصولات را بسیار پرهزینه و کند میکرد. اما با گذشت زمان، طراحی سامانهها با تمرکز بر چابکی انتشار تغییرات شکل گرفت. سامانههای امروزی در تلاشند تا جایی که امکان دارد معماری سامانه را بهگونهای طراحی کنند که قابلیت بهروزرسانی داشته باشد. این معماری توسعهدهندگان را قادر میسازد تا بهبودهای نرمافزاری را به سرعت به دست کاربران سامانه برسانند (ارائه بهبود مستمر در فرهنگ DevOps). برای مثال گوگل در AOSP، تلاش کرده است در طی این سالها علاوه بر بهروزرسانی مجموعه برنامکها و خدماتش (GMS) از طریق Play Store، بهروزرسانی ماژولهای سطح پایین سیستم (مانند HAL و ART) را نیز از طریق Apex انجام دهد.

با این مقدمه بریم سراغ مسئله بهروزرسانی. بهروزرسانی یک سامانه (مانند تلویزیون، ساعت، گوشی هوشمند و دستگاههای چندرسانه ای خودرویی) میتواند به دو روش انجام پذیرد:
۱- به صورت اتصال یک سیم از رایانه به گوشی یا تلویزیون برای انتقال بسته بهروزرسانی، یا اتصال یک کارت حافظه یا فلش به گوشی یا تلویزیون برای انتقال بسته بهروزرسانی؛ که به این روشها بهروزرسانی محلی (local) گفته میشود (برای مثال شیائومی این روش را برای دریافت نسخههای بتا ارائه میدهد)
۲- بهروزرسانی از طریق شبکه بدین صورت که دستگاه مربوطه (مثلا گوشی یا تلویزیون) به یک خدمت تحت شبکه (Backend) متصل شده و بسته بهروزرسانی (OTA Package) را دریافت میکند که به این روش، بهروزرسانی از راه دور (Over The Air) گفته میشود.
بحث این پست در مورد روش دوم است. چند کلمه کلیدی در این روش وجود دارد که به صورت مجزا به آن میپردازیم:
برنامک سمت Client عملا نقش دریافت بهروزرسانی و نصب بهروزرسانی را در دستگاه هدف (موبایل، تلویزیون، ساعت و ...) بر عهده دارد. از گذشته تا کنون شیوههای مختلفی برای نصب بهروزرسانی ارائه شده است که روش اخیر آن مربوط به گوشیهای A/B است که عملا به کاربر این امکان را میدهد تا در زمان نصب بسته بهروزرسانی (که ممکن است طولانی مدت باشد) با گوشی کار بکند و یا به هر دلیلی اگر بسته بهروزرسانی مشکل داشت و با موفقیت بهروزرسانی انجام نشد، دستگاه دچار boot loop یا bricked نشود و با همان سیستمعامل قبلی بالا بیاید.
بسته بهروزرسانی همان نسخه جدید سیستمعامل است که میتواند به دو صورت کامل یا افزایشی ساخته شود:
انواع بسته بهروزرسانی
بسته بهروزرسانی کامل: مناسب برای بهروزرسانیهای اساسی (مانند بهروزرسانی اندروید از نسخه ۱۵ به نسخه ۱۶) یا پس از تعداد زیادی بسته بهروزرسانی افزایشی (برای سهولت کاربر در دریافت یکباره تمامی بهروزرسانی و یا اهدافی مانند اطمینان از پایدار ماندن سامانه). البته حجم بسته بهروزرسانی در این روش میتواند چند گیگابایت باشد.
بسته بهروزرسانی افزایشی: مناسب برای تغییرات کوچک مانند اضافه شدن یک برنامک یا بهبود عملکرد یا رفع مشکلات (bug). این بسته صرفا اختلاف نسخه قبلی و نسخه جدید را میسازد بنابراین پارتیشنهای بدون تغییر در بسته بهروزرسانی قرار نمیگیرند و صرفا تغییرات قرار داده میشود که طبیعتا باعث کاهش قابل توجه حجم بسته بهروزرسانی میشود مثلا ۵۰ مگابایت (البته بسته به میزان تغییرات این اندازه کمتر یا بیشتر میشود).
امنیت بسته بهروزرسانی
معمولا بسته بهروزرسانی دارای محرمانگی نیست. یعنی میتواند حتی به صورت عمومی در وب منتشر شود. اما آنچه حائز اهمیت است صحت (درستی بسته) است. صحت بسته از دو منظر: یک اینکه این بسته الزاما توسط نهاد مجاز ساخته شده است. برای پاسخ به این نیازمندی، بستهها با کلید پلتفرم امضا میشوند بدین معنی که اگر به هر طریقی غیر از نهاد مجاز، بسته بهروزرسانی ساخته و به سوی کلاینت ارسال شود، کلاینت پس از اعتبارسنجی بسته، متوجه میشود این بسته نامعتبر است (چرا که با کلید دیگری امضا شده است). منظر دوم، صحت محتوای دانلود شده است که این نیز با کمک الگوریتمهای عصارهساز صحتسنجی میشود. البته مسئله به اینجا ختم نمیشود و اعتبارسنجیهای دیگری نیز باید صورت پذیرد.
کمینه ویژگیهای این نرمافزار، مدیریت انتشار بستههای بهروزرسانی و ارائه گزارشهای تحلیلی است. از بارگذاری بستههای بهروزرسانی گرفته تا امکاناتی نظیر از انتشار و توقف انتشار (در مواقع اضطراری در صورت دریافت گزارش خطا) همگی از کارکردهای نرمافزار مدیریت انتشار است. به علاوه، وجود یک پنل گزارشدهی تحلیلی، به تصمیمگیران کمک میکند تا برنامهریزی بهتری برای انتشارهای آینده داشته باشند. نرمافزار مدیریت انتشار از معماری پیچیدهای برخوردار است که جریانهای داده و وابستگیهای ظریف بسیاری در آن وجود دارد.
تفاوت بهروزرسانی از راه دور با remote config چیست؟
بهروزرسانی از راه دور، برای ارسال و نصب کد جدید (نسخه جدید برنامک) استفاده میشود در صورتی که در پیکربندی از راه دور (remote config)، تغییر مقادیر و تنظیمات در همان نسخه فعلی برنامک انجام میشود. مثلا زمانی که یک آسیبپذیری امنیتی در برنامک رخ میدهد این آسیبپذیری از طریق تغییر کد نرمافزار فعلی قابل رفع است و باید بهروزرسانی صورت پذیرد. اما زمانی که شما میخواهید رنگ یک دکمه در رویداد شب یلدا تغییر کند خوب این کار با پیکربندی از راه دور میتواند انجام شود. به عنوان جمعبندی در بهروزرسانی از راه دور ارسال نسخه جدیدی از برنامک انجام میشود در حالیکه در پیکربندی از راه دور، تغییر رفتار و ظاهر برنامک فعلی انجام میشود.
تفاوت بهروزرسانی یک برنامک (Application) در اندروید با بهروزرسانی سیستمعامل در چیست؟
پاسخ به این پرسش را میتوان از دو منظر ارائه داد:۱- ماندگاری تغییرات، ۲- منبع انتشار بهروزرسانی، ۳- گستره تغییرات و ۴- کنترل دریافت و نصب بهروزرسانی
۱- ماندگاری تغییرات: این تغییرات دائمی و بر روی مثلا پارتیشن سیستم/سوپر نوشته میشوند و با برگشت به کارخانه (Factory reset) این تغییرات از بین نمیرود. در صورتیکه در بهروزرسانی برنامکها، این تغییرات پس از بازگشت به حالت کارخانه از بین میرود.
۲- منبع انتشار بهروزرسانی: در بهروزرسانی برنامک، بهروزرسانی معمولا توسعه دهنده منتشر میشود و از طریق مخازن برنامک (مانند کافهبازار، مایکت و پلیاستور)، در دسترس کاربران قرار میگیرد. در صورتیکه، در بهروزرسانی سیستمعامل، بسته بهروزرسانی توسط سازنده دستگاه (OEM) مانند سامسونگ و شیائومی در همکاری با گوگل منتشر میشود.
۳- گستره تغییرات: در بهروزرسانی برنامک، بهروزرسانی فقط روی خود برنامک تاثیر میگذارد (در یک فضای ایزوله مختص برنامک). در صورتی که بهروزرسانی سیستمعامل در کل دستگاه (system-wide) تأثیر میگذارد. این بهروزرسانی میتواند هسته سیستم (Kernel)، درایورها، رابط کاربری سیستم، وصلههای امنیتی، کتابخانههای اصلی و عملکرد کلی دستگاه را تغییر دهد؛ یک بهروزرسانی خوب میتواند عمر باتری دستگاه و سرعت واکنش رابط کاربری را بهبود چشمگیری بدهد در حالیکه بهروزرسانی بد میتواند کل دستگاه را کند کرده یا باعث افزایش مصرف باتری شود.
۴- کنترل دریافت و نصب بهروزرسانی: در بهروزرسانی برنامکها از مخازن، کاربر اختیارات بیشتری دارد و میتواند دریافت و نصب بهروزرسانی را به تأخیر بیاندازد. در حالی که در بهروزرسانی سیستمعامل، کاربر کنترل بسیار کمتری دارد و گاهی اوقات بهروزرسانی به صورت اجباری نصب میشود.
کدام بخش از سیستمعامل قابل بهروزرسانی از راه دور است؟
در معماری سیستم روی یک تراشه (SoC) که در محصولاتی مانند تلفن همراه هوشمند از آن بهره میبرند، بخشهای اندرویدی تنها یک زیرسامانه است. زیرسامانههای دیگری نیز وجود دارند.
چه نمونههایی از این سامانه در دنیا وجود دارد؟
همانطور که پیشتر اشاره شد شرکتهای OEM تولید کننده موبایل (مانند سامسونگ، هواوی و شیائومی) یا تلویزیون (LG) سامانه بهروزرسانی از راه دور اختصاصی خود را دارند. اما در کنار این سرویسهای اختصاصی، چند سرویسدهنده عمومی هم وجود دارد که دو مورد از آنها gota و qbee است.
در کنار مزیتهای رویکرد سامانههای امروزی در بهروزرسانی از راه دور، چه تهدیداتی میتوان متصور شد؟
در بسته بهروزرسانی هر اتفاقی ممکن است رخ دهد. مشخصا دو تهدید وجود دارد: ۱- از کار انداختن برخی از امکانات سامانه ۲- تبدیل یک سامانه امن به ناامن.