Plateforme · SDK
Livrez votre code en six langages, sur un runtime qui détient l'appareil.
Le SDK MOS4 est un kit de développement applicatif embarqué agnostique au langage. Il fournit un runtime de conteneur, un pont MQTT in-process, 89 interfaces protobuf typées et un outillage console pour les développeurs Python, Rust, Lua, Go, C et C++. La plateforme détient réseau, véhicule, énergie et stockage ; l'équipe écrit la logique applicative.
Métriques clés
Les chiffres qui dimensionnent l'intégration.
Runtimes de langage
Six langages avec images de base testées.
-
Python
numpy, scipy, PyTorch fonctionnent tels quels. Démarrez depuis une image de base vérifiée en CI.
-
Rust
Première classe. Une annotation #[component] câble le cycle de vie, le dispatch et l'observabilité.
-
C
Encapsulez les bibliothèques legacy. Bindings natifs via la même surface de conteneur OCI.
-
C++
Toolchain moderne. Même surface que C. SDK de cross-compilation fourni.
-
Go
Exemple de conteneur OCI avec budget de taille d'image imposé en CI.
-
Lua
Tiny static-musl interpreter (~600 KB on disk). Embedded scripting for ops glue without a heavyweight runtime.
Les exemples de conteneur OCI sont livrés avec des budgets de taille d'image imposés en CI sur 15 paires (langage, scénario). Les mises à jour de la couche système — une montée de CPython 3.12, par exemple — se propagent dans la flotte via un seul changement de digest ; pas de rebuild client.
Les six langages clients SDK partagent la même couverture wire-protocol — requête/réponse, streaming serveur, abonnement event-bus — avec des extraits quickstart extraits de la suite de tests live. Les mêmes définitions protobuf et le même pont MQTT servent chaque langage.
Installation
Ajoutez le SDK en une commande.
Deux bibliothèques clientes de référence couvrent Rust et Python. Les autres langages atteignent les services MOS4 via le pont MQTT — pas de SDK spécifique au langage requis.
Client Rust
cargo add mos-sdk-client Crate Rust. Génère les proxies typés et les clients en mode direct depuis les 89 interfaces proto.
Client Python
pip install mos-sdk-client Wheel Python. Même surface typée, async-first, livré avec des coroutines asyncio.
Lua, Go, C et C++ atteignent la même surface de service via le pont MQTT in-process — voir la documentation quickstart pour des exemples par langage.
Pont MQTT
Tout client. Tout langage. Sans SDK Munic.
MOS4 embarque un broker MQTT in-process. Les payloads sont acceptés en JSON simple ou en format binaire typé ; le JSON est transcodé à l'entrée. Un catalogue de services retained permet aux clients de découvrir les services disponibles à la connexion.
Handshake du pont MQTT. Un conteneur Python utilisant paho-mqtt publie un payload JSON ou binaire typé sur le topic mos/rpc/MspService/LoadGraph. Le broker MQTT in-process reçoit le message et transcode le JSON vers l'appel typé à l'entrée, puis dispatche LoadGraph vers le service MSP. Le service retourne une réponse ; le broker la publie en retour sur le topic de réponse pour le client Python. Toute bibliothèque cliente MQTT, tout langage, atteint tout service MOS4 sans SDK Munic requis.
sequenceDiagram participant Py as Conteneur Python<br/>(paho-mqtt) participant MQ as Broker MQTT<br/>(in-process) participant Svc as Service MSP Py->>MQ: PUBLISH mos/rpc/MspService/LoadGraph<br/>payload JSON ou typé Note over MQ: transcode JSON vers appel typé à l'entrée MQ->>Svc: appel typé LoadGraph(graph) Svc-->>MQ: réponse MQ-->>Py: PUBLISH mos/rpc/MspService/LoadGraph/reply Note over Py,MQ: toute bibliothèque client MQTT, tout langage — sans SDK Munic requis
Client MQTT Python → service MOS4
import json
import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect("localhost", 1883)
# Publier vers toute interface de micro service via le pont MQTT
client.publish(
"mos/rpc/MspService/LoadGraph",
payload=json.dumps(graph_json),
) Conteneur → signaux obdstacks
Tout langage de conteneur atteint tout micro service via le pont MQTT. Un conteneur Python
s'abonnant à topic mos/data/vehicle.speed reçoit le signal décodé
et nommé publié par obdstacks — pas de code service, pas de Rust, pas de SDK Munic requis.
Création de micro service Rust
Une annotation. Trente lignes.
Les développeurs Rust écrivant un micro service natif annotent une struct avec #[component] et ajoutent un appel build.rs. Le framework génère le dispatch de service, la création de proxy, le câblage du cycle de vie, les accesseurs de config, l'instrumentation d'observabilité et un faux pour les tests unitaires.
use mos_sdk::component;
#[component]
pub struct MyService {
config: MyConfig,
}
#[async_trait::async_trait]
impl provided::my::MyServiceServer for MyService {
async fn do_thing(&self, req: Request) -> Result<Response> {
// votre logique — observabilité et cycle de vie câblés par le framework
Ok(Response { ok: true })
}
}
// build.rs — appel unique qui génère le trait serveur, proxy, faux, métriques
fn main() {
build_api::generate_component_code(env!("CARGO_MANIFEST_DIR"), "src");
} Les faux générés compilent sans daemon MOS4 en cours — les tests unitaires s'exécutent sur n'importe quel hôte.
Média live
Streaming RTSP / ONVIF et WebRTC.
Le micro service de capture caméra expose des chemins RTSP / ONVIF live et WebRTC en plus de ses entrées MIPI-CSI, GMSL2 et UVC. Les applications SDK s'abonnant via MQTT ou le transport de frames reçoivent des frames GPU partagées indépendamment de la source. Voir Vision pour la matrice d'entrée complète.
Console
Un binaire. Shell, REST, web, série.
Quatre transports, un processus
Le binaire console expose chaque micro service MOS4 enregistré, chaque clé de config et chaque entrée de base de données via HTTP REST + Web UI, un shell interactif et un shell série — simultanément, depuis un seul binaire. Zéro code de transport par service.
Services sans friction
services call <interface> <méthode> introspects tout service enregistré.
Debug terrain, sur l'appareil.
Runtime de conteneur
Isolation de conteneur en production.
Le gestionnaire de conteneurs impose les limites CPU, mémoire et I/O par conteneur comme un
contrat — pas au mieux. L'analyse de fichier Docker Compose v3 réutilise les workflows compose
existants. Le CLI autonome mcm est préinstallé sur les images de production.
Pour l'observabilité et la télémétrie à l'échelle de la flotte, voir Opérations.
Surcharge
<5% CPU/RAM
RSS par conteneur
~10 Mo
Isolation
imposée
CLI
mcm (préinstallé)
Flux pilotés par le cloud
Appeler tout micro service depuis le cloud via le pont RPC.
Le pont RPC achemine les appels JSON des clients externes vers tout service MOS4 enregistré —
y compris les conteneurs. method ListServices() expose le catalogue
live à l'exécution. Cas d'usage : debug distant, déblocage de situations terrain rares, et flux
hybrides où un agent IA ou un service cloud pilote le device. Voir Micro services pour les surfaces côté cloud et les patterns
d'intégration.
Le port RPC interne n'est pas exposé par défaut. L'accès externe passe par le pont MQTT ou le pont RPC — pas d'exposition directe de port pour l'outillage.
Commodités de plateforme
L'infrastructure que votre app n'écrit pas.
-
Réseaux
Modem, WiFi, BTLE, GNSS. Failover automatique ; politique via TOML. Buffering hors-ligne et upload opportuniste quand le forfait data est contraint.
-
Véhicule
CAN, OBD, obdstacks 16 protocoles. Signaux décodés via MQTT — sans SDK Munic requis.
-
Énergie
Conditions de réveil, stratégie de charge batterie, sleep/wake, scheduling basse consommation via politique TOML configurable.
-
Stockage
Résistant aux coupures secteur avec wear levelling. API transactionnelle. Quota par conteneur.
-
Configuration
Réglages device centralisés. Piloté par API. Déployable par OTA.
-
Télémétrie
Protocole MD21 — multiplexé, compressé, messagerie live bidirectionnelle.
Parcourir le catalogue complet pour voir tous les micro services disponibles et leurs interfaces.
Ce que vous apportez vs ce que nous apportons
Répartition honnête.
Vous apportez
- · Code applicatif en Python, Rust, C, C++, Go ou Lua.
- · Expertise métier — règles de décodage véhicule, modèles IA, logique business.
- · Tests pour votre surface applicative.
- · Le cas d'usage et le contrat de données.
Munic apporte
- · OS, runtime, superviseur, hot-swap en 10 s.
- · Commodités de plateforme : réseau, véhicule, énergie, stockage.
- · 89 interfaces typées — une seule dépendance.
- · Observabilité, OTA de flotte et pipeline sécurité.
FAQ
Questions fréquentes
-
Quels langages sont livrés avec des images de base pré-construites ?
Python, Rust, C, C++, Go et Lua — six runtimes de langage avec exemples de conteneur OCI et budgets de taille d'image imposés en CI sur 15 paires (langage, scénario).
-
Comment fonctionne le pont MQTT ?
MOS4 embarque un broker MQTT in-process — pas de broker externe requis. Les payloads sont acceptés en JSON simple ou en format binaire typé ; le JSON est transcodé à l'entrée. Un catalogue de services retained permet aux clients de découvrir les services disponibles à la connexion. Toute bibliothèque cliente MQTT, tout langage — atteint les services MOS4 sans SDK Munic requis.
-
Quelle est la vitesse du hot-swap ?
10 secondes de la fin de compilation au premier appel de service réussi sur un vrai device. Quand un nouveau processus enregistre un micro service avec un component.id existant, le master arrête l'ancienne instance, injecte l'état sérialisé et démarre le remplacement. Pas de re-flash. Le hot-swap est une fonctionnalité des micro services Rust ; les conteneurs (Python, C, C++, Go) suivent un chemin de mise à jour OTA différent.
-
Quel est le budget de surcharge du conteneur ?
L'enveloppe de budget conteneur MCM est inférieure à 5% de surcharge CPU/RAM et environ 10 Mo de RSS par conteneur. Le CLI autonome mcm est préinstallé sur les images de production.
-
Le port RPC interne est-il exposé pour l'outillage direct ?
Le port RPC interne n'est pas exposé par défaut. Le pont RPC achemine les appels JSON des clients externes vers tout service MOS4 enregistré ; utilisez le pont MQTT ou le pont RPC pour l'accès externe.
-
À quoi sert le pont RPC ?
Le pont RPC appelle tout service MOS4 — y compris les conteneurs — depuis le cloud via API. Cas d'usage : debug distant, déblocage de situations terrain rares, et flux hybrides où un agent IA pilote le device. Pas de code de protocole ou de câblage au-delà de le service et d'un endpoint côté cloud.
Outils développeur
Outillage adapté à l'IA pour les développeurs MOS4.
Le pack développeur MOS4 étend le SDK avec un connecteur MCP, un linter de configuration, des lecteurs de logs et des requêtes sur le graphe de projet — pour que les outils IA déjà utilisés par votre équipe comprennent la plateforme. Disponible avec l'ingénierie.
Voir les outils développeur →Le code n'est qu'un chemin. Les moteurs no-code couvrent le traitement du signal, l'automatisation de politique, les piles véhicule et les funnels IA — choisissez le chemin qui correspond au travail.
Vous voulez un workspace d'exemple ?
Le quickstart couvre la surface SDK, le choix du langage et le contrat wire-protocol.