NeoSymbian

Roadmap

From a booting kernel to a daily phone

NeoSymbian moves in seven phases. Each one builds on the ones before it, and work inside a phase runs in parallel parts. Every stage keeps its name from the project docs. Status as of .

Phases

In order. A phase is done when all of its stages are; the bar shows done, in progress and blocked stages.

    Parts of the project

    Every stage, in order within its part.

    Architecture

    Three ABIs, one phone

    The kernel is 64-bit code with 32-bit pointers. The 2010 user side runs as 32-bit ARM code at EL0. New UI code is Rust on the user side. Each layer's language follows from its ABI.

    Layers: Rust apps and UI server on top of the Symbian user side, on top of the AArch64 kernel, on the phone hardware Rust apps and UI server neoui · Phone · Contacts · Settings · Wi-Fi · Terminal (armv5te-none-eabi, no_std + e32) Symbian^3 user side, unchanged file server, estart, ESOCK, console · AArch32 EL0 · ARMv5TE, soft-float EKA2 kernel, AArch64, ILP32 SMP nanokernel, flexible memory model, GICv3, timers, exec calls · C++ drivers in baseport/arm64 eMMC · SPMI · Synaptics I2C · DWC3 USB · modem IPA · WCN3990 · audio DSP Pixel 3a XL (SDM670) 8 cores · 2018 hardware · unlockable bootloader

    Who writes what

    LayerLanguageExamples
    Kernel driversC++eMMC, SPMI, USB, IPA, timers
    Protocol and policyRust (user side)QMI, Wi-Fi control, touch protocol, UI
    Glue to Symbianthin C++ETel and ESOCK plugins

    Changes to Symbian code

    Changes are made in place in the forks, marked NeoSymbian. Changed Symbian files are EPL-2.0. Our new files are Apache-2.0. The upstream branches are never changed, and nothing is pushed to SymbianSource.

    Kernel: NeoSymbian/kernel, with the port in Symbian's own folder layout.