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

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

KaiOS — операционная система для кнопочных телефонов, основанная на веб-технологиях Boot to Gecko (B2G) от Mozilla. Разработка приложений ведётся на HTML5, CSS и JavaScript без необходимости изучать нативные языки. KaiOS работает на устройствах с 256–512 МБ ОЗУ и поддерживает 4G VoLTE, GPS, Bluetooth. По данным KaiOS Technologies, в 2025 году насчитывалось более 200 млн активных устройств по всему миру.

Главное

  • KaiOS — веб-ориентированная ОС для feature-phones на движке 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 МБ ОЗУ, новый Web API Audio Channel, улучшенная безопасность TLS 1.3.

Версия KaiOSГодGeckoКлючевое изменение
2.5201848Первый стабильный релиз, JioPhone 1
2.5.3202148Google Apps, Assistant, улучшенная безопасность
3.0202284ES2020, WebGL 2.0, CSS Grid, улучшенная производительность JS
3.1202484256 МБ ОЗУ, 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) взят бутлоадер, драйверы и некоторые библиотеки.

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' (без специальных прав). Permissions для 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 не поддерживает touch-события (нет сенсорного экрана на кнопочных телефонах), вся навигация идёт через клавиши: 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-prefixed) и недоступны в обычных браузерах. Для использования 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 Portal (developer.kaiostech.com), загружает подписанный ZIP-пакет и заполняет описание. Модерация проверяет безопасность, стабильность и соответствие политике контента. Среднее время проверки — 3-5 рабочих дней.

Подпись приложения

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

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

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

ЭтапДействиеСрок
РегистрацияСоздание аккаунта в KaiOS Developer Portal1 день
ПодписьГенерация ключа, получение сертификата1-2 дня
СборкаУпаковка .zip с манифестом и подписью1 час
ЗагрузкаЗагрузка пакета, заполнение описания1 день
МодерацияПроверка безопасности и качества3-5 дней
ПубликацияРелиз в KaiStore для всех регионов1 день

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

KaiStore не поддерживает платные приложения в ряде стран (оплата только через операторский биллинг). Размер приложения ограничен 10 МБ для загрузки через 2G/3G-сети. Приложение не должно использовать более 50 МБ оперативной памяти. Запрещён доступ к mozMobileConnection API без явного указания в манифесте. Нарушение политик приводит к блокировке аккаунта разработчика.

Часто задаваемые вопросы

Что такое KaiOS?

KaiOS — операционная система для кнопочных телефонов на основе веб-движка Gecko от Mozilla. Работает на устройствах с 256-512 МБ ОЗУ, поддерживает 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 Developer Portal. Приложение подписывается сертификатом разработчика и загружается в формате .zip. Модерация занимает 3-5 дней. Альтернативный канал — предустановка на новые устройства через контракт с OEM-производителем. Комиссия KaiStore — 30%.

Чем KaiOS отличается от Android Go?

KaiOS использует веб-движок Gecko для HTML5-приложений и требует 256-512 МБ ОЗУ. Android Go запускает нативные APK на Dalvik/ART и требует 1-2 ГБ ОЗУ. KaiOS работает на кнопочных телефонах ценой до $30, Android Go — на бюджетных смартфонах от $50. 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 МБ ОЗУ
  • Архитектура состоит из 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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также