SymOS
Symbian, reborn for the desktop.
SymOS is a native desktop operating system for the Raspberry Pi, built directly on the EKA2 kernel source code released under the Eclipse Public License by the Symbian Foundation. It runs the real Symbian kernel—adapted for the Raspberry Pi 4 and 5—not a reimplementation, not an emulator window. You write the image to an SD card, plug in a keyboard and monitor, and boot into Symbian on your desk.
Our goal is simple: preserve the Symbian computing experience and give it a second life as a lightweight desktop system. If you loved your Nokia N8, E71, or 5800, SymOS lets you relive that experience on a $35 computer with a real keyboard and a big screen—while running thousands of original Symbian applications natively.
Current release: 0.5.3 (Codename: Freesia)
Status: Alpha — usable for daily light tasks, not production-ready
Screenshots
| Desktop | App Launcher | File Manager |
|---|---|---|
| Belle-style desktop with wallpaper, icon grid, and bottom taskbar showing system tray (network, volume, clock) and app switcher | Full-screen app grid, category tabs along the top (All / Games / Office / Internet / Tools), search bar | Dual-pane file manager — directory tree on the left, file listing on the right, toolbar with copy/paste/delete |
| Opera Mobile | Quickoffice | Bounce Touch |
|---|---|---|
| Opera Mobile 10 rendering a webpage at 1920×1080, with Symbian-style softkey bar adapted to a right-click context menu | Quickoffice Word editing a .doc file, menu bar and toolbar visible, Belle-style status indicators | N-Gage era game running windowed, resizable, with toolbar buttons replacing softkeys |
Why Raspberry Pi?
Symbian was born on ARM. The Raspberry Pi is ARM. That single fact is the foundation of this project: original Symbian applications compiled for ARM can execute natively on the Pi without instruction translation, without a compatibility layer, without the overhead of emulation. A .sis package from 2009 contains ARM machine code that our CPU understands directly. The system libraries they link against—euser.dll, efile.dll, wserv.dll—are compiled from the same Symbian Foundation source code we are.
We target exactly one SoC family (Broadcom BCM2711 / BCM2712) on exactly two boards (Pi 4 and Pi 5). This is how RISC OS Open did it, and it is how a project of our size can ship something that works. We are not trying to be Haiku. We are not trying to support every laptop on earth. We are doing one thing well.
A secondary QEMU x86_64 target exists for developers who want to test without Pi hardware, but it cannot run native Symbian ARM applications.
Features
Kernel & Platform
-
EKA3 kernel — forked from SymbianSource/oss.FCL.sf.os.kernelhwsrv, with:
- BCM2711/BCM2712 BSP (interrupt controller, timer, mailbox, DMA)
- Upgraded memory model supporting up to 8 GB RAM
- USB HCI driver (for keyboard, mouse, mass storage)
- HDMI framebuffer driver (up to 1920×1080 @ 60 Hz)
- SD card driver (via Broadcom SDHOST)
- Audio via PWM / HDMI (PCM output)
- Ethernet driver (BCM54213 / BCM54210)
- Wi-Fi driver (CYW43455 / CYW43456, via brcmfmac adaptation)
Desktop Shell (SymShell)
The shell is based on the open-sourced S60 / Symbian^3 Avkon framework, adapted for desktop interaction:
- Desktop — icon grid on a wallpaper background, right-click context menu, drag-and-drop
- Taskbar — bottom bar with: App Launcher button | running app tabs | system tray (network, volume, battery/temperature, clock)
-
Window management — the Symbian Window Server (
ewsrv) already supports windowed applications; we expose this with familiar title bars (close / minimize / maximize), dragging, and resizing - App Launcher — full-screen app grid with category tabs and search, replacing the phone home screen
- Menu mapping — S60 softkeys (Left = Options, Right = Back) are mapped to right-click context menu and Escape key; the Options menu also appears as a traditional menu bar at the top of each window
- Input — USB keyboard and mouse. Touch not required. The Avkon UI widgets (lists, dialogs, editors) all respond to pointer events, which map cleanly to mouse clicks and drags
- Themes — SymOS ships with two themes: Belle (default, the classic Symbian Belle look) and Anna Classic (darker, inspired by Symbian Anna)
File Manager (SymFmgr)
Based on the S60 File Manager application, enhanced for desktop use:
- Dual-pane mode (tree + listing)
- Cut / copy / paste / rename / delete with keyboard shortcuts
- Properties dialog with file metadata
- Network locations (SMB shares)
- Archive support (.zip via zlib, already in the kernel source)
- "Install" context menu entry for
.sis/.sisxpackages
Terminal (SymTerm)
Symbian's EShell adapted as a terminal emulator:
- Command-line interface to the F32 file server
- Built-in commands:
ls,cd,cp,mv,rm,cat,mkdir,pwd,env,ps,kill - Scripting via Symbian's built-in Rexx-like shell language
- Useful for system administration and development
Networking
- Ethernet and Wi-Fi connectivity
- TCP/IP stack (Symbian's native stack, ported from the open-source codebase)
- DNS resolution
- DHCP client
- HTTP/HTTPS via Opera Mobile or built-in
HttpUtilslibrary - SSH client (ported from PuTTY for Symbian open-source codebase)
Symbian Application Compatibility
This is the heart of the project. Because SymOS runs on ARM and provides the same EKA2 system APIs compiled from the original source, Symbian applications can execute natively.
What runs well
| Category | Examples |
|---|---|
| Web browsers | Opera Mobile 10, Opera Mini, Symbian WebKit browser |
| Office | Quickoffice (Word, Spreadsheet, Presentations), Adobe Reader LE |
| Games | Angry Birds (Symbian^3), Bounce Touch, Fruit Ninja, Need for Speed Shift, Galaxy on Fire, all N-Gage 2.0 titles |
| Utilities | X-plore, FExplorer, Y-Browser, Swiss Manager, Best TaskMan |
| Media | CorePlayer, Slick, MP3 players, podcast clients |
| Messaging | Slick (IM), various IRC clients |
| Development | Python for S60 (PyS60), Open C/C++ shell, PAMP (personal Apache/MySQL/PHP) |
| Java ME | Java MIDlets via the JRT (Java Runtime) donated by Nokia to the Symbian Foundation and included in the source — the same codebase that was open-sourced |
What runs with limitations
| Category | Status |
|---|---|
| GPS / Maps | Works with external USB GPS dongle. Nokia Maps server is offline; OpenStreetMap-based alternatives exist |
| Bluetooth | Basic pairing and file transfer work. A2DP audio is experimental. HID (keyboards/mice) supported |
| Camera apps | Raspberry Pi Camera Module supported as a V4L2-compatible capture device. Apps expecting specific Nokia camera hardware may fail |
| S60 3rd Edition (pre-touch) apps | Run natively but designed for 240×320 portrait. SymOS provides a "compatibility mode" that centers the app in a phone-sized window with softkey buttons overlaid |
What does not run
| Category | Reason |
|---|---|
| Phone / SMS / Cellular | No telephony hardware. APIs return KErrNotSupported
|
| Nokia Ovi services | Servers decommissioned. Ovi Store, Ovi Maps online, Ovi Music, Ovi Sync are all dead |
| DRM-protected apps | Symbian Signed DRM requires Nokia's certificate infrastructure which no longer exists |
| Apps requiring specific Nokia hardware | FM transmitter, NFC (6131), TV-out (specific chips), etc. |
| S60 1st/2nd Edition apps | EKA1 ABI is not supported. We only support EKA2 binaries (S60 3rd Edition and later) |
Installing applications
- Copy
.sis/.sisxfiles to the SD card or a USB drive - Open in File Manager → "Install" (or tap/click the file in the App Launcher)
- The SWI (Software Install) subsystem unpacks and registers the application
- App appears in the App Launcher
Alternatively, use swinst from the terminal:
> swinst Z:\archives\opera_mobile.sis
Installing Opera Mobile 10... Done.
Hardware Requirements
| Component | Minimum | Recommended |
|---|---|---|
| Board | Raspberry Pi 4 Model B (2 GB) | Raspberry Pi 5 (4 GB+) or Pi 4 (8 GB) |
| Storage | 8 GB microSD | 32 GB microSD (Class 10 / A2) |
| Display | HDMI, 1280×720 | HDMI, 1920×1080 |
| Input | USB keyboard | USB keyboard + mouse |
| Network | — | Ethernet or Wi-Fi |
Note: Raspberry Pi 400 (the keyboard edition) works perfectly and is the ideal form factor for SymOS — one less cable on your desk.
Installation
Pre-built image (recommended)
- Download
symos-0.5.3-freesia-rpi4.img.xz(or the Pi 5 variant) from Releases - Flash to microSD card:
xzcat symos-0.5.3-freesia-rpi4.img.xz | sudo dd bs=4M of=/dev/sdX status=progress
- Insert the SD card into your Pi, connect HDMI and keyboard, power on
- First boot takes ~30 seconds (filesystem initialization). Subsequent boots: ~8 seconds.
QEMU (for development / testing without a Pi)
qemu-system-aarch64 \
-M raspi4b \
-m 2048 \
-kernel symos-qemu-kernel.img \
-sd symos-0.5.3-freesia-qemu.img \
-serial stdio \
-device usb-kbd \
-device usb-mouse
The QEMU target does not support running native Symbian ARM applications. It is for kernel and shell development only.
Building from Source
SymOS uses a hybrid build system: the kernel and core platform components retain the original Symbian build infrastructure (.mmp / bld.inf + SBSv2) because rewriting it would be a monumental effort with no functional benefit. New SymOS-specific components use CMake.
Prerequisites (Linux host)
# ARM toolchain
sudo apt install gcc-aarch64-linux-gnu
# Symbian Build System (SBSv2) — included as a Git submodule
git clone --recurse-submodules https://github.com/symos-project/symos.git
cd symos
# Python 3 (for build orchestration)
sudo apt install python3 python3-pip
Build
export EPOCROOT=$(pwd)/
export SYMOS_BOARD=rpi4 # or rpi5
# 1. Build the kernel (EKA3) and platform libraries
python3 scripts/build.py --target kernel --board $SYMOS_BOARD
# 2. Build SymShell and system applications
python3 scripts/build.py --target shell
# 3. Build the SD card image
python3 scripts/build.py --target image --output symos.img
The build script orchestrates SBSv2 for kernel/platform code and CMake for new components. A full build on a modern machine takes approximately 20 minutes.
Repository structure
symos/
├── kernel/ # Forked from SymbianSource/oss.FCL.sf.os.kernelhwsrv
│ └── eka/
│ ├── kernel/ # EKA2 kernel core → our EKA3 modifications
│ ├── nkern/ # Nanokernel (UP)
│ ├── nkernsmp/# Nanokernel (SMP) — used on Pi 5
│ ├── memmodel/# Memory model (epoc + rpi adaptation)
│ ├── euser/ # User library
│ ├── drivers/ # Device drivers + our BCM2711/2712 drivers
│ └── include/ # Headers
├── shell/ # SymOS-specific: SymShell, SymFmgr, SymTerm
│ ├── symshell/ # Desktop shell (based on S60 Avkon)
│ ├── symfmgr/ # File manager (based on S60 File Manager)
│ ├── symterm/ # Terminal (based on EShell)
│ └── syminst/ # .sis installer UI
├── bsp/ # Raspberry Pi BSP
│ ├── rpi4/ # BCM2711-specific: boot, MMU, cache, interrupt
│ └── rpi5/ # BCM2712-specific
├── compat/ # Compatibility shims
│ ├── telephony/ # Stub telephony server (returns KErrNotSupported)
│ ├── camera/ # V4L2 camera adapter for Pi Camera
│ └── s60v3/ # S60 3rd Ed. compatibility window mode
├── tools/ # Build tools, SBSv2, image creation scripts
├── third_party/ # zlib, OpenSSL, brcmfmac firmware
└── scripts/ # Build orchestration (build.py)
Architecture
┌─────────────────────────────────────────────────────────────────┐
│ Symbian Applications │
│ Opera Mobile │ Quickoffice │ N-Gage Games │ PyS60 │ Java ME │
├─────────────────────────────────────────────────────────────────┤
│ SymShell (Desktop UI) │
│ Avkon Framework │ Window Server │ App Launcher │ File Manager │
├─────────────────────────────────────────────────────────────────┤
│ Symbian OS Services │
│ F32 File Server │ Telephony Stub │ Camera Adapter │ Comms │
├─────────────────────────────────────────────────────────────────┤
│ euser.dll │
│ (User library — system call interface, CBase, descriptors) │
├─────────────────────────────────────────────────────────────────┤
│ EKA3 Kernel │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────────────────┐ │
│ │ Symbian OS │ │ Nanokernel │ │ Memory Model │ │
│ │ Kernel │ │ (nkernsmp) │ │ (epoc + Pi adaptation) │ │
│ └──────┬───────┘ └──────┬───────┘ └───────────┬─────────────┘ │
│ └────────────────┼─────────────────────┘ │
│ │ │
├──────────────────────────┼───────────────────────────────────────┤
│ BCM2711/2712 BSP │
│ Boot │ MMU │ Cache │ Interrupt │ DMA │ Mailbox │ GPIO │
├─────────────────────────────────────────────────────────────────┤
│ Raspberry Pi Hardware │
│ BCM2711/2712 SoC │ USB │ HDMI │ SD │ Ethernet │ Wi-Fi │ Audio │
└─────────────────────────────────────────────────────────────────┘
Key architectural decisions:
The kernel is EKA2, evolved. We started from the Symbian Foundation source and added BCM2711/2712 support in a new BSP directory. The nanokernel's SMP variant (
nkernsmp) is used on the Pi 5 (4× Cortex-A76); the UP variant (nkern) is used on the Pi 4 by default (though we also support nkernsmp on Pi 4 for development). The memory model is theepocvariant with adaptations for the Pi's memory map and up to 8 GB RAM.System services are the real ones. The F32 file server, the window server, the HAL — these are compiled from the original Symbian Foundation source. We did not rewrite them. We added drivers and shims where the original code expected phone hardware that doesn't exist.
Telephony is stubbed. The CTelephony API and related servers exist but return
KErrNotSupportedfor all operations. This is intentional — many Symbian apps check for telephony availability and gracefully degrade. Apps that require telephony as a hard dependency will fail to launch.Java ME works. Nokia donated the JRT (Java Runtime) to the Symbian Foundation under EPL. We ship it. Java MIDlets run. This opens up a vast library of legacy mobile Java applications.
The Avkon framework drives the desktop. S60's UI framework already had full pointer/touch support (since S60 5th Edition). We map pointer events to mouse events, add window decorations, and adapt the softkey paradigm to keyboard/mouse interaction. It works remarkably well — the Avkon list controls, editors, and dialogs are all pointer-aware.
How We Handle Screen Resolution
Symbian phones had fixed, small screens (240×320, 360×640, 640×360). SymOS targets 1920×1080 desktop displays. We handle this in three ways:
Native scaling: Most Symbian^3 / Anna / Belle apps are resolution-aware and adapt to the screen size. They were designed for nHD (640×360) but scale correctly to larger displays. Icons and fonts may appear large; the Settings app provides a display scaling slider.
Compatibility mode: For S60 3rd Edition apps (240×320, non-touch), SymOS renders them in a centered phone-sized window with virtual softkey buttons at the bottom. Think of it like running a DOS game in a window on Windows 95.
Fullscreen mode: Any app can be toggled to fullscreen via the title bar button or
Alt+Enter.
Roadmap
- [x] Kernel boot on BCM2711
- [x] HDMI framebuffer output
- [x] USB keyboard and mouse
- [x] SymShell desktop with windowed apps
- [x] Symbian .sis application installation and execution
- [x] Ethernet networking
- [x] Sound output (HDMI + 3.5mm)
- [ ] Wi-Fi connectivity (driver works, GUI configuration in progress)
- [ ] Raspberry Pi 5 full support (boot works, some drivers pending)
- [ ] Bluetooth (pairing works, A2DP in progress)
- [ ] Pi Camera support
- [ ] USB printer support
- [ ] Multi-language input methods
- [ ] SymOS SDK (for building new native apps on a Linux host)
- [ ] Raspberry Pi 5 native (without nkernsmp workaround)
FAQ
Can I run this on my PC?
Not natively. SymOS targets ARM (Raspberry Pi). Use the QEMU image for testing, but it cannot run Symbian ARM applications. If you want Symbian apps on a PC, use EKA2L1 — it's excellent for that.
Can I make phone calls?
No. There is no cellular modem. SymOS is a desktop system.
Why not just use EKA2L1?
EKA2L1 is an emulator — it reimplements Symbian APIs in C++ and translates ARM instructions on x86. SymOS runs the actual EKA2 kernel on actual ARM hardware. The difference matters for: (a) performance — no translation overhead, (b) accuracy — we run the real system code, not a reimplementation, (c) extensibility — we can modify the OS itself, not just the emulation layer. EKA2L1 is great for playing N-Gage games on your phone. SymOS is for living in Symbian.
Where do I get Symbian applications?
The Nokia Store (Ovi Store) shut down in 2014. Applications must be sourced from:
- Your own backups from old Symbian phones (use ROMPatcher+ to extract)
- Internet archives and Symbian community sites
- Open-source Symbian projects on GitHub (e.g., SymbianSource)
- The
symos-appsrepository on our GitHub, which collects freely redistributable Symbian software
Does Angry Birds work?
Yes. The Symbian^3 version runs beautifully at 1080p. The N-Gage version also works.
Does WhatsApp work?
No. WhatsApp discontinued Symbian support in 2016 and their servers no longer accept Symbian client connections.
Can I compile new applications for SymOS?
Not yet easily. Our SDK is a work-in-progress. Currently, you can:
- Write apps in Python using PyS60 (included)
- Write Java ME MIDlets
- Cross-compile C++ using the Symbian Foundation PDK toolchain (advanced)
The SymOS SDK (targeting modern GCC + CMake with Symbian API headers) is on the roadmap.
Is this legal?
Yes. The Symbian platform source code was released under the Eclipse Public License (EPL) in February 2010. EPL is an OSI-approved, FSF-approved open source license. The code that was published under EPL remains under EPL and cannot have that license revoked. Our new code is also under EPL. Symbian application binaries are a separate matter — users must obtain them legitimately.
Why "Freesia"?
Symbian releases were named after women: Anna, Belle, Carla, Donna. We continue the tradition. Freesia is a flower — it's delicate and blooms in unlikely conditions. Seemed fitting.
Contributing
We welcome contributions, especially in these areas:
- Driver development — BCM2711/2712 peripherals, USB device classes
- App compatibility testing — install apps, report what works and what doesn't in our compatibility tracker
- Shell improvements — the desktop shell is functional but rough around the edges
- Documentation — user guides, developer docs, app compatibility lists
- Translations — SymShell currently supports English and Finnish; we need more
See CONTRIBUTING.md for guidelines.
Community
- Website: symos.org
- Forum: forum.symos.org
- Discord: discord.gg/symos
- Wiki: github.com/symos-project/symos/wiki
License
SymOS is licensed under the Eclipse Public License 2.0 (EPL-2.0), the same license under which the Symbian Foundation released the original platform source code. This is not a coincidence — it ensures full license compatibility with the upstream Symbian source.
Third-party components:
-
zlib— zlib License (included in kernel source) -
brcmfmacfirmware — Broadcom proprietary (binary-only, loaded at runtime) - Java Runtime (JRT) — EPL-2.0 (donated by Nokia to Symbian Foundation)
- OpenSSL — Apache 2.0
Acknowledgments
SymOS stands on the shoulders of:
- Symbian Ltd. and the Symbian Foundation — for creating and open-sourcing one of the greatest mobile operating systems ever built
- The EKA2L1 project — for proving that Symbian emulation is viable and inspiring this project
- RISC OS Open — for showing that a niche ARM desktop OS can survive and thrive on the Raspberry Pi
- The Symbian community — for keeping the flame alive through forums, archives, and app collections long after Nokia moved on
SymOS is not affiliated with Nokia, HMD Global, or the Symbian Foundation. Symbian is a trademark of the Symbian Foundation Ltd. Raspberry Pi is a trademark of the Raspberry Pi Foundation.
Top comments (0)