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.

Architecture du SDK MOS4 : développez, exécutez, testez, livrez et exploitez votre conteneur sur une flotte d'appareils et le cloud. La couche plateforme est dessinée en cyan ; les trois éléments que vous possédez — votre code, votre conteneur et votre point de terminaison cloud — sont dessinés en doré.
Développer → exécuter → tester → livrer → exploiter. La plateforme détient le runtime, les transports et les commodités (cyan) ; vous détenez votre code, votre conteneur et votre point de terminaison cloud (doré).

Métriques clés

Les chiffres qui dimensionnent l'intégration.

89 interfaces typées services sur 16 packages de types partagés
180 fonctionnalités plateforme surfaces de service déclarées dans l’OS
10 s hot-swap Micro service Rust, de la fin de compilation au premier appel sur device
<5% surcharge conteneur CPU/RAM ; ~10 Mo RSS. Enveloppe de budget conteneur MCM.
Six symboles de langage (Py, R, Lua, Go, C, ++) reliés par des flèches vers un contour de conteneur unique — accent amber sur le conteneur

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
Le broker MQTT in-process traduit les topics pub/sub en appels de service typés. Payloads JSON ou binaires typés.

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.

Vous construisez sur MOS4 ?

Une réponse de l'équipe d'ingénierie, ~24 h. Pas de pitch, pas de NDA.

Parler à l'équipe