Die Abhängigkeiten
Ja, die Idee ist schon sehr aufwändig, aber wirklich alles von Grund auf neu zu machen, wäre echter Wahnsinn. Darum gibt es, wie in anderen Projekten auch, Abhängigkeiten.
Seit 2026 ist CarNine neu geschrieben: Die Oberfläche ist in Flutter, das Backend in Rust, und beide reden über gRPC miteinander. Hier steht, worauf die heutige Version aufbaut.
Auf dem Raspberry Pi
- Debian (trixie) mit Kernel und Firmware von Raspberry Pi. Das fertige Image für die SD-Karte baut debos
- ivi-homescreen von Toyota Connected zeigt die Flutter-Oberfläche ohne X-Server direkt auf dem Display. Gebaut wird es mit emb_cli
- FFmpeg liest die Musikdateien
- ALSA für den Ton über HDMI oder die Klinke
- UDisks2 erkennt den USB-Stick mit der Musik
- Valhalla berechnet die Routen, direkt auf dem Pi, ohne Internet
- SQLite für die Musikbibliothek, die Playlists und wo man zuletzt war
Die Oberfläche (Flutter)
- Flutter und Dart
- grpc und protobuf für die Verbindung zum Backend
- flutter_local_map, unser eigenes Paket für die Offline-Karte. Es baut auf flutter_map und vector_map_tiles auf, Letzteres mit kleinen Anpassungen für den Pi
- Die Schriften Manrope und Space Grotesk (SIL Open Font License)
Das Backend (Rust)
- Tokio für alles, was gleichzeitig läuft
- tonic und prost für gRPC
- cpal für die Tonausgabe, ein Ausgang für die ganze Laufzeit, damit es beim Titelwechsel nicht knackt
- rusqlite für SQLite
- zbus spricht über D-Bus mit UDisks2
- tracing für das Log
- serde und toml für die Konfigdatei
Die Sprachausgabe
- sherpa-onnx (Apache-2.0) macht aus den Ansagen Sprache, direkt auf dem Pi, ohne Internet. Es rechnet mit ONNX Runtime (MIT)
- Die Stimme „thorsten“ für Piper von Thorsten-Voice (CC0)
- Die Aussprachedaten von eSpeak NG (GPL-3.0)
Die Karte
- Die Kartendaten sind von OpenStreetMap (© OpenStreetMap-Mitwirkende, Lizenz ODbL), heruntergeladen bei Geofabrik
- tilemaker macht daraus die Kartenkacheln (Schema von OpenMapTiles, Lizenz CC-BY 4.0). Darum steht auf der Karte „© OpenMapTiles © OpenStreetMap-Mitwirkende“
Lizenzen
CarNine selbst steht unter der GPL-3.0. Die meisten Bausteine oben stehen unter MIT, BSD oder Apache-2.0. Unter GPL oder LGPL stehen der Linux-Kernel, viele Debian-Pakete, FFmpeg und die Aussprachedaten von eSpeak NG.
Jedes Paket im Image bringt seine Lizenztexte mit, unter /usr/share/doc/<paket>/copyright. Den Quellcode aller Teile unter GPL oder LGPL bekommt jeder, der danach fragt, mindestens drei Jahre lang, nachdem wir ein Image zuletzt weitergegeben haben, und höchstens zu unseren Kosten für Datenträger und Versand. Eine E-Mail an software@carnine.de genügt, bitte mit der Version des Images. Auf dem Gerät steht das Angebot in /usr/share/doc/carnine/SOURCE-OFFER.txt, daneben in source-packages.txt alle Quellpakete mit Version. Den Quellcode von CarNine selbst gibt es jederzeit auf GitHub, zu jeder Version mit Marke.
Selbst bauen
Wie man alles baut und auf den Pi bringt, steht im Repository auf GitHub, in der Dokumentation unter docs/07-deployment.md. Die genauen Versionen stehen dort in Cargo.lock und pubspec.lock.