Before that, we built Android-based infotainment systems, mobile internet routers and some kind of wireless display like Miracast.
Over time, our work became highly inspired by two software platforms and their characteristics: Erlang and Android.
Erlang's influence came mostly from its reliability characteristics and its shared-nothing methodology. Android provides a modular, component-based application framework including a software development kit and documentation which we wanted to have for all kinds of automotive software systems as well.
This led to the developement of the Mindroid application frameworks.
What is Mindroid?In short, Mindroid is a component-based application framework similar to Google's Android, including a software development kit and documentation. It builds upon the Actor model as core system architecture building block and provides an event-based programming paradigm.
Currently, there are three variants of Mindroid.
- Mindroid.java targets the Java platform
- Mindroid.cpp targets native platforms, like Linux or QNX Neutrino RTOS
- Mindroid.ecpp targets deeply embedded systems without dynamic memory management, like AUTOSAR OS, CMSIS RTOS or even bare metal
- Modularity: Components with clear interfaces, threading and dependencies
- Reuse: Set of reusable components across projects and platforms
- SDK: Sustainable, public APIs crafted by an API first design approach (Finding good abstractions and truly care about naming things)
- Reliability, testability and refactorings: No shared state between components
- Software quality highly benefits from Actor model design approach
- No complex critical sections
- Callbacks run in right thread contexts
- Low energy, CPU time and memory requirements
- Logging (No long-lasting debugging sessions)
- Slim platform: Simplicity is prerequisite for reliability
- Scalability: Distributed systems running multiple Mindroid instances on different nodes
Slide 5 below illustrates the Erlang-style actor process model using a CarFinder component that relies on a LocationManager for location updates.
For future, we plan to implement Erlang-style distribution transparency for services and service discovery. And we would love to have a Rust variant of Mindroid.
- Building a car (from the perspective of a pragmatic software engineer)
- Our Concurrent Past; Our Distributed Future
- Butler Lampson's Hints for Computer System Design