all projects
shipped2025 to 2026

Embedded platform engineering

Vehicle Software Infrastructure

CI/CD and OTA infrastructure for containerized applications running on embedded Linux targets across more than one hardware architecture.

My role
Software and platform engineering contributor
Context
Porsche Digital internship, Vehicle Solutions & Data
Reading time
6 min read
Embedded platform engineering

01

Deployment changes when the target is real hardware

A container that runs in a development environment is not automatically ready for an embedded Linux target. Hardware architecture, network availability, storage, service startup, health checks, and recovery behavior all become part of the delivery path.

My work covered the pipeline between source changes and running services on target devices. That included containerized backend services, build and tagging automation, deployment workflows, and the system services needed to keep applications running after boot or update.

02

One delivery path across multiple targets

The CI/CD workflows had to produce the correct artifacts for multiple hardware architectures and move them through development and target environments consistently. Repetition was moved into pipeline logic so developers did not have to remember a different manual sequence for every target.

The useful part of this work was not a single pipeline file. It was making build, tagging, deployment, service orchestration, and update behavior agree across the system. A failure at any one of those boundaries can leave an embedded target difficult to inspect or recover.

03

Designing an update path that can fail safely

I taught myself Rust on the job and used it to implement a REST-based OTA update mechanism on three test vehicles. The updater checks versions, coordinates services, monitors health, and falls back when the new state is not healthy.

That work changed how I thought about deployment. On a remote or embedded target, an update is not complete when new files arrive. It is complete when the correct services start, the expected health signals appear, and the device still has a route back if they do not.

04

Engineering inside real constraints

The environment required practical decisions around Linux services, containers, architecture-specific artifacts, and automated recovery. I had to learn unfamiliar parts of the stack quickly while still producing work that fit an existing engineering system.

The public description stays general because the hardware, deployment topology, and internal platform details are confidential. The transferable work is the delivery model: reproducible builds, target-aware packaging, observable service startup, and defensive updates.

Outcomes

  1. 01Automated build, tagging, deployment, and update workflows for containerized C++ and Python backend services on ARM and x86 targets.
  2. 02A Rust OTA mechanism exercised on three test vehicles with version checks, health monitoring, service orchestration, and fallback logic.
  3. 03Hands-on experience connecting CI/CD systems to Linux services and physical target constraints.

What I learned

  1. 01Deployment automation must include the target's recovery path, not only the happy path.
  2. 02Cross-architecture delivery becomes manageable when artifact identity and pipeline stages are explicit.
  3. 03Learning a new language is easier when the problem has clear operational constraints and tests.