Slide 1

Slide 1 text

QA&Test 2026 Bilbao TUTORIAL Container Developer Environments Virtualizing your IDEs for embedded projects Dr. Oleg Nenashev Independent Consultant

Slide 2

Slide 2 text

2

Slide 3

Slide 3 text

Disclaimer ● I am at this conference as independent consultant, #OpenToWork ● I do not represent any of my current client(s) or employers ● Opinions are my own speakerdeck.com/onenashev

Slide 4

Slide 4 text

> whoami Dr. Nenashev / Mr. Jenkins Community Builder, Dev Tools DevRel & DevOps Consultant @oleg_nenashev oleg-nenashev https://oleg.swiss/ #RussiansAgainstPutin #StandWithUkraine

Slide 5

Slide 5 text

> whoami --automotive --embedded --hardware @oleg_nenashev oleg-nenashev https://oleg.swiss/ LibreCores CI CloudBees Embedded & Automotive Day in Stuttgart 5

Slide 6

Slide 6 text

Embedded Developers Can Have Nice Things 6

Slide 7

Slide 7 text

Today’s Workshop https://github.com/oleg-nenashev/c de-for-embedded-workshop 7

Slide 8

Slide 8 text

What you will learn? ● Dev Containers basics ● Dev Containers and AI integrations ● Using Dev Containers for Python and C/C++ projects ● Using Dev Containers for ROS/Gazebo ● Using Dev Containers in CI and Cloud Developer Environments 8

Slide 9

Slide 9 text

Today’s tools ● Visual Studio Code ● Dev Containers ● Docker Desktop or Podman ● GitHub Copilot ● GitHub Codespaces 9

Slide 10

Slide 10 text

Today IEEE Spectrum Research among members https://spectrum.ieee.org/top-progra mming-languages-2021 10

Slide 11

Slide 11 text

Workshop chapters 1. 2. 3. 4. 5. 6. 7. Introduction to Dev Containers Environment Setup Dev Containers intro, with Python stack Using AI and agents in Dev Containers C/C++ tooling in a Dev Container Custom Docker images in Devcontainers ROS2 and Gazebo in a Dev Container Optional - YOU CHOOSE 8. 9. 10. 11. Using Devcontainers in CI Integration Testing with Testcontainers Connecting hardware to a Dev Container Moving to a Cloud Developer Environment Part I. 9:15 - 10:30 Part II. 11:00 - 13:00 11

Slide 12

Slide 12 text

Risks - Network Docker images & packages 12

Slide 13

Slide 13 text

Risks - GitHub Stability 13

Slide 14

Slide 14 text

Before we start 14

Slide 15

Slide 15 text

Is your laptop enough to work on the main project? 15

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

Your DevEnv is already elsewhere 17

Slide 18

Slide 18 text

What does engineer use daily? ● ● ● ● ● ● ● CI Systems Issue Trackers Chats Zoom / Google Meet / … Email Calendar … 18

Slide 19

Slide 19 text

CloudBees Office, Neuchatel, ~2015

Slide 20

Slide 20 text

Local Development In Containers 20

Slide 21

Slide 21 text

Why containers? ● Configuration Management as Code ● Reusability ● Fast provisioning ● Clean environments ● Disposability ● Clustering

Slide 22

Slide 22 text

My Previous Presentations ● ● ● Developer Tools & Containers Jenkins, Docker, WireMock, Testcontainers See https://speakerdeck.com/onenashev/collections/embedded 22

Slide 23

Slide 23 text

2017 - Docker in Embedded Prototypes, Dev Tools Docker Swarm Cluster on Raspberry Pi Test Infrastructures, CI/CD

Slide 24

Slide 24 text

2023 - Containers in testing for embedded projects 24

Slide 25

Slide 25 text

2025 - Local Dev Environments in containers, too Local Container Engine or Cloud 25

Slide 26

Slide 26 text

01 - Dev Containers 101 26

Slide 27

Slide 27 text

+ IDE Integrations https://containers.dev/ 27

Slide 28

Slide 28 text

Dev Containers are not just simple containers 28

Slide 29

Slide 29 text

Containerized IDEs Source: https://code.visualstudio.com/docs/devcontainers/containers 29

Slide 30

Slide 30 text

Dev Containers 101 https://hub.docker.com/r/microsoft/devcontainers-cpp 30

Slide 31

Slide 31 text

Dev Containers 101 .devcontainer/ devcontainer.json Configuration JSON Docker image, container parameters, IDE plugins containers.dev/ implementors/spec/ 31

Slide 32

Slide 32 text

Dev Containers ● Official images for common tech stacks ● Dev Container images provided by projects and vendors ● DYI: Single container ● DYI: Multi-container instances https://github.com/ devcontainers/images containers.dev/guide/dockerfile 32

Slide 33

Slide 33 text

Dev Containers for your dev environments Your developer tools and environments, packaged as containers. With proper developer experience Supported in: ● ● ● ● ● Visual Studio Code (link) Visual Studio (link) IntelliJ Platform IDEs (link) Cloud IDEs and Services CI/CD Systems https://containers.dev/ 33

Slide 34

Slide 34 text

Et Windows? ● Multiple Docker engines run on Windows ● Normally, Windows Subsystem for Linux is used (WSL2) under the hood ● Native Windows containers are possible, too ○ Not in this workshop 34

Slide 35

Slide 35 text

Add-ons ● Templates https://containers.dev/templates 35

Slide 36

Slide 36 text

Add-ons ● Templates ● Features https://containers.dev/features 36

Slide 37

Slide 37 text

* For Python Most Python features come from pipx 37

Slide 38

Slide 38 text

Add-ons ● Templates ● Features ● IDE Plugins 38

Slide 39

Slide 39 text

Python Example Source: https://github.com/wiremock/python-wiremock 39

Slide 40

Slide 40 text

Example - CMake in a Dev Container https://github.com/testcontainers/ testcontainers-native 40

Slide 41

Slide 41 text

Example GoogleTest in a Dev Container https://github.com/testcontainers/ 41 testcontainers-native

Slide 42

Slide 42 text

Add-ons ● Templates ● Features ● IDE Plugins ● Post-init hooks 42

Slide 43

Slide 43 text

Dev Containers Reuse Source: https://containers.dev/overview#De velopment-vs-production 43

Slide 44

Slide 44 text

Reuse Dev Containers can be shared as a part of your project Dev Containers can be reused in CI/CD pipelines https://github.com/testcontainers/testcontainers-native/blob/main/.github/workflows/ci.yml 44

Slide 45

Slide 45 text

02 - AI Integrations 45

Slide 46

Slide 46 text

Dev Containers supports AI 1. IDE Integrations and plugins for Generative AI and Agentic development a. b. c. All plugins work Built-in sandboxing for agents through the container GitHub access tokens and integrations are propagated 2. MCPs can run locally, can connect to external services and to the ones on the dev machine 3. LLM/SLM providers can be connected, including local ones 46

Slide 47

Slide 47 text

LLM Runtimes

Slide 48

Slide 48 text

LLM Runtimes Backends https://github.com/ggml-org/llama.cpp# supported-backends

Slide 49

Slide 49 text

Example - Ollama as a DevContainer Feature https://github.com/prulloac/devcontainer-features/tree/main/src/ollama 49

Slide 50

Slide 50 text

And Claude? ● https://code.claude.com/docs/en/devcontainer 50

Slide 51

Slide 51 text

04 - C/C++ Tooling 51

Slide 52

Slide 52 text

C/C++ Developers Can Have Nice Things 52

Slide 53

Slide 53 text

C/C++ - Quick Start 1. Clone https://github.com/microsoft/vscode-remote-try-cpp 2. Open the project in VSCode 3. Install the Dev Containers extension 4. Reopen the project in a container 53

Slide 54

Slide 54 text

C++ Template https://github. com/devcont ainers/templa tes/tree/main/ src/cpp 54

Slide 55

Slide 55 text

Dev Containers https://containers.dev/features 55

Slide 56

Slide 56 text

Sample: https://github.com/microsoft/vscode-remote-try-cpp 56

Slide 57

Slide 57 text

4 Environment runs in a container 2. The workspace is mapped 3. Tools are accessible 4. IDE plugins, including Git, Intellisense & Co 5. AI Agent works, too 5 1. 3 1 Sample: https://github.com/microsoft/vscode-remote-try-cpp 57

Slide 58

Slide 58 text

04 - Custom Images for Dev Containers 58

Slide 59

Slide 59 text

Dev Containers ● Official images for common tech stacks ● Dev Container images provided by projects and vendors ● DYI: Single container ● DYI: Multi-container instances https://github.com/ devcontainers/images containers.dev/guide/dockerfile 59

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

DIY Dev Containers 1. Single container From image registry or Dockerfile containers.dev/guide/dockerfile 61

Slide 62

Slide 62 text

DYI Dev Containers 1. Single container 2. Multi-container systems containers.dev/guide/dockerfile#docker-compose 62

Slide 63

Slide 63 text

05 - ROS 2 and Gazebo in a Dev Container 63

Slide 64

Slide 64 text

Let’s take a real embedded example! ● Open Robotics stack ● ROS 2 - Robot Operating System ○ https://github.com/ros2 ● Gazebo - simulator ○ https://gazebosim.org/ ● Python and C/C++ runtime and development stack FOSDEM 2025 - OPEN ROBOTICS ROOM 64

Slide 65

Slide 65 text

What will we do? ● Show & Tell for the Dev Container ● The demo is based on the official Gazebo + ROS 2 template ○ ○ gazebosim/ros_gz_project_template gazebosim.org/docs/latest/ros_gz_project_template_guide 65

Slide 66

Slide 66 text

Show & Tell - Next steps ● See oleg-nenashev/cde-for-embedded-workshop/blob/main/05-ros-gaz ebo/README.md 66

Slide 67

Slide 67 text

https://code.claude.com/docs/en/de vcontainer O6 - Container Cloud Developer Environments (CDEs) 67

Slide 68

Slide 68 text

IDEs CloudBees Office, Neuchatel, ~2015

Slide 69

Slide 69 text

We were doing CDEs before they were a mainstream Image source: https://www.combell.com/en/blog/w hat-is-rdp-remote-desktop-protocol/ 69

Slide 70

Slide 70 text

Cloud Developer Environments ● Most of the functionality runs in the cloud ● Local Tools / IDEs are just wrappers ● SaaS, public cloud or self-hosted ● Resources and licenses can be shared 70

Slide 71

Slide 71 text

Embedded Projects CDE suitable for your projects DYI 71

Slide 72

Slide 72 text

Existing CDEs ● ● ● ● ● ● ● ● ● GitHub Codespaces Eclipse Che / Theia Ona (fka Gitpod) AWS Cloud9 Strong Network (Citrix) Coder Cloudomation … Web based AI IDEs Source: https://discord.com/blog/how-discord-moved-engin 72 eering-to-cloud-development-environments

Slide 73

Slide 73 text

Example - GitHub Codespaces 73

Slide 74

Slide 74 text

Example - GitHub Codespaces 74

Slide 75

Slide 75 text

Optional Chapters 75

Slide 76

Slide 76 text

Choose the next step (if we have time) ● Using Devcontainers in CI ● Integration Testing with Testcontainers ● Connecting hardware to a Dev Container ● Moving to a Cloud Developer Environment ● Using Nix in Devcontainers All examples are in https://github.com/oleg-nenashev/cde-for-embed ded-workshop 76

Slide 77

Slide 77 text

07 - Integration Testing 77

Slide 78

Slide 78 text

Containers bring advantages to embedded projects See https://speakerdeck.com/ onenashev/collections/e mbedded 78

Slide 79

Slide 79 text

Dev Containers offers container nesting tools ● Docker-in-Docker feature ○ Create child containers inside a container, independent from the host's docker instance. ○ Docker (Docker-in-Docker) ○ Compatible with Testcontainers ● Docker outside of Docker ○ ○ Re-use the host Docker socket, adding the Docker CLI to a container. Docker (docker-outside-of-docker) 79

Slide 80

Slide 80 text

Demos ● Quickstart: ○ https://github.com/microsoft/vscode-remote-try-cpp ● My Example - Testcontainers for C/C++ ○ ○ ○ github.com/testcontainers/testcontainers-c Testcontainers can run in Dev Containers You can use GitHub Codespaces too 80

Slide 81

Slide 81 text

WireMock for Google Test / C++ github.com/testcontainers/te stcontainers-c/tree/main/de mo/google-test 81

Slide 82

Slide 82 text

08 - Using hardware, FPGAs and Simulators 82

Slide 83

Slide 83 text

Testing with hardware Attached peripherals VM, container or bare-metal Your Developer Machine Deploy bit-files, Blasting cables Debugging cables, firmware upload Runtime Tools Drivers Peripherals We don’t change them, huh? Power Reset when it hangs

Slide 84

Slide 84 text

Docker & FPGA - HOWTO ● ● ● ● USB/Ethernet Ports can be exposed to a container Docker image can include tools and drivers https://github.com/halfmanhalftaco/fpga-docker https://www.starwaredesign.com/index.php/blog/ 64-fpga-meets-devops-xilinx-vivado-and-jenkins-with-docker 84

Slide 85

Slide 85 text

Hardware tests with containers? Expectations ● It works Reality ● It works on a success path ● You can run containers in privileged mode ● BUT: software errors, timeouts, access conflicts, device hanging when switching containers ● You can use drivers from host OS ● BUT: you still need special test equipment and drivers There are limitations, but doable

Slide 86

Slide 86 text

Containers for Simulations ● We avoid using Hardware when possible ● Low overhead and startup time ● Resource quota management ○ CPU/RAM ○ Prioritization for users ○ Licenses ● Multi-instance tests (Docker Compose, Kubernetes Pods, etc.) 86

Slide 87

Slide 87 text

Example - Xilinx Tools FPGA grids can be served and used in Kubernetes CDEs can be provisioned accordingly https://github.com/Xilinx/FP GA_as_a_Service 87

Slide 88

Slide 88 text

QEMU ● Multi-platform execution on a single machine ● Container adapters are available https://github.com/qemus 88

Slide 89

Slide 89 text

Dev Container for Simulations ● Most Simulators already have Docker images ● Docker images can be quickly converted to Dev Containers 89

Slide 90

Slide 90 text

Example - Verilator 90

Slide 91

Slide 91 text

09 - Custom CDE 91

Slide 92

Slide 92 text

Existing CDEs, but for Embedded Projects ● IDE Extensions ● Dev Container(s) for… ○ Build Tools ○ Simulators ○ Verification tools ● Testcontainers 92

Slide 93

Slide 93 text

Embedded Projects Better Dev X or security/compliance may require a custom CDE CDE suitable for your projects DYI 93

Slide 94

Slide 94 text

DIY CDE Cluster Your Cloud FPGA as a service Source: https://medium.com/@elliotgraebert/laptop-development-is-dead 94 -why-remote-development-is-the-future-f92ce103fd13

Slide 95

Slide 95 text

DYI CDEs ● You can build a CDE on your own ● IDEs with CDE plugins ● Control planes ● Workspaces & Cloud ● Storage / Data (!) Security aspect is an area for commercial CDEs Source: https://coder.com/ 95

Slide 96

Slide 96 text

DYI CDEs ● Dev Containers and compatible IDEs ● Container Engines (e.g. Docker) and Kubernetes for the environment ● Device Plugins for FPGA (e.g. one for Xilinx) ● KubeVirt for virtual machines 96

Slide 97

Slide 97 text

THE END?

Slide 98

Slide 98 text

Takeaways 1. Consider using Dev Containers 2. There are tools and frameworks for embedded projects, but a lot of DYI 3. For common software stacks, the existing IDEs are at your service 4. There are features for many common use-cases

Slide 99

Slide 99 text

QUESTIONS? Contacts: E-mail: [email protected] GitHub: oleg-nenashev Twitter: @oleg_nenashev #OpenToWork 99

Slide 100

Slide 100 text

References ● https://github.com/oleg-nenashev/workshop-dev-containers-for-em bedded/ and the links there 100