OpenWrt – operating system architecture
Whereas desktop distributions use glib+dbus+udev(part of systemd), OpenWrt uses libubox+ubus+procd. This provides some pretty awesome functionality without requiring huge libraries with huge dependencies (*cough* glib).
Desktop Distributions | OpenWrt | Android | Replicant | mer-based | |||
---|---|---|---|---|---|---|---|
Typical main memory size | 128 MiB to 16 GiB (or more) | 32 MiB to 512 MiB1) | min 92 MiB for Android 2.1 min 340 MiB for Android 4.0 | ? | |||
Supported instruction sets | almost anything | almost anything | x86, 86-64, ARM, MIPS32 | ||||
non-volatile storage space | 100 MiB | 8 MiB2) | 150MiB for Android 2.1 512MiB for Android 4.0 | ? | |||
kernel | Linux kernel |
||||||
FOSS and binary drivers | FOSS drivers: e.g. 802.11; Iaccess | Android binary drivers | |||||
C standard library | glibc | uClibc, musl | bionic | glibc + libhybris | eglibc 2.15 | ||
init | init Upstart Initng | systemd | busybox-initd | procd | Android init-fork | systemd |
|
rsyslog / syslog-ng | busybox-klogd, busybox-syslogd | ||||||
watchdog | busybox-watchdog | ||||||
udev | hotplug2 | ||||||
cron | busybox-crond | ||||||
atd | na | ||||||
D-Bus | ubus | Binder | ? | D-Bus | |||
network configuration | NetworkManager + GUI | netifd | ConnectivityManager (not ConnMan = ConnectionManager!) | ? | ConnMan | ||
GLib (GObject, Glib, GModule, GThread, GIO) | libubox | ? | ? | Qt-based? | |||
PulseAudio | pulseaudio (optional) | PulseAudio | PulseAudio | PulseAudio | |||
Package management system | dpkg/APT RPM/yum portage pacman ... | opkg | apk | ? | RPM |
What's the difference between ubus vs dbus?
dbus
is bloated, its C API is very annoying to use and requires writing large amounts of boilerplate code. In fact, the pure C API is so annoying that its own API documentation states: “If you use this low-level API directly, you're signing up for some pain.”
ubus
is tiny and has the advantage of being easy to use from regular C code, as well as automatically making all exported API functionality also available to shell scripts with no extra effort.
“Of course, NetworkManager should be renamed to “unetwork”
, dbus to “ubus”
, PulseAudio to “usound”
, and X.Org-Server/Wayland-Compositor to “udisplay”
; and then indescribable happiness would come down to all people of this world.” – Lennart Poettering
- PulseAudio does not depend on GLib and does not seem to depends on D-Bus neither: LFS