KaiOS: šta je to, arhitektura sistema i veb aplikacije

Аутор: IT Sectr Објављено: 2026-02-07 Време читања: 13 мин

KaiOS — operativni sistem za telefone sa tasterima, zasnovan na veb tehnologijama Boot to Gecko (B2G) od Mozilla. Razvoj aplikacija se vodi u HTML5, CSS i JavaScript bez potrebe za učenjem nativnih jezika. KaiOS radi na uređajima sa 256–512 MB RAM i podržava 4G VoLTE, GPS, Bluetooth. Prema podacima KaiOS Technologies, u 2025. godini bilo je više od 200 miliona aktivnih uređaja širom sveta.

Glavne tačke

  • KaiOS — veb-orijentisani OS za telefone sa tasterima na Gecko pogonu od Mozilla
  • HTML5/CSS/JS — razvojni stek koji ne zahteva učenje nativnih programskih jezika
  • KaiStore — zvanična prodavnica aplikacija sa moderacijom i potpisivanjem paketa
  • Web API — MozMobileConnection, MozTelephony, MozSms za pristup hardverskim funkcijama telefona
  • Gecko — verzija 48 (KaiOS 2.5) ili 84 (KaiOS 3.0) određuje dostupnost API-ja

Šta je KaiOS?

KaiOS — mobilni operativni sistem za telefone sa tasterima, razvijen od strane kompanije KaiOS Technologies. Sistem se zasniva na otvorenom projektu Boot to Gecko (B2G) od Mozilla, koji je prvobitno kreiran kao veb zamena za Android na ultra-budžetskim uređajima. Prvo komercijalno izdanje bilo je 2017. godine na telefonu Reliance JioPhone u Indiji.

Prema Counterpoint Research (Q2 2025), KaiOS zauzima 2,8% globalnog tržišta mobilnih OS, iza Androida (72%) i iOS-a (27%), ali ispred ostalih platformi. U Indiji udeo KaiOS dostiže 14% zahvaljujući programu JioPhone. Prosečna cena uređaja na KaiOS je 20-30 američkih dolara, što sistem čini ključnim za tržišta u razvoju.

Ključna karakteristika KaiOS — sve aplikacije su veb aplikacije. Programer piše kod u HTML5, CSS i JavaScript, pakuje ga u ZIP arhivu sa manifestom i objavljuje u KaiStore. Sistem ne podržava instalaciju nativnih APK fajlova — samo Open Web Apps prema W3C Widget specifikaciji.

Istorija verzija KaiOS

KaiOS 2.5 (2018) — prva stabilna verzija na Gecko 48 jezgru, instalirana na JioPhone 1. KaiOS 2.5.3 (2021) — podrška za Google Assistant, Google Maps Go, YouTube Go. KaiOS 3.0 (2022) — Gecko 84, poboljšane performanse, WebGL 2.0, CSS Grid. KaiOS 3.1 (2024) — optimizacija za 256 MB RAM, novi Web API Audio Channel, poboljšana sigurnost TLS 1.3.

Verzija KaiOSGodinaGeckoKljučna promena
2.5201848Prvo stabilno izdanje, JioPhone 1
2.5.3202148Google Apps, Asistent, poboljšana sigurnost
3.0202284ES2020, WebGL 2.0, CSS Grid, poboljšane JS performanse
3.1202484256 MB RAM, TLS 1.3, Audio Channel API

Arhitektura KaiOS: Linux jezgro i Gecko pogon

Arhitektura KaiOS se sastoji od tri ključna sloja: Linux jezgra (Gonk), veb pogona Gecko i korisničkog interfejsa Gaia. Gonk — hardverski zavisan sloj, koji uključuje drajvere, HAL (Hardware Abstraction Layer), RIL (Radio Interface Layer) modem stek i podršku za senzore. Iz Android Open Source Project (AOSP) preuzeti su bootloader, drajveri i neke biblioteke.

Gonk — hardverski sloj

Gonk obezbeđuje Gecko-u pristup hardveru: kameri, Bluetooth-u, Wi-Fi-ju, GPS-u, audio, vibracijama, senzorima. Za razliku od Androida, gde se aplikacije pišu za Dalvik/ART, u KaiOS aplikacije pristupaju hardveru kroz Web API koje Gecko prevodi u Gonk IPC. Radio interfejs (RIL) obezbeđuje 4G VoLTE, SMS, USSD i upravljanje SIM karticama.

Gecko — veb pogon

Gecko u KaiOS nije samo pregledački pogon, već potpuno okruženje za izvršavanje aplikacija. Sve HTML5 aplikacije rade unutar Gecko Process Manager-a, koji izoluje svaku aplikaciju u poseban proces. Gecko implementira W3C Widget Packaging specifikaciju i Mozilla proširenja za pristup hardveru. Verzija Gecko određuje koji Web API su dostupni programeru.

Gaia — korisnički interfejs

Gaia — veb interfejs samog OS-a: ekran zaključavanja, početni ekran (launcher), panel obaveštenja, ekran za biranje broja, kontakti, SMS klijent. Svi sistemski programi su isti Open Web Apps. Programer može zameniti standardnu kameru ili tastaturu svojom aplikacijom, registracijom odgovarajućeg activity handler-a u manifestu.

javascript
// Provera verzije KaiOS i dostupnosti API-ja
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 };
}

// Provera prisustva Google Apps (samo KaiOS 2.5.3+)
const systemInfo = checkKaiOSVersion();
console.log('KaiOS version:', systemInfo.version);
console.log('Available APIs:', JSON.stringify(systemInfo.features, null, 2));

// Korišćenje vibracije uz proveru dostupnosti
function triggerHapticFeedback() {
    if (navigator.vibrate) {
        navigator.vibrate([200, 100, 200]); // vibracija, pauza, vibracija
    }
}

Funkcija checkKaiOSVersion čita User Agent da bi odredila verziju KaiOS i proverava dostupnost ključnih Web API-ja. U verziji 2.5 dostupni su mozMobileConnection, mozTelephony, mozSms — oni nedostaju u običnim pregledačima i jedinstveni su za KaiOS. Funkcija triggerHapticFeedback koristi Vibration API sa unazadnom kompatibilnošću.

Kreiranje aplikacije za KaiOS: struktura i manifest

Aplikacija KaiOS — ZIP arhiva (format .zip, ne .apk) koja sadrži HTML fajlove, CSS, JavaScript, slike i manifest. Struktura minimalne aplikacije uključuje manifest.webapp (opis aplikacije), index.html (ulazna tačka), style.css i icon.png (kvadratna ikona 90×90 piksela). Manifest je u skladu sa W3C Manifest for Web Apps specifikacijom.

Manifest manifest.webapp

Fajl manifest.webapp — glavni konfiguracioni fajl aplikacije KaiOS. Obavezna polja: name (naziv), description (opis do 140 znakova), launch_path (putanja do index.html), icons (ikone dimenzija 30×30, 60×60, 90×90, 120×120 piksela). Polje type: 'certified' (sistemske aplikacije), 'privileged' (pristup Web API-ju), 'web' (bez posebnih prava). Dozvole za privileged aplikacije se navode u nizu permissions.

javascript
// manifest.webapp — konfiguracija aplikacije KaiOS
{
    "name": "Baterijska lampa",
    "description": "Uključuje i isključuje blic kamere",
    "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": "Potrebno za uključivanje blica"
        }
    },
    "default_locale": "ru",
    "orientation": "portrait-primary",
    "fullscreen": true
}

Manifest navodi da aplikacija ima tip privileged — ovo daje pristup camera API-ju kroz permissions. Veličine ikona su strogo 30×30, 60×60, 90×90 i 120×120 piksela. Polje orientation ograničava portretnu orijentaciju — na telefonima sa tasterima obično nema akcelerometra za okretanje ekrana. fullscreen: true sakriva statusnu traku.

Struktura HTML stranice

HTML5 stranica u KaiOS koristi standardne tagove uzimajući u obzir ograničeni ekran (obično 240×320 piksela). Meta-tag viewport je obavezan: <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">. KaiOS ne podržava događaje dodira (nema ekrana osetljivog na dodir na telefonima sa tasterima), sva navigacija se odvija putem tastera: ArrowUp, ArrowDown za kretanje, Enter za izbor, Back za povratak.

javascript
// index.html — jednostavna aplikacija baterijske lampe za 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);
            }
        }

        // Obrada hardverskog tastera Enter
        document.addEventListener('keydown', function(e) {
            if (e.key === 'Enter') {
                toggleFlash();
            }
        });

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

Aplikacija Baterijska lampa koristi MozCamera API za upravljanje blicem kamere. Korisnik pritiska hardverski taster Enter — pokreće se keydown handler koji prebacuje flashMode između on i off. Status se prikazuje u tekstualnom bloku sa klasom status-on/status-off za vizuelnu indikaciju. MozCamera API je dostupan samo za privileged aplikacije sa dozvolom camera u manifestu.

Web API KaiOS: rad sa telefonom i opremom

KaiOS Web API — skup JavaScript interfejsa koji pružaju pristup hardverskim mogućnostima telefona. Većina API-ja su vlasnička Mozilla proširenja (sa moz prefiksom) i nisu dostupna u običnim pregledačima. Za korišćenje API-ja, aplikacija mora imati tip privileged ili certified u manifestu.

Glavni Web API-ji

MozMobileConnection — informacije o mreži: operator, nivo signala, tip mreže (4G/3G/2G), IMEI, status rominga. MozTelephony — upravljanje pozivima: biranje broja, prihvatanje, završetak, konferencijski poziv, status poziva. MozSms — slanje i primanje SMS, MMS, upravljanje porukama na SIM kartici. MozContacts — čitanje i pisanje telefonskog imenika. MozBluetooth — upravljanje Bluetooth-om: otkrivanje uređaja, uparivanje, prenos datoteka. Push API — prijem push obaveštenja sa servera.

javascript
// Rad sa kontaktima i pozivima putem Web API-ja KaiOS
const TelephonyManager = {
    // Ostvarivanje poziva na broj
    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;
    },

    // Dobijanje liste kontakata iz telefonskog imenika
    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);
            };
        });
    },

    // Slanje 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);
        });
    }
};

// Primer korišćenja
TelephonyManager.getContacts()
    .then(contacts => console.log('Найдено контактов:', contacts.length))
    .catch(err => console.error(err));

Objekat TelephonyManager kombinuje tri ključna KaiOS API-ja: mozTelephony za pozive, mozContacts za telefonski imenik i mozSms za poruke. getAll() sa kursorom — obrazac za asinhrono čitanje velikih količina podataka (tipično za kontakte sa preko 1000 unosa). Svi API-ji vraćaju DOMRequest sa onsuccess i onerror rukovaocima.

Ograničenja Web API-ja

KaiOS Web API-ji imaju ograničenja: API-ji za pozive i SMS dostupni su samo na telefonima (ne na tabletima), kamera — samo sa fizičkom kamerom, Bluetooth — ograničeni HSP/HFP profil. Push API zahteva podršku servera Google Firebase (FCM) ili sopstvenog servera. API za geolokaciju koristi A-GPS ili Cell ID u zavisnosti od hardverske podrške.

APITip aplikacijeDostupnostVerzija KaiOS
MozMobileConnectionprivilegedSvi telefoni2.5+
MozTelephonyprivilegedSamo telefoni2.5+
MozSmsprivilegedSamo telefoni2.5+
MozContactsprivilegedSvi telefoni2.5+
MozBluetoothcertifiedSa Bluetooth modulom2.5+
Geolocation APIwebSa GPS/Cell ID2.5+
Push APIprivilegedSa internetom3.0+
WebGL 2.0webSa GPU ubrzanjem3.0+

UI i navigacija: T9, tasteri i ekran 240×320

Korisnički interfejs KaiOS je orijentisan na upravljanje T9 tastaturom i hardverskim tasterima. Standardna rezolucija ekrana — 240×320 piksela (QVGA) kod većine telefona sa tasterima. Odsustvo ekrana osetljivog na dodir znači da se sva navigacija realizuje putem keydown/keyup događaja: ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Enter, Back (ili Escape).

Upravljanje fokusom

KaiOS ne podržava CSS :focus na uobičajen način — fokusom se upravlja kroz tabindex i JavaScript. Programer mora ručno pratiti trenutno izabrani element i pomerati fokus pri pritisku tastera. Preporučuje se korišćenje data-index na elementima liste radi pojednostavljenja navigacije. Izabrani element se obično ističe kroz klasu .selected sa CSS svojstvom background-color kontrastne boje.

javascript
// Fokusna navigacija kroz listu za 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();
    }
}

// Inicijalizacija navigacije za listu menija
const nav = new ListNavigation('#menu-list');
nav.container.addEventListener('itemselected', (e) => {
    console.log('Выбран элемент:', e.detail.index);
});

Klasa ListNavigation implementira potpunu fokusnu navigaciju za KaiOS. ArrowUp/ArrowDown pomeraju fokus ciklično po elementima sa data-index. Enter poziva prilagođeni događaj itemselected. Backspace/Escape vraćaju na prethodni ekran. scrollIntoView sa block: nearest automatski pomera ekran kada element izađe iz vidljivog područja.

CSS za KaiOS

KaiOS 2.5 podržava CSS 2.1 + delimično CSS3 (border-radius, box-shadow, gradients). Flexbox se delimično podržava u KaiOS 2.5, a potpuno u KaiOS 3.0, uključujući CSS Grid. Preporučuje se korišćenje float rasporeda sa fiksnom širinom radi kompatibilnosti. Podrazumevani font — TizenSans ili Noto Sans CJK za azijska tržišta. Veličina teksta — 14-16 piksela za glavni sadržaj, 18-20 za naslove.

KaiStore i objavljivanje aplikacija

KaiStore — zvanična prodavnica aplikacija za KaiOS, unapred instalirana na svim uređajima. Programer se registruje na KaiOS Developer Portal (developer.kaiostech.com), učitava potpisani ZIP paket i popunjava opis. Moderacija proverava sigurnost, stabilnost i usklađenost sa politikom sadržaja. Prosečno vreme provere — 3-5 radnih dana.

Potpisivanje aplikacije

KaiOS zahteva digitalno potpisivanje aplikacije putem KaiOS Certificate. Programer generiše par ključeva (privatni + javni) pomoću alata kaios-sign, šalje javni ključ na KaiOS Developer Portal i dobija sertifikat. Potpisani .zip fajl sadrži potpis u META-INF fascikli. Bez potpisa, aplikacija se instalira samo na dev uređajima.

Model distribucije i monetizacija

KaiStore podržava besplatne aplikacije, oglašavanje putem KaiOS Ads SDK i kupovinu unutar aplikacije putem operatorskog billinga (Direct Carrier Billing). Provizija KaiStore — 30% od prihoda. Alternativni kanal — unapred instalacija putem OEM proizvođača (Jio, Nokia, Alcatel, Doro). Za unapred instalaciju potreban je direktan ugovor sa proizvođačem uređaja.

FazaAkcijaRok
RegistracijaKreiranje naloga na KaiOS Developer Portal1 dan
PotpisGenerisanje ključa, dobijanje sertifikata1-2 dana
IzgradnjaPakovanje .zip sa manifestom i potpisom1 sat
UčitavanjeUčitavanje paketa, popunjavanje opisa1 dan
ModeracijaProvera sigurnosti i kvaliteta3-5 dana
ObjavljivanjeIzdanje u KaiStore za sve regione1 dan

Ograničenja KaiStore

KaiStore ne podržava plaćene aplikacije u nekim zemljama (plaćanje samo putem operatorskog billinga). Veličina aplikacije je ograničena na 10 MB za preuzimanje putem 2G/3G mreža. Aplikacija ne sme koristiti više od 50 MB radne memorije. Zabranjen je pristup mozMobileConnection API-ju bez izričitog navođenja u manifestu. Kršenje politika dovodi do blokade naloga programera.

Često postavljana pitanja

Šta je KaiOS?

KaiOS — operativni sistem za telefone sa tasterima zasnovan na Gecko veb pogonu od Mozilla. Radi na uređajima sa 256-512 MB RAM, podržava 4G VoLTE, GPS i Bluetooth. Aplikacije se pišu u HTML5, CSS i JavaScript. Prema Counterpoint Research, KaiOS je instaliran na više od 200 miliona uređaja.

Koji jezici se koriste za razvoj na KaiOS?

Jedini razvojni stek — HTML5, CSS i JavaScript. KaiOS ne podržava nativne jezike poput C++ ili Java. Sve aplikacije su Open Web Apps prema W3C specifikaciji. Za pristup hardverskim funkcijama koriste se Mozilla Web API sa moz prefiksom. Aplikacija se pakuje u ZIP arhivu sa manifest.webapp.

Kako distribuirati KaiOS aplikacije?

Zvanična prodavnica — KaiStore sa registracijom na KaiOS Developer Portal. Aplikacija se potpisuje sertifikatom programera i učitava u .zip formatu. Moderacija traje 3-5 dana. Alternativni kanal — unapred instalacija na novim uređajima putem ugovora sa OEM proizvođačem. Provizija KaiStore — 30%.

Po čemu se KaiOS razlikuje od Android Go?

KaiOS koristi Gecko veb pogon za HTML5 aplikacije i zahteva 256-512 MB RAM. Android Go pokreće nativne APK-ove na Dalvik/ART i zahteva 1-2 GB RAM. KaiOS radi na telefonima sa tasterima cene do 30 USD, Android Go — na budžetskim pametnim telefonima od 50 USD. KaiOS troši manje energije i radi duže bez punjenja.

Koji API-ji su dostupni programerima za KaiOS?

Glavni API-ji: MozMobileConnection (mreža), MozTelephony (pozivi), MozSms (SMS), MozContacts (kontakti), MozBluetooth (Bluetooth), Geolocation API, Vibration API, Push API, Notification API. Za pristup camera API-ju potreban je tip aplikacije privileged. Push API je dostupan od KaiOS 3.0.

Zaključak

  • KaiOS — veb OS za telefone sa tasterima na Gecko (B2G), podržava HTML5 aplikacije sa 256-512 MB RAM
  • Arhitektura se sastoji od Gonk (Linux jezgro + drajveri), Gecko (veb pogon) i Gaia (UI u HTML5)
  • Razvoj se vodi u HTML5/CSS/JS, aplikacija — ZIP sa manifest.webapp i digitalnim potpisom
  • Web API uključuju MozTelephony, MozSms, MozContacts, MozMobileConnection, MozBluetooth, Geolocation
  • Navigacija hardverskim tasterima (Arrow, Enter, Back) realizuje se kroz keydown/keyup događaje
  • KaiStore — prodavnica aplikacija sa moderacijom 3-5 dana, provizijom 30% i operatorskim billingom
  • KaiOS 3.0 dodaje Gecko 84, ES2020, WebGL 2.0, CSS Grid, Push API i poboljšane performanse

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође