KaiOS: какво е това, системна архитектура и уеб приложения

Автор: IT Sectr Публикувано: 2026-02-07 Време за четене: 13 мин

KaiOS — операционна система за телефони с клавиши, базирана на уеб технологиите Boot to Gecko (B2G) от Mozilla. Разработката на приложения се извършва на HTML5, CSS и JavaScript, без необходимост от изучаване на родни езици. KaiOS работи на устройства с 256–512 MB RAM и поддържа 4G VoLTE, GPS, Bluetooth. Според данни на KaiOS Technologies през 2025 г. имаше над 200 милиона активни устройства по света.

Основни точки

  • KaiOS — уеб-ориентирана ОС за телефони с клавиши на двигател Gecko от Mozilla
  • HTML5/CSS/JS — стек за разработка, който не изисква изучаване на родни езици за програмиране
  • KaiStore — официален магазин за приложения с модериране и подписване на пакети
  • Web API — MozMobileConnection, MozTelephony, MozSms за достъп до хардуерни функции на телефона
  • Gecko — версия 48 (KaiOS 2.5) или 84 (KaiOS 3.0) определя наличността на API

Какво е KaiOS?

KaiOS — мобилна операционна система за телефони с клавиши, разработена от компанията KaiOS Technologies. Системата се базира на проекта с отворен код Boot to Gecko (B2G) от Mozilla, който първоначално е създаден като уеб алтернатива на Android за ултра-бюджетни устройства. Първото комерсиално издание беше през 2017 г. на телефона Reliance JioPhone в Индия.

Според Counterpoint Research (Q2 2025), KaiOS притежава 2,8% от глобалния пазар на мобилни ОС, изоставайки от Android (72%) и iOS (27%), но изпреварвайки останалите платформи. В Индия делът на KaiOS достига 14% благодарение на програмата JioPhone. Средната цена на устройство с KaiOS е 20-30 щатски долара, което прави системата ключова за развиващите се пазари.

Ключовата характеристика на KaiOS — всички приложения са уеб приложения. Разработчикът пише код на HTML5, CSS и JavaScript, опакова го в ZIP архив с манифест и го публикува в KaiStore. Системата не поддържа инсталиране на родни APK файлове — само Open Web Apps според спецификацията W3C Widget.

История на версиите на KaiOS

KaiOS 2.5 (2018) — първа стабилна версия на ядро Gecko 48, инсталирана на JioPhone 1. KaiOS 2.5.3 (2021) — поддръжка на Google Assistant, Google Maps Go, YouTube Go. KaiOS 3.0 (2022) — Gecko 84, подобрена производителност, WebGL 2.0, CSS Grid. KaiOS 3.1 (2024) — оптимизация за 256 MB RAM, ново Web API Audio Channel, подобрена сигурност TLS 1.3.

Версия на KaiOSГодинаGeckoКлючова промяна
2.5201848Първо стабилно издание, JioPhone 1
2.5.3202148Google Apps, Асистент, подобрена сигурност
3.0202284ES2020, WebGL 2.0, CSS Grid, подобрена JS производителност
3.1202484256 MB RAM, TLS 1.3, Audio Channel API

Архитектура на KaiOS: ядро Linux и двигател Gecko

Архитектурата на KaiOS се състои от три ключови слоя: ядро Linux (Gonk), уеб двигател Gecko и потребителски интерфейс Gaia. Gonk — хардуерно-зависимият слой, включващ драйвери, HAL (Hardware Abstraction Layer), стек за модем RIL (Radio Interface Layer) и поддръжка на сензори. От Android Open Source Project (AOSP) са взети bootloader, драйвери и някои библиотеки.

Gonk — хардуерен слой

Gonk осигурява на Gecko достъп до хардуера: камера, Bluetooth, Wi-Fi, GPS, аудио, вибрация, сензори. За разлика от Android, където приложенията се пишат за Dalvik/ART, в KaiOS приложенията имат достъп до хардуера чрез Web API, превеждани от Gecko в Gonk IPC. Радио интерфейсът (RIL) осигурява 4G VoLTE, SMS, USSD и управление на SIM карти.

Gecko — уеб двигател

Gecko в KaiOS не е просто браузър двигател, а пълна среда за изпълнение на приложения. Всички HTML5 приложения работят в Gecko Process Manager, който изолира всяко приложение в отделен процес. Gecko имплементира спецификацията W3C Widget Packaging и разширенията на Mozilla за достъп до хардуер. Версията на Gecko определя кои Web API са достъпни за разработчика.

Gaia — потребителски интерфейс

Gaia — уеб интерфейсът на самата ОС: заключен екран, начален екран (launcher), панел за известия, екран за набиране, контакти, SMS клиент. Всички системни приложения са същите Open Web Apps. Разработчикът може да замени стандартната камера или клавиатура със свое приложение, като регистрира съответния activity handler в манифеста.

javascript
// Проверка на версията на KaiOS и наличността на API
function checkKaiOSVersion() {
    const ua = navigator.userAgent;
    let version = 'unknown';

    if (ua.includes('KAIOS/2.5')) {
        version = '2.5';
    } else if (ua.includes('KAIOS/3')) {
        version = '3.0';
    }

    const features = {
        geolocation: 'geolocation' in navigator,
        vibration: 'vibrate' in navigator,
        mozMobileConnection: 'mozMobileConnection' in navigator,
        mozTelephony: 'mozTelephony' in navigator,
        mozSms: 'mozSms' in navigator,
        bluetooth: 'bluetooth' in navigator
    };

    return { version, features };
}

// Проверка за наличие на Google Apps (само KaiOS 2.5.3+)
const systemInfo = checkKaiOSVersion();
console.log('KaiOS version:', systemInfo.version);
console.log('Available APIs:', JSON.stringify(systemInfo.features, null, 2));

// Използване на вибрация с проверка на наличността
function triggerHapticFeedback() {
    if (navigator.vibrate) {
        navigator.vibrate([200, 100, 200]); // вибрация, пауза, вибрация
    }
}

Функцията checkKaiOSVersion чете User Agent за определяне на версията на KaiOS и проверява наличността на ключови Web API. Във версия 2.5 са налични mozMobileConnection, mozTelephony, mozSms — те липсват в обикновените браузъри и са уникални за KaiOS. Функцията triggerHapticFeedback използва Vibration API с обратна съвместимост.

Създаване на приложение за KaiOS: структура и манифест

Приложение за KaiOS — ZIP архив (формат .zip, не .apk), съдържащ HTML файлове, CSS, JavaScript, изображения и манифест. Структурата на минимално приложение включва manifest.webapp (описание на приложението), index.html (входна точка), style.css и icon.png (квадратна икона 90×90 пиксела). Манифестът съответства на спецификацията W3C Manifest for Web Apps.

Манифест manifest.webapp

Файлът manifest.webapp — основният конфигурационен файл на приложението за KaiOS. Задължителни полета: name (име), description (описание до 140 знака), launch_path (път до index.html), icons (икони с размери 30×30, 60×60, 90×90, 120×120 пиксела). Полето type: 'certified' (системни приложения), 'privileged' (достъп до Web API), 'web' (без специални права). Разрешенията за privileged приложения се посочват в масива permissions.

javascript
// manifest.webapp — конфигурация на приложение за KaiOS
{
    "name": "Фенерче",
    "description": "Включва и изключва светкавицата на камерата",
    "launch_path": "/index.html",
    "icons": {
        "30": "/icons/icon-30.png",
        "60": "/icons/icon-60.png",
        "90": "/icons/icon-90.png",
        "120": "/icons/icon-120.png"
    },
    "type": "privileged",
    "permissions": {
        "camera": {
            "description": "Необходим за включване на светкавицата"
        }
    },
    "default_locale": "ru",
    "orientation": "portrait-primary",
    "fullscreen": true
}

Манифестът посочва, че приложението е от тип privileged — това дава достъп до camera API чрез permissions. Размерите на иконите са строго 30×30, 60×60, 90×90 и 120×120 пиксела. Полето orientation ограничава портретна ориентация — на телефони с клавиши обикновено няма акселерометър за завъртане на екрана. fullscreen: true скрива статус лентата.

Структура на HTML страница

HTML5 страницата в KaiOS използва стандартни тагове, като се взема предвид ограниченият екран (обикновено 240×320 пиксела). Мета-тагът viewport е задължителен: <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">. KaiOS не поддържа сензорни събития (няма сензорен екран на телефони с клавиши), цялата навигация става чрез клавиши: ArrowUp, ArrowDown за движение, Enter за избор, Back за връщане.

javascript
// index.html — просто приложение за фенерче за KaiOS
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>Фонарик</title>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
    <div id="app">
        <div id="status" class="status-off">Выключен</div>
        <div id="hint">Нажмите Enter для включения</div>
    </div>

    <script>
        const statusEl = document.getElementById('status');
        const hintEl = document.getElementById('hint');
        let isFlashOn = false;
        let camera = null;

        async function initCamera() {
            try {
                camera = navigator.mozCameras.getListOfCameras()[0];
                const cameraControl = await
                    navigator.mozCameras.getCamera(camera, { mode: 'picture' });
                return cameraControl;
            } catch (e) {
                showError('Камера недоступна: ' + e.message);
            }
        }

        async function toggleFlash() {
            const cam = await initCamera();
            if (!cam) return;

            isFlashOn = !isFlashOn;
            try {
                await cam.setConfiguration({
                    mode: 'picture',
                    flashMode: isFlashOn ? 'on' : 'off'
                });
                statusEl.textContent = isFlashOn ? 'Включен' : 'Выключен';
                statusEl.className = isFlashOn ? 'status-on' : 'status-off';
            } catch (e) {
                showError('Ошибка: ' + e.message);
            }
        }

        // Обработка на хардуерния бутон Enter
        document.addEventListener('keydown', function(e) {
            if (e.key === 'Enter') {
                toggleFlash();
            }
        });

        initCamera();
    </script>
</body>
</html>

Приложението Фенерче използва MozCamera API за управление на светкавицата на камерата. Потребителят натиска хардуерния бутон Enter — задейства се keydown манипулатор, който превключва flashMode между on и off. Статусът се показва в текстов блок с клас status-on/status-off за визуална индикация. MozCamera API е достъпен само за privileged приложения с разрешение camera в манифеста.

Web API на KaiOS: работа с телефон и хардуер

KaiOS Web API — набор от JavaScript интерфейси, предоставящи достъп до хардуерните възможности на телефона. Повечето API са собствени разширения на Mozilla (с префикс moz) и не са достъпни в обикновените браузъри. За използване на API, приложението трябва да има тип privileged или certified в манифеста.

Основни Web API

MozMobileConnection — информация за мрежата: оператор, ниво на сигнал, тип мрежа (4G/3G/2G), IMEI, статус на роуминг. MozTelephony — управление на разговори: набиране на номер, приемане, завършване, конференция, статус на разговор. MozSms — изпращане и получаване на SMS, MMS, управление на съобщения в SIM. MozContacts — четене и запис на телефонен указател. MozBluetooth — управление на Bluetooth: откриване на устройства, сдвояване, прехвърляне на файлове. Push API — получаване на push известия от сървър.

javascript
// Работа с контакти и разговори чрез Web API на KaiOS
const TelephonyManager = {
    // Извършване на повикване на номер
    async makeCall(phoneNumber) {
        if (!navigator.mozTelephony) {
            throw new Error('Telephony API недоступен');
        }

        const call = navigator.mozTelephony.dial(phoneNumber);
        call.onconnected = () => console.log('Звонок установлен');
        call.ondisconnected = () => console.log('Звонок завершён');
        return call;
    },

    // Получаване на списък с контакти от телефонния указател
    async getContacts() {
        const cursor = navigator.mozContacts.getAll({
            sortBy: 'familyName',
            sortOrder: 'ascending'
        });

        const contacts = [];
        return new Promise((resolve, reject) => {
            cursor.onsuccess = function() {
                if (this.result) {
                    contacts.push(this.result);
                    this.continue();
                } else {
                    resolve(contacts);
                }
            };
            cursor.onerror = function() {
                reject(this.error);
            };
        });
    },

    // Изпращане на SMS
    async sendSms(phoneNumber, message) {
        if (!navigator.mozSms) {
            throw new Error('SMS API недоступен');
        }
        const request = navigator.mozSms.send(phoneNumber, message);
        return new Promise((resolve, reject) => {
            request.onsuccess = () => resolve(request.result);
            request.onerror = () => reject(request.error);
        });
    }
};

// Пример за използване
TelephonyManager.getContacts()
    .then(contacts => console.log('Найдено контактов:', contacts.length))
    .catch(err => console.error(err));

Обектът TelephonyManager комбинира три ключови API на KaiOS: mozTelephony за разговори, mozContacts за телефонен указател и mozSms за съобщения. getAll() с курсор — модел за асинхронно четене на големи обеми данни (типично за контакти с над 1000 записа). Всички API връщат DOMRequest с манипулатори onsuccess и onerror.

Ограничения на Web API

Web API на KaiOS имат ограничения: API за разговори и SMS са достъпни само на телефони (не на таблети), камера — само с физическа камера, Bluetooth — ограничен профил HSP/HFP. Push API изисква поддръжка на сървър Google Firebase (FCM) или собствен сървър. API за геолокация използва A-GPS или Cell ID в зависимост от хардуерната поддръжка.

APIТип приложениеНаличностВерсия на KaiOS
MozMobileConnectionprivilegedВсички телефони2.5+
MozTelephonyprivilegedСамо телефони2.5+
MozSmsprivilegedСамо телефони2.5+
MozContactsprivilegedВсички телефони2.5+
MozBluetoothcertifiedС Bluetooth модул2.5+
Geolocation APIwebС GPS/Cell ID2.5+
Push APIprivilegedС интернет3.0+
WebGL 2.0webС GPU ускорение3.0+

UI и навигация: T9, бутони и екран 240×320

Потребителският интерфейс на KaiOS е ориентиран към управление с клавиатура T9 и хардуерни бутони. Стандартната разделителна способност на екрана — 240×320 пиксела (QVGA) при повечето телефони с клавиши. Липсата на сензорен екран означава, че цялата навигация се осъществява чрез keydown/keyup събития: ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Enter, Back (или Escape).

Управление на фокуса

KaiOS не поддържа CSS :focus по обичайния начин — фокусът се управлява чрез tabindex и JavaScript. Разработчикът трябва ръчно да следи текущо избрания елемент и да премества фокуса при натискане на клавиши. Препоръчва се използването на data-index върху елементи на списък за опростяване на навигацията. Избраният елемент обикновено се подчертава чрез клас .selected с CSS свойство background-color в контрастен цвят.

javascript
// Фокусна навигация в списък за KaiOS
class ListNavigation {
    constructor(containerSelector) {
        this.container = document.querySelector(containerSelector);
        this.items = this.container.querySelectorAll('[data-index]');
        this.currentIndex = 0;
        this.init();
    }

    init() {
        this.updateFocus();

        document.addEventListener('keydown', (e) => {
            switch (e.key) {
                case 'ArrowUp':
                    e.preventDefault();
                    this.moveFocus(-1);
                    break;
                case 'ArrowDown':
                    e.preventDefault();
                    this.moveFocus(1);
                    break;
                case 'Enter':
                    e.preventDefault();
                    this.selectItem();
                    break;
                case 'Backspace':
                case 'Escape':
                    e.preventDefault();
                    this.goBack();
                    break;
            }
        });
    }

    moveFocus(direction) {
        this.items[this.currentIndex].classList.remove('selected');
        this.currentIndex = (this.currentIndex + direction + this.items.length) % this.items.length;
        this.updateFocus();
    }

    updateFocus() {
        const el = this.items[this.currentIndex];
        el.classList.add('selected');
        el.scrollIntoView({ block: 'nearest' });
    }

    selectItem() {
        const el = this.items[this.currentIndex];
        const event = new CustomEvent('itemselected', {
            detail: { index: this.currentIndex, element: el }
        });
        this.container.dispatchEvent(event);
    }

    goBack() {
        history.back();
    }
}

// Инициализация на навигация за списък с меню
const nav = new ListNavigation('#menu-list');
nav.container.addEventListener('itemselected', (e) => {
    console.log('Выбран элемент:', e.detail.index);
});

Класът ListNavigation имплементира пълна фокусна навигация за KaiOS. ArrowUp/ArrowDown преместват фокуса циклично върху елементи с data-index. Enter извиква персонализирано събитие itemselected. Backspace/Escape връщат към предишния екран. scrollIntoView с block: nearest автоматично превърта екрана, когато елементът излезе от видимата област.

CSS за KaiOS

KaiOS 2.5 поддържа CSS 2.1 + частично CSS3 (border-radius, box-shadow, gradients). Flexbox се поддържа частично в KaiOS 2.5, напълно в KaiOS 3.0, включително CSS Grid. За съвместимост се препоръчва използването на float оформление с фиксирана ширина. Шрифтът по подразбиране — TizenSans или Noto Sans CJK за азиатски пазари. Размер на текста — 14-16 пиксела за основно съдържание, 18-20 за заглавия.

KaiStore и публикуване на приложения

KaiStore — официалният магазин за приложения за KaiOS, предварително инсталиран на всички устройства. Разработчикът се регистрира в портала за разработчици на KaiOS (developer.kaiostech.com), качва подписания ZIP пакет и попълва описанието. Модерирането проверява сигурността, стабилността и съответствието с политиката за съдържание. Средното време за проверка — 3-5 работни дни.

Подписване на приложение

KaiOS изисква цифров подпис на приложението чрез KaiOS Certificate. Разработчикът генерира чифт ключове (частен + публичен) чрез помощната програма kaios-sign, изпраща публичния ключ до портала за разработчици на KaiOS и получава сертификат. Подписаният .zip файл съдържа подписа в папка META-INF. Без подпис приложението се инсталира само на устройства за разработка.

Модел на разпространение и монетизация

KaiStore поддържа безплатни приложения, реклама чрез KaiOS Ads SDK и покупки в приложението чрез операторско фактуриране (Direct Carrier Billing). Комисионната на KaiStore — 30% от приходите. Алтернативен канал — предварително инсталиране чрез OEM производители (Jio, Nokia, Alcatel, Doro). За предварително инсталиране е необходим пряк договор с производителя на устройства.

ЕтапДействиеСрок
РегистрацияСъздаване на акаунт в портала за разработчици на KaiOS1 ден
ПодписГенериране на ключ, получаване на сертификат1-2 дни
ИзгражданеОпаковане на .zip с манифест и подпис1 час
КачванеКачване на пакет, попълване на описание1 ден
МодериранеПроверка на сигурността и качеството3-5 дни
ПубликуванеИздание в KaiStore за всички региони1 ден

Ограничения на KaiStore

KaiStore не поддържа платени приложения в някои държави (плащане само чрез операторско фактуриране). Размерът на приложението е ограничен до 10 MB за изтегляне чрез 2G/3G мрежи. Приложението не трябва да използва повече от 50 MB RAM. Достъпът до API mozMobileConnection без изрично посочване в манифеста е забранен. Нарушаването на политиките води до блокиране на акаунта на разработчика.

Често задавани въпроси

Какво е KaiOS?

KaiOS — операционна система за телефони с клавиши, базирана на уеб двигателя Gecko от Mozilla. Работи на устройства с 256-512 MB RAM, поддържа 4G VoLTE, GPS и Bluetooth. Приложенията се пишат на HTML5, CSS и JavaScript. Според Counterpoint Research, KaiOS е инсталиран на над 200 милиона устройства.

Какви езици се използват за разработка за KaiOS?

Единственият стек за разработка — HTML5, CSS и JavaScript. KaiOS не поддържа родни езици като C++ или Java. Всички приложения са Open Web Apps според спецификацията W3C. За достъп до хардуерни функции се използват Mozilla Web API с префикс moz. Приложението се опакова в ZIP архив с manifest.webapp.

Как да разпространяваме приложения за KaiOS?

Официалният магазин — KaiStore с регистрация в портала за разработчици на KaiOS. Приложението се подписва със сертификат на разработчик и се качва във формат .zip. Модерирането отнема 3-5 дни. Алтернативен канал — предварително инсталиране на нови устройства чрез договор с OEM производител. Комисионната на KaiStore — 30%.

По какво се различава KaiOS от Android Go?

KaiOS използва уеб двигателя Gecko за HTML5 приложения и изисква 256-512 MB RAM. Android Go стартира родни APK на Dalvik/ART и изисква 1-2 GB RAM. KaiOS работи на телефони с клавиши на цена до 30 USD, Android Go — на бюджетни смартфони от 50 USD. KaiOS консумира по-малко енергия и работи по-дълго без зареждане.

Какви API са достъпни за разработчиците на KaiOS?

Основни API: MozMobileConnection (мрежа), MozTelephony (разговори), MozSms (SMS), MozContacts (контакти), MozBluetooth (Bluetooth), Geolocation API, Vibration API, Push API, Notification API. За достъп до camera API е необходим тип приложение privileged. Push API е достъпен от KaiOS 3.0.

Резюме

  • KaiOS — уеб ОС за телефони с клавиши на Gecko (B2G), поддържа HTML5 приложения с 256-512 MB RAM
  • Архитектура се състои от Gonk (Linux ядро + драйвери), Gecko (уеб двигател) и Gaia (UI на HTML5)
  • Разработка се извършва на HTML5/CSS/JS, приложението — ZIP с manifest.webapp и цифров подпис
  • Web API включват MozTelephony, MozSms, MozContacts, MozMobileConnection, MozBluetooth, Geolocation
  • Навигация с хардуерни бутони (Arrow, Enter, Back) чрез keydown/keyup събития
  • KaiStore — магазин за приложения с модериране 3-5 дни, комисионна 30% и операторско фактуриране
  • KaiOS 3.0 добавя Gecko 84, ES2020, WebGL 2.0, CSS Grid, Push API и подобрена производителност

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също